zoukankan      html  css  js  c++  java
  • dll中获取当前窗口的句柄

    在dll中,我们或多或少的需要获取加载dll的当前窗口的句柄

    下面就有一种方法:

    通过EnumWindows枚举所有窗口在比较传入的当前进程的PID与枚举的进程的线程ID。

    如果相同,这就返回枚举到的句柄,并结束枚举

    GetWindowThreadProcessId哪个线程创建了这个窗口,返回的就是这个线程的id号。

    代码如下

    #include <windows.h>
    
    HWND GetWindowHandle();
    BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);
    
    BOOL WINAPI DllMain(
                        HINSTANCE hinstDLL,  // handle to the DLL module
                        DWORD fdwReason,     // reason for calling function
                        LPVOID lpvReserved   // reserved
                        )
    {
    
        switch(fdwReason)
        {
        case DLL_PROCESS_ATTACH:
            MessageBox(GetWindowHandle(),"HSDH", "DSBUDF", MB_ICONWARNING);
            break;
        default:
            break;
        }
    
        return TRUE;
    }
    
    HWND GetWindowHandle()// 获取创建偶句柄
    {
        DWORD dwCurrentProcessId = GetCurrentProcessId();
    
        if(!EnumWindows(EnumWindowsProc, (LPARAM)&dwCurrentProcessId))
        {
            return (HWND)dwCurrentProcessId;
        }
    
        return NULL;
    }
    
    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;
    }
    

      ddtttttt

  • 相关阅读:
    python中的继承和多态
    python中的深浅copy
    面向对象初识
    常用模块,异常处理
    递归,re,time,random
    内置函数,匿名函数
    生成器和迭代器
    记一次nginx由于文件过大的相关问题
    vue的Element+gin实现文件上传
    Vue问题汇总
  • 原文地址:https://www.cnblogs.com/ruingking/p/13455167.html
Copyright © 2011-2022 走看看