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?
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?
下边那边才是进程句柄
那怎么才能取得Application的handle?
我的一个程序只能运行一个实例,所以我加了下面的代码
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如何取到?
各位有没有什么好的解决办法?