如何实现在局域网中实现一台机器想另一台机器发送信息时,该机器弹出一个对话框,就想winpop?

解决方案 »

  1.   

    试试net send 机器名 hello
      

  2.   

    用socket、udp。
    如果只是用代码实现winpop,我给你一段代码
      

  3.   

    一个向局域网内的机器发送信息的例子:
    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; 
      

  4.   

    kuangning(郎之间),我就是要代码实现winpop,给我吧,谢了
      

  5.   

    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函数
      

  6.   

    kuangning给的代码怎么不行呀,另外问一下您和cg1120,如果要广播发送怎么做?
      

  7.   

    怎么不行?
    编译通过了嘛?
    send('192.168.0.106','192.168.0.175','独孤求败','你哀求');
    把前面两个改成你的本机IP试验一下
      

  8.   

    广播?
    用net send * fsdfsdf
    可以实现
    我得代码不能实现广播。用循环怎么样?