在DLL中獲取主進程窗口句柄


注入到進程之后需要宿主進程的句柄來完成某些動作; 可以采用下列方法來獲取宿主進程窗口句柄

 

 1 BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) 
 2 { 
 3     DWORD dwCurProcessId = *((DWORD*)lParam); 
 4     DWORD dwProcessId = 0; 
 5  
 6     GetWindowThreadProcessId(hwnd, &dwProcessId); 
 7     if(dwProcessId == dwCurProcessId && GetParent(hwnd) == NULL)
 8     { 
 9         *((HWND *)lParam) = hwnd;
10         return FALSE; 
11     } 
12     return TRUE; 
13 } 
14  
15  
16 HWND GetMainWindow() 
17 { 
18     DWORD dwCurrentProcessId = GetCurrentProcessId();
19     if(!EnumWindows(EnumWindowsProc, (LPARAM)&dwCurrentProcessId)) 
20     {     
21         return (HWND)dwCurrentProcessId; 
22     } 
23     return NULL; 
24 } 
25  
26 BOOLEAN WINAPI DllMain(
27         IN HINSTANCE hDllHandle, 
28         IN DWORD     nReason,    
29         IN LPVOID    Reserved)
30 {
31     BOOLEAN bSuccess = TRUE;
32  
33     switch ( nReason )
34     {
35     case DLL_PROCESS_ATTACH:
36         MessageBox(GetMainWindow(), TEXT("OMG~ You are Attacked!"), TEXT("Warning"), MB_ICONWARNING);
37         break;
38  
39     case DLL_PROCESS_DETACH:
40         break;
41     }
42  
43     return bSuccess;
44 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM