首页  编辑  

实现Net send命令?

Tags: /超级猛料/Network.网络通讯/LAN/   Date Created:

implement net send?

主要是要向局域网内的机器发送信息。

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;