Mega Code Archive

 
Categories / Delphi / LAN Web TCP
 

Api-function for console command net send

Question: Is there an API-function for the console command NET SEND (from Windows NT) NET SEND {name | * | /DOMAIN[:name] | /USERS} message Answer: NET SEND uses named pipes. The sample program below links to function NetMessageBufferSend in the 'NETAPI32.DLL' library. program Dummy; 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 { NetSend } Handle := LoadLibrary('NETAPI32.DLL'); if Handle=0 then begin Result := GetLastError; Exit; end; { Handle=0 } @NetMessageBufferSend := GetProcAddress(Handle, 'NetMessageBufferSend'); if @NetMessageBufferSend=nil then begin Result := GetLastError; Exit; end; { @NetMessageBufferSend=nil } 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; { not (Source='') } finally FreeMem(MessagetextWideChar); FreeLibrary(Handle); end; { try } end; { NetSend } function NetSend(Dest, Msg: string) : Longint; overload; begin { NetSend } Result := NetSend(Dest, '', Msg); end; { NetSend } function NetSend(Msg: string) : Longint; overload; begin { NetSend } Result := NetSend('', '', Msg); end; { NetSend } begin NetSend('Mike', 'Hello, Mike'); end.