写了段根据程序名称获取窗口句柄的程序,单次运行正常。多次运行就有问题了。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 TUpdateFrm.FindMainWindow(PID: DWORD): DWORD;
var
EI: TEnumInfo;
begin
EI.ProcessID := PID; EI.HWND := 0; EnumWindows(@EnumWindowsProc, Integer(@EI)); Result := EI.HWND;
end;//跟据ProcessId获取进程的窗口句柄
function TUpdateFrm.GetHWndByPID(const hPID: THandle): THandle;
begin
if hPID <> 0 then
Result := FindMainWindow(hPID)
else
Result := 0;
end;
GetHWndByPID为根据进程ID号获取窗口句柄的函数。
现在我需要依次检查进程中是否有A.exe,B.exe两个个程序。加入A.exe进程中存在,那么B的检测正常加入A.exe进程中不存在,那么B的检测就不正常了。如何解决。
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 TUpdateFrm.FindMainWindow(PID: DWORD): DWORD;
var
EI: TEnumInfo;
begin
EI.ProcessID := PID; EI.HWND := 0; EnumWindows(@EnumWindowsProc, Integer(@EI)); Result := EI.HWND;
end;//跟据ProcessId获取进程的窗口句柄
function TUpdateFrm.GetHWndByPID(const hPID: THandle): THandle;
begin
if hPID <> 0 then
Result := FindMainWindow(hPID)
else
Result := 0;
end;
GetHWndByPID为根据进程ID号获取窗口句柄的函数。
现在我需要依次检查进程中是否有A.exe,B.exe两个个程序。加入A.exe进程中存在,那么B的检测正常加入A.exe进程中不存在,那么B的检测就不正常了。如何解决。
现在是这样的,我需要通过A,B程序的名称,判断两个程序是否已经打开,并获取其窗口句柄。
楼上的,会的话 请告知下。
谢谢!