HWND

2 отговора 167 прегледа
#1

HWND

Как може да get-вам HWND на прозорец, на който знам само класа. Лошото е, че може да са отворени много прозорци от един клас - например Folders дето са с клас CabinetWClass май. Искам да взема HWND на всички тези прозорци от еди кой си клас. Може ли да стане това - да имам в масив да речем всички HWND на един клас прозорци, без да знам WindowTitle

Няма толкова проста работа, че да не можеш да я объркаш.
Отговор
в отговор на Executer #2

Re: HWND

vizh:
GetWindow
EnumWindows

Пламен
Отговор
в отговор на Executer #3

Re: HWND

Ако прозорците които те интересуват са top-level можеш да ползваш EnumWindows. В callback функцията която подаваш като първи параметър проверяваш дали класовото име на прозореца е това което те интересува със GetClassName. Ако прозорците не са top-level, тогава в callback функцията на EnumWindows ще трябва да правиш извикване към EnumChildWindows и в нейната callback да проверяваш дали класовото име съвпада. Общо взето решението не е трудно. Остава въпроса, как ще синхронизираш записаните HWND в масива, с реалната обстановка в системата. Можеш да повтаряш горната процедура през определен интервал от време(май-това е едно от най лощите решения). Друг вариант е да инсталираш хоок процедура и да предприемаш определени действия при прихващане WM_CREATE и WM_DESTROY.
Задължително преди да се обърнеш към някое HWND от масива трябва да го провериш за валидност.

Поздрави от Бургас.
Отговор