各位大虾,如何用程序实现Win2000 Server的局域网互发消息功能,即net send 计算机名 ....,麻烦给出源码,拜谢!
解决方案 »
- AutoUpgrader组件自动更新问题???
- 难道真的没有人帮我写一下这个东西吗?
- 新手交流:TDBGrid原生对多表头的支持,可以任意扩展,收缩多层表头到单层或部分单层,不要误会DBGrid不支持多表头
- 请教一个窗口一直保持最前的问题
- wince移动设备路径问题
- 在线给分FastReport2.4
- 怎样根据一组数据在tchart中画出一条相应的正弦曲线??谢谢
- 一个关于字符发生器串口通讯的问题?
- 如何使用DELPHI开发一个没有窗体的WIN程序,详情见内???
- 如何让TREEVIEW控件中的某几个节点不能选中?
- 晕,为什么我的报表只有一条记录呀?
- 一个简单的问题不知道错误出在哪里?请高手指点,谢谢诸位!!!
你搜索一下 NetMessageBufferSend 这个函数另外 xp sp2已经把messenger服务改为默认关闭了。
interface
uses SysUtils, Classes;function ToUnicode(str:string;dest:PWideChar):integer;
function SendMsg(Toh,From,Msg:string):integer;
function NetMessageBufferSend(servername:PWideChar;
MsgName:PWideChar;
FromName:PWideChar;
Buf: PWideChar;
var BufLen:integer):integer;cdecl;
implementationfunction ToUnicode(str:string;dest:PWideChar):integer;
var
len:integer;
begin
//len:=0;
StringToWideChar(str,dest,len);
Result:=len;
end;
function NetMessageBufferSend; external 'netapi32.dll' name 'NetMessageBufferSend';function SendMsg(Toh,From,Msg:string):integer;
var
ToName :array [0..64] of WideChar;
FromName :array [0..64] of WideChar;
WMsgText:array [0..1000] of WideChar;
MsgLen, i:integer;
begin
for i := 0 to 64 do ToName[i] := #0;
ToUnicode(Toh,ToName); for i := 0 to 64 do FromName[i] := #0;
ToUnicode(From,FromName); for i := 0 to 1000 do WMsgText[i] := #0;
ToUnicode(Msg,WMsgText); Result:=NetMessageBufferSend(nil,ToName,nil,@WMsgText,MsgLen);
end;end.
uses
Windows;
Function NetSendMsg(Dest, Msg: string):string;
implementation
function NetSend(dest, Source, Msg: string): Longint; overload;typeTNetMessageBufferSendFunction = function(servername, msgname, fromname: PWideChar;buf: PWideChar; buflen: Cardinal): Longint;stdcall;varNetMessageBufferSend: TNetMessageBufferSendFunction;SourceWideChar: PWideChar;DestWideChar: PWideChar;MessagetextWideChar: PWideChar;Handle: THandle;beginHandle := LoadLibrary('NETAPI32.DLL');if Handle = 0 thenbeginResult := GetLastError;Exit;end;@NetMessageBufferSend := GetProcAddress(Handle, 'NetMessageBufferSend');if @NetMessageBufferSend = nil thenbeginResult := GetLastError;Exit;end;MessagetextWideChar := nil;SourceWideChar := nil;DestWideChar := nil;tryGetMem(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 = '' thenResult := NetMessageBufferSend(nil, DestWideChar, nil,MessagetextWideChar, Length(Msg) * SizeOf(WideChar) + 1)elsebeginGetMem(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;finallyFreeMem(MessagetextWideChar);FreeLibrary(Handle);end;end;function NetSend(Dest, Msg: string): Longint; overload;beginResult := NetSend(Dest, '', Msg);end;function NetSend(Msg: string): Longint; overload;beginResult := NetSend('', '', Msg);end;
Function NetSendMsg(Dest, Msg: string):string;
constNERR_BASE = 2100;NERR_NameNotFound = NERR_BASE + 173;NERR_NetworkError = NERR_BASE + 36;NERR_Success = 0;varRes: Longint;sMsg: string;beginRes := NetSend(Dest,'', Msg);case Res ofERROR_ACCESS_DENIED: Result := 'user does not have access to the requested information.';ERROR_INVALID_PARAMETER: Result := 'The specified parameter is invalid.';ERROR_NOT_SUPPORTED: Result := 'This network request is not supported.';NERR_NameNotFound: Result := 'The user name could not be found.';NERR_NetworkError: Result := 'A general failure occurred in the network hardware.';NERR_Success: Result := 'Message sent!';end;end;end.
调用:
procedure TForm1.Button1Click(Sender: TObject);
begin
NetSendMsg(ip.Text,memo1.Text);
end;
txts:String;
begin
txts:='net.exe send '+iplist.Text+' '+txt.Text;
winexec(PChar(txts),sw_hide);
ShowMessage('信息发送成功!');
end;