Что нового

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

Viktor1703

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

WSWR

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

из WinAPIEx.au3
 
Автор
V

Viktor1703

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

Код:
#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
 
Верх