Как я могу получить HWND из DLL? - PullRequest
5 голосов
/ 22 января 2011

У меня есть DLL, которую я хочу воспроизводить звуки, используя Direct Sound.Для воспроизведения звуков мне нужен HWND исполняемого файла.У меня нет HWND исполняемого файла, который загружает DLL.Как получить это в DLL, не передавая его из исполняемого файла?

Ответы [ 2 ]

5 голосов
/ 22 января 2011

Вы можете использовать GetCurrentProcessId , чтобы получить идентификатор текущего процесса.

Затем вы можете вызвать EnumWindows и проверить каждое окно с помощью GetWindowThreadProcessId , чтобы найти окно, связанное сваш процесс.

Однако более простым вариантом может быть просто создать собственное окно.Вы можете создать невидимое окно размером 1x1 пиксель и использовать его с Direct Sound.

Это дает преимущество в работе, даже если ваш вызывающий процесс не имеет пригодного для использования окна (или регулярно удаляет дескрипторы окон).

1 голос
/ 28 января 2011

Звоните GetGUIThreadInfo в основном потоке.Это дает вам кучу HWND.Если вам нужен HWND верхнего уровня, выберите любой действительный (не все значения могут быть заполнены) и найдите его предка верхнего уровня с GetAncestor(GA_ROOT).

...