Форум: "WinAPI";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];
ВнизNet Send по заданному адресу Найти похожие ветки
← →
ronyn (2005-08-16 00:36) [0]NetSend("text Messages", ip_address,...) примерно так, если правильно помню. Так вот, надо , чтобы IP был например равен Edit1.Text. Как это сделать?
← →
KilkennyCat © (2005-08-16 00:41) [1](с) La Mer
procedure netsend(adr: pchar; mesg: pchar);
begin
winexec("net send " + adr + " " + mesg, sw_hide)
end;
← →
Leonid Troyanovsky © (2005-08-16 08:59) [2]
> 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.
← →
Lamer@fools.ua © (2005-08-16 09:14) [3]
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;
← →
ronyn (2005-08-18 00:28) [4]Интересно получается, один предлагает код величиной в строку, другой величиной в 30 строк. Тоже самое было с громкостью TMediaPlayer. В чем же здесь прикол? Зачем писать такой код если есть одна строка?!
← →
KilkennyCat © (2005-08-18 02:05) [5]
> [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)
спасибо за пояснения.
← →
Leonid Troyanovsky © (2005-08-18 09:01) [6]
> 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.
← →
Leonid Troyanovsky © (2005-08-18 09:07) [7]
> 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.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c