我做了一个用消息机制在两个应用程序间传递变量,当程序一第一次打开程序二的时候可通过消息传递变量,但关闭程序二,再次通过程序一打开的时候变量就传递不过去。必须关闭程序一后重新打开程序一,并访问程序二才能传递过变量。
请各位老大帮忙分析一下问题出在什么地方?应如何改正。谢谢

解决方案 »

  1.   

    关键之处是你怎么取得对方程序目标窗口的Handle。你可以试着在每次传递之前都使用FindWindow来去的目标窗口的Handle
      

  2.   

    这个函数确实写的取数的函数
    procedure Tfrm_main.sendstr(var str:string);
    var
     HWndProc : HWnd;
     ds: TCopyDataStruct;  // WM_COPYDATA所需要的结构
    begin
      //showmessage(str);
     HWndProc :=0;
     HWndProc := Winprocs.FindWindow(nil, 'kjbb');
      if HWndProc <> 0 then
      begin
        if ZcBbWindowHandle = 0 then
        begin
            SendMessage(HWND_BROADCAST,ZcBbMessage,handle,0);  // 进行广播
                // 已经连接到用户程序
            application.ProcessMessages;
         end;
         ds.cbData := Length (str) + 1;
         GetMem (ds.lpData, ds.cbData ); //为传递的数据区分配内存
         StrCopy (ds.lpData, PChar (str));
         SendMessage(ZcBbWindowHandle,WM_COPYDATA,handle,Cardinal(@ds));  // 已经连接过,直接发消息
         freemem(ds.lpdata);
         BringWindowToTop(HWndProc);
      end;
    end;
    这个函数确实是每次传之前都调用的阿?
      

  3.   

    我觉得SendMessage(ZcBbWindowHandle,WM_COPYDATA,handle,Cardinal(@ds));中的ZcBbWindowHandle应该换成HWndProc吧