在DLL中获取主进程窗口句柄

原文地址:http://www.programlife.net/get-main-window-handler-in-dll.html

有的时候难免需要在DLL中获取主进程的窗口句柄,比如在DLL注入的时候等等。那么如何在DLL中获取主进程的窗口句柄呢?可以通过EnumWindows来实现。先通过GetCurrentProcessId获取进程的PID,然后在EnumWindows中调用GetWindowThreadProcessId获得与窗口句柄关联的进程PID,然后对比PID,看是否相等,并判断是不是主窗口即可。
以上方法参考自网络,不一定很完善,但是通常情况下已经够用了。附上测试代码:

// Author: 代码疯子
// Blog: http://www.programlife.net/
#include <windows.h>
 
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
    DWORD dwCurProcessId = *((DWORD*)lParam);
    DWORD dwProcessId = 0;
 
    GetWindowThreadProcessId(hwnd, &dwProcessId);
    if(dwProcessId == dwCurProcessId && GetParent(hwnd) == NULL)
    {
        *((HWND *)lParam) = hwnd;
        return FALSE;
    }
    return TRUE;
}
 
 
HWND GetMainWindow()
{
    DWORD dwCurrentProcessId = GetCurrentProcessId();
    if(!EnumWindows(EnumWindowsProc, (LPARAM)&dwCurrentProcessId))
    {     
        return (HWND)dwCurrentProcessId;
    }
    return NULL;
}
 
BOOLEAN WINAPI DllMain(
        IN HINSTANCE hDllHandle,
        IN DWORD     nReason,    
        IN LPVOID    Reserved)
{
    BOOLEAN bSuccess = TRUE;
 
    switch ( nReason )
    {
    case DLL_PROCESS_ATTACH:
        MessageBox(GetMainWindow(), TEXT("OMG~ You are Attacked!"), TEXT("Warning"), MB_ICONWARNING);
        break;
 
    case DLL_PROCESS_DETACH:
        break;
    }
 
    return bSuccess;
}


效果截图:

DLL注入


本文地址: 程序人生 >> 在DLL中获取主进程窗口句柄
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值