本帖最后由 xingyu198932 于 2012-12-13 00:07:25 编辑

解决方案 »

  1.   

    红色的是新增加的代码:function FindMainWindow(h: HWND): HWND;
    var
      hParent, hOwner: HWND;
    begin
      hParent := h;
      repeat
        Result := hParent;
        hParent := Windows.GetParent(hParent);
      until hParent = 0;  hOwner := Result;
      repeat
        Result := hOwner;
        hOwner := Windows.GetWindow(hOwner, GW_OWNER)
      until hOwner = 0
    end;
    var
      hwndOldParent,hwndCalc,hwndCalcMain:HWND;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      Windows.SetParent(hwndCalc,hwndOldParent);//恢复计算器的原有宿主
    end;
    procedure TForm1.Button1Click(Sender: TObject);//绑架计算器
    begin
      hwndCalc:=FindWindow(nil,'计算器'); //找计算器窗体
      if hwndCalc=0 then winexec('calc.exe',SW_SHOWNORMAL);//如果未找到就运行计算器
      hwndCalc:=FindWindow(nil,'计算器'); //再找计算器窗体
      hwndCalcMain:=FindMainWindow(hwndCalc);
      if (hwndCalcMain <> 0) and (hwndCalcMain <> hwndCalc) then
        ShowWindow(hwndCalcMain, SW_HIDE);

      hwndOldParent:=GetParent(hwndCalc);//获取它的宿主(待进程结束时恢复它的原有宿主)
      Windows.SetParent(hwndCalc,Handle);//将计算器绑架入自己的窗体
    end;
      

  2.   

    万分感谢 s11ss 朋友的热心帮助,已经解决了!再次感谢!