16,748
社区成员
发帖
与我相关
我的任务
分享
function GetHWndByPID(const hPID: THandle): THandle;
type
PEnumInfo = ^TEnumInfo;
TEnumInfo = record
ProcessID: DWORD;
HWND: THandle;
end;
function EnumWindowsProc(Wnd: DWORD; var EI: TEnumInfo): Bool; stdcall;
var
PID: DWORD;
begin
GetWindowThreadProcessID(Wnd, @PID);
Result := (PID <> EI.ProcessID) or
(not IsWindowVisible(WND)) or
(not IsWindowEnabled(WND));
if not Result then EI.HWND := WND;
end;
function FindMainWindow(PID: DWORD): DWORD;
var
EI: TEnumInfo;
begin
EI.ProcessID := PID;
EI.HWND := 0;
EnumWindows(@EnumWindowsProc, Integer(@EI));
Result := EI.HWND;
end;
begin
if hPID<>0 then
Result:=FindMainWindow(hPID)
else
Result:=0;
end;
function FindMainWindow(AProcessID: DWORD): THandle;
var
test_a:boolean;
function IsMainWindow(AHandle: HWND): BOOL;
begin
Result :=(GetWindow(AHandle, GW_OWNER) = 0) and (IsWindowVisible(AHandle));
end;
function fFindMainWindow(tmphWnd: DWORD; lParam: integer=0): BOOL; stdcall;
var
vProcessID: DWORD;
begin
GetWindowThreadProcessId(tmphWnd, addr(vProcessID));
//and IsMainWindow(hWnd)
if (fun_var_pid = vProcessID) then
begin
fun_var_hwd := tmphWnd;
Result := false;
end else Result := True;
end;
begin
fun_var_pid:= AProcessID;
fun_var_hwd:= 0 ;
test_a:=EnumWindows(addr(fFindMainWindow),0);
Result := fun_var_hwd;
end;
老兄,怎么修改解决的能发一下嘛? 谢谢!