有两个程序,我想在A关闭时,发个消息给B程序,B程序中有过程OPENFILE(FILENAME:STRING); 让B自动运行此过程,有什么办法吗?这消息该怎么发呢?

解决方案 »

  1.   

    http://dev.csdn.net/Develop/article/14/14240.shtm类似,
    1, 得到窗口
    2, 发送消息
      

  2.   

    也就是说B程序不用做任何改动,A程序用WMCOPYDATA发消息即可?关键是把文件路径作为消息发给B,B会怎么处理这个消息呢?
      

  3.   

    不好意思,题目没说清:
    有两个程序,我想在A关闭时,发个消息给B程序,B程序中有MainMenu1的过程procedure TMainForm.N19Click(Sender: TObject); 让B自动运行此过程,有什么办法吗?这消息该怎么发呢?
      

  4.   

    自定义消息:const WM_OPENFILE = WM_USER + 10;
    在B中定义消息处理函数:
    procedure OnOpenFile(var Message: TMessage); message WM_OPENFILE;
    在函数体中:
    procedure TForm1.OnOpenFile(var Message: TMessage);
    begin
      if Message.msg = WM_COPYFILE then
      //Write your code here!
    end;
    然后在A中发送消息, 假如B的窗口句柄是HandleB;
    SendMessage(HandleB, WM_OPENFILE, 0, 0);
      

  5.   

    我用sendmessage实现了,但有个问题,sendmessage是要返回值的,这样b的过程处理不完a不能关闭,这怎么办呢?
      

  6.   

    呵呵,PostMessage即可,将消息发往消息队列后,立即返回。
      

  7.   

    发送消息
    var
      Form1: TForm1;
      UniqueMsgID: Cardinal;
    implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      UniqueMsgID := RegisterWindowMessage('wo');
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      sendMessage(HWND_BROADCAST, UniqueMsgID, 0, 0);
    end;
    接收消息
    var
      Form1: TForm1;
      UniqueMsgID: Cardinal;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      UniqueMsgID := RegisterWindowMessage('wo');
    end;procedure TForm1.WndProc(var Msg: TMessage);
    begin
      if Msg.Msg = UniqueMsgID then
      begin
        sleep(2000);
        Caption := '嘿嘿!收到啦!';
        sleep(2000);
      end;
      inherited WndProc(Msg);
    end;上面代码中的sendmessage改成postmessage不行,接收程序收不到消息
      

  8.   

    回复人: jojoxyz(黄金的心) 的办法应该可以;但是B窗口必须是顶级窗口;才可以收到这个消息;否则的话只可以通过,主窗口来中转一次消息;postmessage也应该可以才对,搞不懂了):
      

  9.   

    我上面的代码,sendmessage可以,postmessage的话b程序收不到消息。其实主要的问题是在a关闭时发完消息能不能马上关闭?不等b程序收到消息再返回
      

  10.   

    用socket?难道这种发消息的模式没办法吗?