Что нового

Вернуть ID всех контролов

Viktor1703

AutoIT Гуру
Сообщения
1 535
Репутация
410
Как вернуть ID всех контролов на окне?
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
361
Список всех хэндлов не подойдет?
Если да, то
Код:
_WinAPI_EnumChildWindows

из WinAPIEx.au3
 
Автор
Viktor1703

Viktor1703

AutoIT Гуру
Сообщения
1 535
Репутация
410
Всё, разобрался.

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <WinAPIEx.au3>

$hForm = GUICreate("", 550, 300)
GUICtrlCreateButton("Hello", 20, 20, 80, 20)
GUICtrlCreateButton("Hello", 20, 50, 80, 20)
GUICtrlCreateButton("Hello", 20, 80, 80, 20)
GUISetState()

GetCtrlID($hForm)

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func GetCtrlID($hWnd)
	Local $iCtrlID = _WinAPI_EnumChildWindows($hWnd, 1)
	For $i = 1 To UBound($iCtrlID) - 1
		ControlSetText($hWnd, "", _WinAPI_GetDlgCtrlID($iCtrlID[$i][0]), "Button " & $i)
    Next
EndFunc

Вот только один нюанс, функция GetCtrlID($hWnd) должна стоять после создания окна, если поставить перед всеми контролами, то она ничего не вернёт, можно ли сделать так чтоб функцию можно было поставить в любое место скрипта до While Wend и она возвращала ID?


Добавлено:
Сообщение автоматически объединено:

Сделал

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <WinAPIEx.au3>

$hForm = GUICreate("", 550, 300)
GetCtrlID()
GUICtrlCreateButton("Hello", 20, 20, 80, 20)
GUICtrlCreateButton("Hello", 20, 50, 80, 20)
GUICtrlCreateButton("Hello", 20, 80, 80, 20)
GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func GetCtrlID()
	GUIRegisterMsg(0x000F, "WM_PAINT")
EndFunc	

Func WM_PAINT($hWnd, $iMsg, $wParam, $lParam)
	If WinExists($hWnd) Then
		Local $iCtrlID = _WinAPI_EnumChildWindows($hWnd, 1)
		For $i = 1 To UBound($iCtrlID) - 1
			ControlSetText($hWnd, "", _WinAPI_GetDlgCtrlID($iCtrlID[$i][0]), "Button " & $i)
		Next
	EndIf
	Return 	'GUI_RUNDEFMSG'
EndFunc
 
Верх