程序代码如下:
hwnd := FindWindow(nil, 'xxxxx');
  if hwnd = 0 then exit;
  WndChild := GetLastActivePopup(hwnd);
  if WndChild = 0 then exit;
  if (IsIconic(hwnd)) then
    ShowWindow(hwnd, SW_SHOWMAXIMIZED);
  SetForegroundWindow(WndChild);
  sendmessage(WndChild, WM_COPYDATA, 0, 0);可以把该程序激活,但该程序收不到WM_COPYDATA消息。

解决方案 »

  1.   

    WM_COPYDATA的两个参数看一下msdn
      

  2.   

    你这样写,sendmessage(WndChild, WM_COPYDATA, 0, 0);
    等于什么都没传嘛。
    要定义一个TCopyDataStruct结构变量,再把变量指针传过去,才可以呀。
    参考一个例子,
    procedure TForm1.Button1Click(Sender: TObject);
    var  
      ds: TCopyDataStruct;  
      hd: THandle;
    begin  
      ds.cbData := Length(Edit1.Text) + 1;  
      GetMem(ds.lpData, ds.cbData); //为传递的数据区分配内存 
      StrCopy(ds.lpData, PChar(Edit1.Text)); 
       Hd := FindWindow(nil, 'Form2'); // 获得接受窗口的句柄 
       if Hd <> 0 then  
          SendMessage(Hd, WM_COPYDATA, Handle, Cardinal(@ds)) // 发送WM_COPYDATA消息     
       else    
         ShowMessage('目标窗口没找到!');  
       FreeMem(ds.lpData); //释放资源
    end;