我正在使用遠程調用在目標地址空間中注入.NET SpyLib。我需要通過GetWindowThreadProcessId
發送消息到該窗口的線程,該線程創建了該遠程進程。爲什麼GetWindowThreadProcessId有時返回0?
我正在使用Windows 7.不幸的是,它大部分時間都返回0。有時它會給出適當的線程ID(在重新啓動Windows之後)。
爲什麼我會用GetWindowThreadProcessId
得到這個奇怪的行爲?
我正在使用遠程調用在目標地址空間中注入.NET SpyLib。我需要通過GetWindowThreadProcessId
發送消息到該窗口的線程,該線程創建了該遠程進程。爲什麼GetWindowThreadProcessId有時返回0?
我正在使用Windows 7.不幸的是,它大部分時間都返回0。有時它會給出適當的線程ID(在重新啓動Windows之後)。
爲什麼我會用GetWindowThreadProcessId
得到這個奇怪的行爲?
GetWindowThreadProcessId的MSDN文檔有一個社區內容部分,其中DDeBen已經在您提出問題之前兩年已經回答了您的問題。 :)
GetWindowThreadProcessId返回0和變量指向lpdwProcessId 如果句柄hWnd爲無效未修飾的。 GetLastError()返回87(ERROR_INVALID_PARAMETER)。
將來可能會幫助記住,當您遇到不確定的故障狀態時,您需要在Win32 API中使用GetLastError()
。 MSDN通常會給它一個鏈接,但即使它沒有,它也不會傷害檢查出來。 但是,請注意,在託管代碼GetLastError()
需要special treatment,否則您將最終得到虛假結果,最終只會讓您感到困惑。
請參閱本頁上的「社區內容」部分:http://msdn.microsoft.com/en-us/library/ms633522%28v=vs.85%29.aspx。當HWND參數無效時,GetWindowThreadProcessId返回0。另外,在這種情況下,GetLastError()的值是多少? – 2011-04-29 05:02:17
GetLastError()返回1400 =「invlid hWnd」,但agin the oint是如何確定它將是一個invlid hWnd id?因爲它提供了正確的數值。 – Usman 2011-04-29 19:39:40