一个网络信息的问题,请大家看看,能帮就帮一把吧 如何实现在局域网中实现一台机器想另一台机器发送信息时,该机器弹出一个对话框,就想winpop? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 试试net send 机器名 hello 用socket、udp。如果只是用代码实现winpop,我给你一段代码 一个向局域网内的机器发送信息的例子: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; function NetSend(Dest, Msg: string): Longint; overload; begin Result := NetSend(Dest, '', Msg); end; function NetSend(Msg: string): Longint; overload; begin Result := NetSend('', '', Msg); end; // Example: procedure TForm1.Button1Click(Sender: TObject); const NERR_BASE = 2100; NERR_NameNotFound = NERR_BASE + 173; NERR_NetworkError = NERR_BASE + 36; NERR_Success = 0; var Res: Longint; sMsg: string; begin Res := NetSend('LoginName', 'Your Message...'); case Res of ERROR_ACCESS_DENIED: sMsg := 'user does not have access to the requested information.'; ERROR_INVALID_PARAMETER: sMsg := 'The specified parameter is invalid.'; ERROR_NOT_SUPPORTED: sMsg := 'This network request is not supported.'; NERR_NameNotFound: sMsg := 'The user name could not be found.'; NERR_NetworkError: sMsg := 'A general failure occurred in the network hardware.'; NERR_Success: sMsg := 'Message sent!'; end; ShowMessage(sMsg); end; kuangning(郎之间),我就是要代码实现winpop,给我吧,谢了 unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type NET_API_STATUS = DWord; TLMWideChar = record Value : PWideChar; Length: DWord; end; TNetMessageBufferSend = function(ServerName, MsgName, FromName: LPCWSTR; Buffer: Pointer; BufferLen: DWord): NET_API_STATUS; stdcall;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.DFM}procedure CvtToWideChar(const S: string; var WS: TLMWideChar);var S1 : string;begin if WS.Value <> nil then FreeMem(WS.Value, WS.Length); S1 := Trim(S); if Length(S1) > 0 then begin WS.Length := (Length(S1) + 1) * 2; GetMem(WS.Value, WS.Length); StringToWideChar(S1, WS.Value, WS.Length); end else begin WS.Length := 0; WS.Value := nil; end;end;const _NetMessageBufferSend : TNetMessageBufferSend = nil;procedure send(servername:String;msgname:String;fromname:String;info:String);var NETAPI32 : THandle ; S, M, F : TLMWideChar; Buffer : TLMWideChar;begin NETAPI32 := LoadLibrary('netapi32.dll') ; if (@_NetMessageBufferSend = nil) then @_NetMessageBufferSend := GetProcAddress(NETAPI32, 'NetMessageBufferSend'); if (@_NetMessageBufferSend <> nil) then begin S.Value := nil; M.Value := nil; F.Value := nil; Buffer.Value := nil ; try CvtToWideChar(info, Buffer); CvtToWideChar(ServerName, S); CvtToWideChar(MsgName, M); CvtToWideChar(FromName, F); _NetMessageBufferSend(S.Value, M.Value, F.Value, Buffer.Value , Buffer.Length ); finally FreeMem(S.Value, S.Length); FreeMem(M.Value, M.Length); FreeMem(F.Value, F.Length); end; end else exit ;end;procedure TForm1.Button1Click(Sender: TObject);var NETAPI32 : THandle ; S, M, F : TLMWideChar; Buffer : TLMWideChar;begin send('192.168.0.106','192.168.0.175','独孤求败','你哀求'); //说明 send(本机地址,目标地址,消息显示的本机名称,消息内容);end;end.以上代码是使用'netapi32.dll'的NetMessageBufferSend函数 kuangning给的代码怎么不行呀,另外问一下您和cg1120,如果要广播发送怎么做? 怎么不行?编译通过了嘛?send('192.168.0.106','192.168.0.175','独孤求败','你哀求');把前面两个改成你的本机IP试验一下 广播?用net send * fsdfsdf可以实现我得代码不能实现广播。用循环怎么样? AdvStringGrid 与左 右 上 下 键 indy idHttp 上传图片文件问题? 高分求助,感觉有点无奈。 我用Session.DeleteAlias('fgh')为什么不能删除BDE别名? 程序动行时如何能自动加载控件到form上? 求GB及BIG5内容的consts.pas及相关文件(共计300分) 如何将页面导出到WORD中??? SQL语句怎么写 各位大侠,有个线程中的问题,特别着急,46分送上!谢谢了 bios问题 关于数据插入问题。。。 请问那位有CRM的相关资料啊
如果只是用代码实现winpop,我给你一段代码
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; function NetSend(Dest, Msg: string): Longint; overload;
begin
Result := NetSend(Dest, '', Msg);
end; function NetSend(Msg: string): Longint; overload;
begin
Result := NetSend('', '', Msg);
end; // Example: procedure TForm1.Button1Click(Sender: TObject);
const
NERR_BASE = 2100;
NERR_NameNotFound = NERR_BASE + 173;
NERR_NetworkError = NERR_BASE + 36;
NERR_Success = 0;
var
Res: Longint;
sMsg: string;
begin
Res := NetSend('LoginName', 'Your Message...');
case Res of
ERROR_ACCESS_DENIED: sMsg := 'user does not have access to the requested information.';
ERROR_INVALID_PARAMETER: sMsg := 'The specified parameter is invalid.';
ERROR_NOT_SUPPORTED: sMsg := 'This network request is not supported.';
NERR_NameNotFound: sMsg := 'The user name could not be found.';
NERR_NetworkError: sMsg := 'A general failure occurred in the network hardware.';
NERR_Success: sMsg := 'Message sent!';
end;
ShowMessage(sMsg);
end;
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
NET_API_STATUS = DWord;
TLMWideChar = record
Value : PWideChar;
Length: DWord;
end;
TNetMessageBufferSend = function(ServerName, MsgName, FromName: LPCWSTR; Buffer: Pointer; BufferLen: DWord): NET_API_STATUS; stdcall;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}
procedure CvtToWideChar(const S: string; var WS: TLMWideChar);
var
S1 : string;
begin if WS.Value <> nil then
FreeMem(WS.Value, WS.Length);
S1 := Trim(S);
if Length(S1) > 0 then begin
WS.Length := (Length(S1) + 1) * 2;
GetMem(WS.Value, WS.Length);
StringToWideChar(S1, WS.Value, WS.Length);
end else begin
WS.Length := 0;
WS.Value := nil;
end;
end;const _NetMessageBufferSend : TNetMessageBufferSend = nil;procedure send(servername:String;msgname:String;fromname:String;info:String);
var
NETAPI32 : THandle ;
S, M, F : TLMWideChar;
Buffer : TLMWideChar;
begin
NETAPI32 := LoadLibrary('netapi32.dll') ;
if (@_NetMessageBufferSend = nil) then
@_NetMessageBufferSend := GetProcAddress(NETAPI32, 'NetMessageBufferSend'); if (@_NetMessageBufferSend <> nil) then begin
S.Value := nil;
M.Value := nil;
F.Value := nil;
Buffer.Value := nil ;
try
CvtToWideChar(info, Buffer);
CvtToWideChar(ServerName, S);
CvtToWideChar(MsgName, M);
CvtToWideChar(FromName, F);
_NetMessageBufferSend(S.Value, M.Value, F.Value, Buffer.Value , Buffer.Length );
finally
FreeMem(S.Value, S.Length);
FreeMem(M.Value, M.Length);
FreeMem(F.Value, F.Length);
end;
end else exit ;end;
procedure TForm1.Button1Click(Sender: TObject);
var
NETAPI32 : THandle ;
S, M, F : TLMWideChar;
Buffer : TLMWideChar;
begin
send('192.168.0.106','192.168.0.175','独孤求败','你哀求');
//说明 send(本机地址,目标地址,消息显示的本机名称,消息内容);end;end.
以上代码是使用'netapi32.dll'的NetMessageBufferSend函数
编译通过了嘛?
send('192.168.0.106','192.168.0.175','独孤求败','你哀求');
把前面两个改成你的本机IP试验一下
用net send * fsdfsdf
可以实现
我得代码不能实现广播。用循环怎么样?