在我的應用程序中我有計時器,在TimerProc中我想獲得具有焦點的另一個應用程序的所有窗口(主和子)的句柄。我不知道如何做到這一點,因爲我不明白像GetNextWindow或GetParent和窗口的Z-oder功能,我無法找到任何地方非常詳細的解釋如何這個功能的工作原理(我不明白解釋上msdn)。請你能給我一些建議或代碼塊這樣做嗎?非常感謝您的回答。如何獲取另一個應用程序的所有窗口的句柄
0
A
回答
2
使用GetForegroundWindow()函數 - 它返回用戶當前正在處理的窗口的HWND。 然後有這個處理可以以這樣的方式找回孩子的:
HWND a_hWnd = (HWND)hParent;
HWND a_FirstChild = NULL;
a_FirstChild = ::GetWindow(a_hWnd, GW_CHILD);
if (a_FirstChild != NULL)
{
HWND a_NextChild = NULL;
do
{
a_NextChild = ::GetWindow(a_FirstChild, GW_HWNDNEXT);
if (a_NextChild != NULL)
{
a_FirstChild = a_NextChild;
}
}
while (a_NextChild != NULL);
}
1
GetForeGroundWindow得到當前前臺窗口/對話框
的getParent,直到你得到NULL(即讓你的頂層窗口)**
EnumChildWindows獲得所有相關的窗口
**注意,應用程序可以有不止一個頂層窗口,雖然這是不常見。
代碼:
void Ccpp_testDlg::DoWalk()
{
HWND hCurrent;
HWND hNew;
hCurrent = ::GetForegroundWindow();
hNew = hCurrent;
while (hNew != NULL)
{
hNew = ::GetParent (hCurrent);
if (hNew != NULL)
{
hCurrent = hNew;
}
}
EnumChildWindows (hCurrent, EnumProc, 0);
}
BOOL CALLBACK EnumProc (HWND hwnd,LPARAM lParam)
{
TCHAR szText [MAX_PATH];
GetWindowText (hwnd, szText, sizeof(szText));
// do something with text
return TRUE;
}
相關問題
- 1. 獲取窗口的所有句柄
- 2. 獲取VB.NET中PID進程的所有子窗口的句柄
- 3. 獲取應用程序的窗口句柄
- 4. 從另一個應用程序獲取按鈕句柄
- 5. 獲取窗口句柄
- 6. 如何獲取桌面窗口句柄?
- 7. 獲取另一個應用程序窗口的唯一ID
- 8. 如何獲取Java中所有窗口句柄的列表(使用JNA)?
- 9. 獲取所有窗口句柄和給定進程名稱的相應標籤句柄
- 10. 獲取窗口的句柄在C#
- 11. 獲取PyGI中的窗口句柄
- 12. 獲取主窗口的句柄在WPF
- 13. 獲取的窗口句柄在Java中
- 14. 獲取C#中窗口的句柄#
- 15. 是否可以從窗口句柄中設置另一個應用程序的窗口的最大寬度?
- 16. 獲取調用窗口的窗口句柄
- 17. 在C#.net應用程序中獲取創建窗口句柄的錯誤
- 18. 在另一個應用程序中獲取當前集中控件的句柄
- 19. 獲取頂部窗口句柄(按Z索引排序窗口)
- 20. 無法從另一個應用程序(窗口)獲取文本
- 21. 使用它的類名獲取窗口上所有控件的句柄
- 22. 如何從另一個程序讀取另一個窗口
- 23. 如何獲取WinForm應用程序中最頂層窗體的句柄?
- 24. 從GtkWidget獲取X11窗口句柄
- 25. 獲取C子窗口句柄#
- 26. 如何通過鼠標點擊將另一個應用程序的窗口句柄傳遞給Delphi
- 27. 如何讓另一個應用程序的窗口句柄最小化到系統托盤?
- 28. 如何獲得最小化窗口的窗口句柄
- 29. 從Selenium webdriver的當前窗口獲取窗口句柄(IntPtr)GUID
- 30. 獲取上次激活窗口的窗口句柄
喜感謝的答案,但它返回主窗口或子窗口中的一個?如果它是主窗口,我怎樣才能遍歷所有的子窗口? – sanjuro 2010-07-26 14:55:18
HWND hParent = GetForegroundWindow(); //主窗口 :: GetWindow(a_FirstChild,GW_HWNDNEXT); //循環childs – southerton 2010-07-26 14:59:05
或者,您可以使用EnumChildWindows函數。 – southerton 2010-07-26 15:01:31