Q :關於給居於網路裡面的電腦發送訊息的問題?
主要解答者:jianzhang提交人:zflying2000
感謝:li_zhifu、hnxrm
審核者:dext論壇對應貼子:查看
A :
我想問一個問題,就是如何通過程式控制對區域網路內或者廣域網路中能ping通的電腦發送訊息並且可以在另外一台電腦上顯示出來。就是利用windows的message服務。相似的例子就是那個信史服務軟體的功能。
不知道在delphi中如何調用。或者其原來是如何?
用那些API函數功能?
非常感謝!
保證給分數!
---------------------------------------------------------------
Winexec('net send 168.1.100.8 this is a test',sw_hide);
---------------------------------------------------------------
Winexec('net send * this is a test',sw_hide);
這就能廣播了
把this is a test這句話,用個字串變數來代替就可以發任何訊息.
不過這辦法有些笨,應該是有API函數實現這個功能的.
---------------------------------------------------------------
用以下函數
function NetSend(dest, Source, Msg: string): Longint;
overload;
type
TNetMessageBufferSendFunction = function(servername, msgname,
fromname: PWideChar;
buf: PWideChar; buflen: Cardinal): Longint;
stdcall;
var
NetMessageBufferSend: TNetMessageBufferSendFunction;
SourceWideChar: PWideChar;
DestWideChar: PWideChar;
MessagetextWideChar: PWideChar;
Handle: THandle;
begin
Handle := LoadLibrary('NETAPI32.DLL');
if Handle = 0 then
begin
Result := GetLastError;
Exit;
end;
@NetMessageBufferSend := GetProcAddress(Handle,
'NetMessageBufferSend');
if @NetMessageBufferSend = nil then
begin
Result := GetLastError;
Exit;
end;
MessagetextWideChar := nil;
SourceWideChar := nil;
DestWideChar := nil;
try
GetMem(MessagetextWideChar, Length(Msg) * SizeOf(WideChar)
+ 1);
GetMem(DestWideChar, 20 * SizeOf(WideChar) + 1);
StringToWideChar(Msg, MessagetextWideChar, Length(Msg) *
SizeOf(WideChar) + 1);
StringToWideChar(Dest, DestWideChar, 20 *
SizeOf(WideChar) + 1);
if Source = '' then
Result := NetMessageBufferSend(nil, DestWideChar,
nil,
MessagetextWideChar, Length(Msg) *
SizeOf(WideChar) + 1)
else
begin
GetMem(SourceWideChar, 20 * SizeOf(WideChar) + 1);
StringToWideChar(Source, SourceWideChar, 20 *
SizeOf(WideChar) + 1);
Result := NetMessageBufferSend(nil, DestWideChar,
SourceWideChar,
MessagetextWideChar, Length(Msg) *
SizeOf(WideChar) + 1);
FreeMem(SourceWideChar);
end;
finally
FreeMem(MessagetextWideChar);
FreeLibrary(Handle);
end;
end;
dest 是目的主機名稱
Source 是源主機名稱可任以設定
Msg 是訊息