У меня есть программа, которая открывает окно (на самом деле видеоигру) в Windows 8.1. Затем эта программа вызывает «расширение» в форме C ++ .DLL, которое я скомпилировал. В этой DLL мне нужно получить дескриптор окна программы (видеоигры), которая вызывает DLL. Я могу сделать это, используя команду FindWindow в сочетании с именем окна видеоигры. Тем не менее, иногда мне нужно иметь две открытые копии одновременно, с одним и тем же именем окна. Это означает, что использование FindWindow (windowName) не гарантирует выбора окна, которое я на самом деле хочу. Есть ли способ получить дескриптор окна, которое является тем же приложением, которое вызывает код C ++, без указания имени?
Для каждого окна вы получаете от EnumWindow
это соответствует windowName
ты можешь проверить HWND's
обработать и выбрать тот, который принадлежит процессу, в котором вы работаете. Это можно сделать с помощью GetWindowThreadProcessId функция — она даст вам PID процесса, к которому принадлежит окно, и вы можете сравнить его с вашим собственным PID из GetCurrentProcessId.
Вы можете объединить FindWindowEx перечислить все окна с заданным именем (установить hwndParent
в NULL
использовать рабочий стол в качестве родителя и просто передать предыдущий результат в качестве hwndChildAfter
при поиске во второй раз и т. д.) с GetWindowThreadProcessId а также GetCurrentProcessId чтобы узнать, какое из окон принадлежит тому же потоку, из которого вы вызываетесь.
Но опять же — почему бы просто не передать дескриптор окна в dll напрямую?