我有一个DLL,想要使用Direct Sound播放声音。为了播放声音,我需要可执行文件的HWND。但是我没有加载DLL的可执行文件的HWND。在不从可执行文件中传递HWND的情况下,我该如何在DLL中获取它?
您可以使用GetCurrentProcessId获取当前进程ID。
然后,您可以调用EnumWindows,并使用GetWindowThreadProcessId检查每个窗口,以查找与您的进程相关联的窗口。
但是,更简单的选项可能是生成自己的窗口。您可以创建一个不可见的1x1像素窗口,并将其与Direct Sound一起使用。
这样做的优点是,即使您的调用进程没有可用的窗口(或定期删除窗口句柄),它也可以工作。
GetGUIThreadInfo
。这将为您提供一堆HWNDs。如果您需要一个顶级HWND,请选择任何有效的HWND(不是所有值都可能被填充),并使用GetAncestor(GA_ROOT)
找到其顶级祖先。