我有一个DLL,我想使用Direct Sound播放声音。为了播放声音,我需要可执行文件的HWND。我没有加载DLL的可执行文件的HWND。如何在DLL中获取它而不将其从可执行文件中传入?
答案 0 :(得分:5)
您可以使用GetCurrentProcessId获取当前进程ID。
然后,您可以调用EnumWindows,并使用GetWindowThreadProcessId检查每个窗口,以找到与您的流程相关联的窗口。
但是,更简单的选择可能是生成自己的窗口。您可以创建一个不可见的1x1像素窗口,并将其与Direct Sound一起使用。
即使您的调用进程没有可用的窗口(或定期删除窗口句柄),这也有效。
答案 1 :(得分:1)
在主线程上调用GetGUIThreadInfo
。这会让你获得一堆HWND。如果您需要顶级HWND,请选择任何有效的HWND(并非所有值都可以填充)并找到其GetAncestor(GA_ROOT)
的顶级祖先。