怎么从线程中创建对话框中获得主线程的窗口句柄

来源:百度知道 编辑:UC知道 时间:2024/06/17 06:02:51
我是用的键盘钩子注入dll,dll中有一个对话框资源,是在dll注入成功后在一个新线程中创建的一个非模态对话框.
那么怎么在这个非模态对话框中获得其父窗口的HAND;
举个例子:
我把dll注入到NotePad.exe(记事本)中,然后在再按F10,在键盘过程中就会创建一个线程,在这个线程中创建一个非模态对话框.我就想在这个对话框中获得记事本的窗口句柄HWND.
用FindWindow,和EnumWindow不是我的初衷.
有没有其它方法.

貌似没有直接的办法。
你的问题也有点前后矛盾。
窗口句柄、进程句柄、主线程句柄是不同出概念。

但这些都可以通过枚举获得。如果是主线程句柄,你可以枚举系统中的进程,找到你所需要的进程句柄,然后通过进程句柄获得主线程句柄。
如果是窗口,可以通过枚举系统中所有的窗口,逐个比较,得到你所需要的窗口句柄。当然如果窗口特征很明显,还可以用FindWindow省去逐个枚举的麻烦。

在DllMain里可以记录进程或者线程的ID(GetCurrentProcessID),然后再枚举窗口(EnumWindows),找到相应的窗口。

窗口句柄、进程句柄、主线程句柄是不同出概念。
但这些都可以通过枚举获得。如果是主线程句柄,你可以枚举系统中的进程,找到你所需要的进程句柄,然后通过进程句柄获得主线程句柄。
如果是窗口,可以通过枚举系统中所有的窗口,逐个比较,得到你所需要的窗口句柄。当然如果窗口特征很明显,还可以用FindWindow省去逐个枚举的麻烦