Rede - net send (mensagens)

Top  Previous  Next

// fazendo uma rotina estilo NET SEND do DOS

 

function NetSend(const Dest, Source, Msg: string): Longint;

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;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  NetSend('M01''Chuck Norris''M01: estou testando uma api do win2000, se recebeu esta mensagem responda agora!!');

end;