如何用delphi实现win 2000下的dos指令:net send (10分)

  • 主题发起人 主题发起人 青云
  • 开始时间 开始时间

青云

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个简单的问题想请教:
我公司的机器都安装的win 2000 professronal, 在局域网内,我用
dos 指令: "net send 对方的ip地址(或机器名) 消息"
就能把消息传给对方。这个功能如何用delphi实现,使用tcp,还是udp。
谁能给出代码。
 
简单地用:
WINEXEC('Net send ...',SW_SHOWHIDE)
 
winexec('net send 192.168.32.5 hello',SW_SHOWNORMAL);
 
我不是这个意思,winexec这条指令固然能实现这个功能(其实最好用ShellExecute这条指令),
但是它们实际上都是调用操作系统自带的功能,
我是想通过自定义ip数据包来实现这个功能,所以其实这个问题是很复杂的。
 
unit SendMsgUnit;
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;
implementation

function 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 := #0;
ToUnicode(Toh,ToName);

for i := 0 to 64 do FromName := #0;
ToUnicode(From,FromName);

for i := 0 to 1000 do WMsgText := #0;
ToUnicode(Msg,WMsgText);

Result:=NetMessageBufferSend(nil,ToName,nil,@WMsgText,MsgLen);
end;

end.
 
其实很简单了
Function NetMessageBufferSend;
external 'netapi32.dll' name 'NetMessageBufferSend';
你到MSDN里查一下这个函数的用法后就可以发现,完全可以实现NET SEND功能
如果还有不清楚,你可以到 www.playicq.com上去下载一个好象叫什么“微雨信使”的]
东西,就是这个API的应用,
 
谢谢您,zw84611朋友,你的代码我试过了,有用,但是只能在win 2000下使用,我用它发信息给win 98
没用,而且发送非常慢,我认为没有什么实用价值,还不如直接用net send指令。
 
后退
顶部