How do I get a HWND from inside a DLL?

前端 未结 2 742
我在风中等你
我在风中等你 2021-01-13 10:38

I have a DLL that I want to play sounds using Direct Sound. In order to play sounds, I need the HWND of the executable. I don\'t have a HWND of the executable that loads t

相关标签:
2条回答
  • 2021-01-13 11:38

    You could use GetCurrentProcessId to get the current process Id.

    You could then call EnumWindows, and check each window with GetWindowThreadProcessId to find a window associated with your process.

    However, an easier option might be to just generate your own Window. You can create a 1x1 pixel window that is not visible, and use it with Direct Sound.

    This has the advantage of working even if your calling process doesn't have a usable window (or deletes window handles regularly).

    0 讨论(0)
  • 2021-01-13 11:41

    Call GetGUIThreadInfo on the main thread. This gets you a bunch of HWNDs. If you need a top-level HWND, pick any valid one (not all values may be filled) and find its top level ancestor with GetAncestor(GA_ROOT).

    0 讨论(0)
提交回复
热议问题