在我的應用程序中我有計時器,在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. 從另一個應用程序窗口獲取專注控制的句柄
- 3. 獲取SDL 2應用程序的窗口句柄
- 4. 獲取應用程序的窗口句柄
- 5. 獲取VB.NET中PID進程的所有子窗口的句柄
- 6. 如何獲取當前C程序的父窗口的句柄?
- 7. 從另一個應用程序獲取按鈕句柄
- 8. 獲取窗口句柄
- 9. 如何獲取桌面窗口句柄?
- 10. 獲取另一個應用程序窗口的唯一ID
- 11. ANSI C&WinAPI:如何從鉤子程序獲取窗口句柄?
- 12. 如何獲取Java中所有窗口句柄的列表(使用JNA)?
- 13. 獲取所有窗口句柄和給定進程名稱的相應標籤句柄
- 14. 獲取C#中窗口的句柄#
- 15. 獲取PyGI中的窗口句柄
- 16. 獲取窗口的句柄在C#
- 17. 獲取主窗口的句柄在WPF
- 18. 獲取的窗口句柄在Java中
- 19. 是否可以從窗口句柄中設置另一個應用程序的窗口的最大寬度?
- 20. 使用窗口句柄獲取IUKOWN
- 21. 通過C++獲取外部運行程序的窗口句柄
- 22. 如何獲取進程的主窗口(而不是窗口句柄)?
- 23. 如何獲得NSIS中Java Swing應用程序的窗口句柄?
- 24. 獲取調用窗口的窗口句柄
- 25. 在C#.net應用程序中獲取創建窗口句柄的錯誤
- 26. 在另一個應用程序中獲取當前集中控件的句柄
- 27. 獲取頂部窗口句柄(按Z索引排序窗口)
- 28. 如何獲取java中所有窗口元素的類/標題/句柄
- 29. 如何使用子窗口中的句柄獲取父窗口的resize事件?
- 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