如何獲得應用程序的HWND,如果我知道進程ID?任何人都可以發佈樣品嗎?我正在使用MSV C++ 2010. 我找到了Process :: MainWindowHandle,但我不知道如何使用它。通過進程ID獲取hwnd C++
7
A
回答
16
HWND g_HWND=NULL;
BOOL CALLBACK EnumWindowsProcMy(HWND hwnd,LPARAM lParam)
{
DWORD lpdwProcessId;
GetWindowThreadProcessId(hwnd,&lpdwProcessId);
if(lpdwProcessId==lParam)
{
g_HWND=hwnd;
return FALSE;
}
return TRUE;
}
EnumWindows(EnumWindowsProcMy,m_ProcessId);
3
您可以使用EnumWindows的和GetWindowThreadProcessId()函數在本MSDN article提及。
0
單個PID(進程ID)可以與多個窗口(HWND)相關聯。例如,如果應用程序使用多個窗口。
以下代碼將查找給定PID中所有窗口的句柄。
void GetAllWindowsFromProcessID(DWORD dwProcessID, std::vector <HWND> &vhWnds)
{
// find all hWnds (vhWnds) associated with a process id (dwProcessID)
HWND hCurWnd = NULL;
do
{
hCurWnd = FindWindowEx(NULL, hCurWnd, NULL, NULL);
DWORD dwProcessID = 0;
GetWindowThreadProcessId(hCurWnd, &dwProcessID);
if (dwProcessID == dwProcessID)
{
vhWnds.push_back(hCurWnd); // add the found hCurWnd to the vector
wprintf(L"Found hWnd %d\n", hCurWnd);
}
}
while (hCurWnd != NULL);
}
相關問題
- 1. 如何通過編程方式從進程HWND獲取句柄ID?
- 2. 通過名稱獲取進程ID
- 3. 從hWnd獲取(資源)ID
- 4. 通過Perl腳本獲取進程ID
- 5. 通過進程Id獲取進程對象
- 6. 如何獲取通過execvp啓動的進程的進程ID()
- 7. 如何在linux中通過進程名獲取進程ID
- 8. 如何使用託管VB.net代碼從HWND獲取進程ID?
- 9. 如何通過HWND獲取窗口類?
- 10. 啓動Win32進程A啓動進程B - 獲取B的ID/HWND
- 11. 獲取的hWnd從當前進程
- 12. 如何通過進程ID獲取進程的stdin?
- 13. 如何通過在Linux中使用C/C++提供進程ID來獲取父進程ID?
- 14. 通過點擊應用程序窗口獲取進程ID
- 15. C++ WPF通過HWND和HINSTANCE的C++/CLI
- 16. 獲取XML元素通過ID在C#
- 17. 通過命令行獲取新創建的進程ID
- 18. 通過窗口句柄獲取父進程ID
- 19. C++如何獲取父進程ID
- 20. 通過Id獲取元素
- 21. Linux命令通過名稱獲取Tomcat進程ID
- 22. 如何通過Excel中的對象獲取進程ID#
- 23. 通過進程ID獲取JVM的內存細節
- 24. C++ mfc:通過控制箱更新HWND
- 25. 通過GET獲取div id通過Javascript
- 26. 獲取進程ID或進程名通過蒸汽推出蒸汽賽後:// rungameid /#
- 27. C程序從父母id(minix)獲取子進程ID
- 28. 通過ID獲取div值
- 29. 通過id()獲取對象?
- 30. 獲取PowerShell進程的進程ID
的方法並不限定於1個窗口。 – chris 2012-07-29 17:37:11
一個進程可以有幾個窗口,這有幾個hwnds。 – 2012-07-29 17:37:18
因此,馬比是否有可能獲得所有HWND並選擇這些,這個進程ID有什麼? – Luke 2012-07-29 17:41:36