您的位置:首页 > 移动开发

Delphi获得一个进程的主窗体(GetWindow(AHandle, GW_OWNER)等于0的窗体才是主窗体,并且要IsWindowVisible排除Application窗口)

2017-01-24 23:11 519 查看
type
TMainWindow = packed record
ProcessID: THandle;
MainWindow: THandle;
end;
PMainWindow =^ TMainWindow;

[align=left]function IsMainWindow(AHandle: THandle): Boolean;[/align]
[align=left]begin[/align]
[align=left] Result :=(GetWindow(AHandle, GW_OWNER) = 0) and (IsWindowVisible(AHandle));[/align]
[align=left]end;{ IsMainWindow }[/align]
[align=left] [/align]
[align=left]function fFindMainWindow(hWnd: THandle; lParam: PMainWindow): BOOL; stdcall;[/align]
[align=left]var[/align]
[align=left] vProcessID: THandle;[/align]
[align=left]begin[/align]
[align=left] GetWindowThreadProcessId(hWnd, vProcessID);[/align]
[align=left] if (lParam^.ProcessID = vProcessID) and IsMainWindow(hWnd) then[/align]
[align=left] begin[/align]
[align=left] lParam^.MainWindow := hWnd;[/align]
[align=left] Result := False;[/align]
[align=left] end else Result := True;[/align]
[align=left]end;[/align]
[align=left] [/align]
[align=left]function FindMainWindow(AProcessID: THandle): THandle;[/align]
[align=left]var[/align]
[align=left] vMainWindow: TMainWindow;[/align]
[align=left]begin[/align]
[align=left] vMainWindow.ProcessID := AProcessID;[/align]
[align=left] vMainWindow.MainWindow := 0;[/align]
[align=left] EnumWindows(@fFindMainWindow, Integer(@vMainWindow));[/align]
[align=left] Result := vMainWindow.MainWindow;[/align]
[align=left]end;{ FindMainWindow }[/align]
[align=left] [/align]
[align=left]procedure TForm1.Button1Click(Sender: TObject);[/align]
[align=left]begin[/align]
[align=left] Caption := Format('Application.Handle: %d, FindMainWindow(): %d',[[/align]
[align=left] Application.Handle, FindMainWindow(GetCurrentProcessId)]);[/align]
[align=left]end;[/align]
http://blog.csdn.net/zswang/article/details/1598516
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: