关于给居于网络里面的计算机发送消息的问题? 我想问一个问题,就是如何通过程序控制对局域网内或者广域网中能ping通的计算机发送消息并且可以在另外一台计算机上显示出来。就是利用windows的message服务。相似的例子就是那个信史服务软件的功能。不知道在delphi中如何调用。或者其原来是如何?用那些API函数功能?非常感谢!保证给分数! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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 是消息 以上都是在win2000下的,不知道98里有没有这个东西呀 谢谢: jianzhang() ( ) 非常感谢大家! tcxgrid datetime类型过滤出错 求教:现在最新的DELPHI是什么版本?我一直用DELPHI7有必要换吗? 地址出错问题!!帮帮小弟我啊!! Grid之间的滚动轴拖动事件响应 有关ADO与ORACLE连接的问题,谢谢 我用DELPHI7写的程序在WIN2000下为什么显示不出控件? 如何动态设置ADO访问ACCESS数据库(在线等候) 关于SQL server 2000 的问题 &&&&&&&&&&&源码源码,请进... 上次那位朋友推荐了一个基于freepascal的ide,请再给我说说,我把地址忘了 讨厌的_QSQL***.DBF 如何动态调用控件
这就能广播了
把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 是消息
非常感谢大家!