Местный
Регистрация: 01.09.2019
Сообщений: 424
Сказал(а) спасибо: 52
Поблагодарили 481 раз(а) в 147 сообщениях
Вес репутации: 197
|
Вот рабочий пример. Переключает слои циклично.
Тут указан неизменный TSpTBXComboBox2.
На время теста лучше закомментировать это
Код:
If Childs[Saveid] && WinExist("ahk_id " Childs[Saveid]) && DllCall("IsWindowVisible", "Ptr", Childs[Saveid])
Return Childs[Saveid]
так как оно возвращает ранее найденный хэндл.
Станет работать медленнее, но при каждом нажатии будет искать именно TSpTBXComboBox2.
Но в режиме чертения, этот родительский контрол перестраивается, и ComboBox становится 3.
Скрытый текст
PHP код:
#SingleInstance Force #Persistent #NoEnv #UseHook SetBatchLines -1 ListLines Off #KeyHistory 0
#If WinActive("ahk_class TFormMain ahk_exe Bazis_.exe") ^+Up:: Next_Layer(0) ^+Down:: Next_Layer(1) #If
Next_Layer(Next) { hwnd := Control_Child("Next_Layer", "TSpTBXToolbar", "Слои", "TSpTBXComboBox2") SendMessage, 0x147, 0, 0, , ahk_id %hwnd% ; CB_GETCURSEL SelPos := ErrorLevel SelPos := SelPos = 0xffffffff || SelPos < 0 ? 0 : SelPos + 1 SendMessage, 0x146, 0, 0, , ahk_id %hwnd% ; CB_GETCOUNT COUNT := ErrorLevel If Next NewPos := SelPos = COUNT || !SelPos ? 1 : SelPos + 1 Else NewPos := SelPos <= 1 ? COUNT : SelPos - 1 Control, Choose, %NewPos%, , ahk_id %hwnd% }
Control_Child(Saveid, parentclass, parenttext, classNN) { Static Childs := {} If Childs[Saveid] && WinExist("ahk_id " Childs[Saveid]) && DllCall("IsWindowVisible", "Ptr", Childs[Saveid]) Return Childs[Saveid] If !HWND := Control_Find(parentclass, parenttext) Return 0 ControlGet, Child, HWND, , %classNN%, % "ahk_id " HWND If !Child Return 0 Return Childs[Saveid] := Child }
Control_Find(class, text, Win = 0) { Win := "ahk_id" (Win ? Win : WinExist("A")) Loop { ControlGet, HWND, HWND, , %class%%A_Index%, %Win% If !HWND Return 0 If !DllCall("IsWindowVisible", "Ptr", HWND) Continue ControlGetText, GetText, , % "ahk_id " HWND If (GetText != text) Continue Return HWND } Return 0 }
[свернуть]
Последний раз редактировалось sergio1982; 18.01.2022 в 03:11.
|