zoukankan      html  css  js  c++  java
  • DLL中获取主程序句柄

    一、问题由来及说明

    在实际编程中遇到一些系统模块(或API)调用初始化需要窗口句柄,在主程序中(MFC或者win32)都可以很容易获得,比如mfc中可以直接调用AfxGetMainWnd()、GetSafeHwnd()获取窗口句柄。但是如果跨DLL调用就很难拿到主程序的窗口句柄,那么如何获取呢?

    二、可用的方法介绍

    1. FindWindow/FindWindowEx函数

    如果知道主调程序的进程名称,可以用FindWindow枚举并查找系统运行的所有窗口函数。

    该函数之所以可以运行,是因为windows下HWND是全局的,在系统中是唯一的。

    有一个缺点,如果主调程序运行多个实例的话,FindWindow基本上是无能为力的,是无法区分那个实例的。

    2. EnumWindows函数

    如果能够获取当前的进程pid(通常调用GetCurrentProcessId函数),可以通过EnumWindows枚举当前系统中所有的窗口函数,然后遍历。调用GetWindowThreadProcessId函数,可以将EnumWindows的回调的HWND转换为进程pid。这样就可以精确定位了。

    当然,也可以使用FindWindow函数。

    3. GetGUIThreadInfo函数

    上面两个方法都是i需要遍历系统中所有窗口的,这个函数可以直接通过线程pid获取主窗口句柄,感兴趣的可以查看下msdn。

    https://msdn.microsoft.com/en-us/library/ms633506(v=vs.85).aspx

     说明下:博客很久没写了。还是比较倾向于解答问题的方式,直观,也认识到自己成长的脚步。所以以后有什么问题都会及时记录与更新。内容可能会很短,只有基本的思路。实际编码可以后续深入探讨下。

    ------------------------

    成长的路,披荆斩棘,无所畏惧。

    本文是由Tocy撰写整理,有问题欢迎评论及邮件。转载请注明原文地址。

  • 相关阅读:
    ACM 一种排序
    ACM Binary String Matching
    ACM 括号配对问题
    ACM BUYING FEED
    ACM 喷水装置(二)
    ACM 会场安排问题
    ACM 推桌子
    ACM 心急的C小加
    ACM 田忌赛马
    ACM 疯牛
  • 原文地址:https://www.cnblogs.com/tocy/p/DLL-Get-Main-HWND.html
Copyright © 2011-2022 走看看