procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(inttostr(Application.Handle));
end;procedure TForm1.Button2Click(Sender: TObject);
var
  processID,pid:Cardinal;  //进程句柄
begin
   GetWindowThreadProcessId(Self.Handle,@pid);    //取主窗体进程ID
   ProcessID := OpenProcess(PROCESS_VM_READ, false, pid); // 取主窗体进程句柄
   ShowMessage(IntToStr(ProcessID));
end;如题,为什么两种方式取到的handle值不一样?
如何根据主窗体handle取进程handle?

解决方案 »

  1.   

    Application 其实是一个窗口,
    下边那边才是进程句柄
      

  2.   

    Application 其实是一个窗口?
    那怎么才能取得Application的handle?
      

  3.   

    算了..还是直接一点吧..
    我的一个程序只能运行一个实例,所以我加了下面的代码
       if OpenMutex(MUTEX_ALL_ACCESS, False, 'hello')<>0 then
       begin
          ShowWindow(hand,SW_NORMAL);
          SetForegroundWindow(hand);  
          Exit;
       end;
    功能是实现了,但是问题是:SetForegroundWindow后主窗体点最小化按钮没反应了..
    网上查了下在SetForegroundWindow之前加入以下代码可以实现:
       if IsIconic(ProcessID) then
        DefWindowProc(ProcessID, WM_SYSCOMMAND, SC_RESTORE, 0);
    问题是:ProcessID如何取到?
    各位有没有什么好的解决办法?
      

  4.   

    http://topic.csdn.net/u/20090731/09/655c0af2-816a-43f2-92cf-3f5991eca5b7.html