Win32 - Можно ли перечислить окна, принадлежащие вызывающему потоку? - PullRequest
2 голосов
/ 28 декабря 2010

Из MSDN на GetActiveWindow «Получает дескриптор окна к активному окну, прикрепленному к очереди сообщений вызывающего потока.»

Я пишу плагины SketchUp, используя его Ruby API. В настоящее время пытаюсь внести некоторые изменения в некоторые окна через Win32. Из Ruby API у меня очень ограниченная информация об окне и потоке SU. GetActiveWindow работает нормально до тех пор, пока окно SketchUp имеет фокус, но не работает в противном случае.

Таким образом, я ищу безопасный способ удержания ручки в окне SketchUp независимо от того, имеет ли он фокус или нет.

Видя, как GetActiveWindow может получить активное окно для вызывающего процесса, мне стало интересно, можно ли вместо этого перечислить окна, принадлежащие вызывающему процессу. Затем я могу просмотреть результаты и найти свое окно.

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

Есть идеи?

1 Ответ

2 голосов
/ 28 декабря 2010

Вы можете использовать EnumWindows , чтобы найти все окна верхнего уровня.В Ruby win32-api поддерживает передачу соответствующих обратных вызовов.

Редактировать: затем вы можете использовать GetWindowThreadProcessId , чтобы определить, какому процессу принадлежит каждое окно.

Редактировать: чтобы определить идентификатор процесса, выполняющего ваш скрипт, используйте GetCurrentProcessId .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...