如何从DLL中获取HWND?

时间:2011-01-22 02:05:25

标签: windows winapi dll hwnd directsound

我有一个DLL,我想使用Direct Sound播放声音。为了播放声音,我需要可执行文件的HWND。我没有加载DLL的可执行文件的HWND。如何在DLL中获取它而不将其从可执行文件中传入?

2 个答案:

答案 0 :(得分:5)

您可以使用GetCurrentProcessId获取当前进程ID。

然后,您可以调用EnumWindows,并使用GetWindowThreadProcessId检查每个窗口,以找到与您的流程相关联的窗口。

但是,更简单的选择可能是生成自己的窗口。您可以创建一个不可见的1x1像素窗口,并将其与Direct Sound一起使用。

即使您的调用进程没有可用的窗口(或定期删除窗口句柄),这也有效。

答案 1 :(得分:1)

在主线程上调用GetGUIThreadInfo。这会让你获得一堆HWND。如果您需要顶级HWND,请选择任何有效的HWND(并非所有值都可以填充)并找到其GetAncestor(GA_ROOT)的顶级祖先。