Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Net Send по заданному адресу [D7, WinXP]


ronyn ©   (2005-08-16 00:36:00) 

NetSend('text Messages', ip_address,...) примерно так, если правильно помню. Так вот, надо , чтобы IP  был например равен Edit1.Text. Как это сделать?


Leonid Troyanovsky   (2005-08-18 09:07:00) [1]


> KilkennyCat ©   (18.08.05 02:05) [5]

> http://delphibase.spb.ru/?action=viewbook&book=10417&topic=netlan


В 9х можно слать сообщение через NETMESSAGEBUFFERSEND
из netapi.dll (16 битной). Т.е., через thunk.

См., например,

http://groups-beta.google.com/group/fido7.ru.delphi/msg/d0f74710d8fc6131

--
Regards, LVT.


Leonid Troyanovsky   (2005-08-18 09:01:00) [2]


> ronyn   (18.08.05 00:28) [4]
> Интересно получается, один предлагает код величиной в строку,
> другой величиной в 30 строк. Тоже самое было с громкостью
> TMediaPlayer. В чем же здесь прикол? Зачем писать такой
> код если есть одна строка?!


Первый вариант вызывает внешнюю программу net.exe,
а второй - непосредственно функцию NetApi32.dll.
Во втором случае контроль за происходящим больше,
да и возможностей у этой функции поболее, например,
с ее помощью можно отправить сообщения с другого
компьютера, если, скажем, messenger на локальной машине
не пущен. Правда, код будет немного другим.
Кстати, и приведенный вариант можно сделать короче:


procedure NetSend(const AMessage, AToComputer: WideString);
var
 NetApi32: HMODULE;
 NetMessageBufferSend: function (ServerName, ToName, FromName: PWideChar;
   Buffer: PWChar; BufLen: DWORD): DWORD stdcall;
begin
NetApi32 := LoadLibrary('NetApi32.dll');
if NetApi32 <= HINSTANCE_ERROR then
  raise EOSerror.CreateFmt('LoadLibrary error %d',[GetLastError]);
NetMessageBufferSend := GetProcAddress(NetApi32, 'NetMessageBufferSend');
try
  Win32Check(Assigned(NetMessageBufferSend));
  if NetMessageBufferSend( nil,
                           PWideChar(AToComputer),
                           nil,
                           PWideChar(AMessage),
                           Length(AMessage) * SizeOf(WideChar)) <> 0 then
    raise EOSError.CreateFmt('Net API error %d',[GetLastError]);
finally
  FreeLibrary(NetApi32);
end;
end;


--
Regards, LVT.


KilkennyCat   (2005-08-18 02:05:00) [3]


> [4] ronyn   (18.08.05 00:28)


хороший вопрос.
http://delphibase.spb.ru/?action=viewbook&book=10417&topic=netlan


> [2] Leonid Troyanovsky ©   (16.08.05 08:59)


спасибо за пояснения.


ronyn   (2005-08-18 00:28:00) [4]

Интересно получается, один предлагает код величиной в строку, другой величиной в 30 строк. Тоже самое было с громкостью TMediaPlayer. В чем же здесь прикол? Зачем писать такой код если есть одна строка?!


Lamer@fools.ua   (2005-08-16 09:14:00) [5]

function NetSend(const AMessage, AToComputer: AnsiString): LongWord;
type
 TNetMessageBufferSend = function (ServerName, ToName, FromName: PWideChar;
 Buffer: Pointer; BufLen: DWORD): LongWord stdcall;
var
 NetApi32: HMODULE;
 NetMessageBufferSend: TNetMessageBufferSend;
 MessageW, ToComputerW: WideString;
begin
 Windows.SetLastError(NO_ERROR);
 NetApi32 := LoadLibrary('NetApi32.dll');
 if NetApi32 <= HINSTANCE_ERROR then
 begin
   Result := Windows.GetLastError;
   Exit;
 end;
 try
   NetMessageBufferSend := GetProcAddress(NetApi32, 'NetMessageBufferSend');
   if @NetMessageBufferSend = nil then
   begin
     Result := ERROR_INVALID_FUNCTION;
     Exit;
   end;
   MessageW := WideString(AMessage);
   ToComputerW := WideString(AToComputer);
   Result := NetMessageBufferSend(nil, PWideChar(ToComputerW), nil,
     PWideChar(MessageW), Length(MessageW) * SizeOf(WideChar));
 finally
   FreeLibrary(NetApi32);
 end;
end;


Leonid Troyanovsky   (2005-08-16 08:59:00) [6]


> KilkennyCat ©   (16.08.05 00:41) [1]

> winexec('net send ' + adr + ' ' + mesg, sw_hide)


 PChar('net send ' + adr + ' ' + mesg).
 Кроме того, нет нужды в передаче PChar instead String.
 Ну, и удобней пользовать функцию Format, например:

resourcestring
 rsNetsendAddrMsg = 'net send %s %s';
..
 .. := Format(rsNetsendAddrMsg, [Adr, Msg])

--
Regards, LVT.


KilkennyCat   (2005-08-16 00:41:00) [7]

(с) La Mer

procedure netsend(adr: pchar; mesg: pchar);
begin
winexec('net send ' + adr + ' ' + mesg, sw_hide)
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо