И еще, что для контролов будет неизменным (конкретно -поле для ввода) при каждом запуске приложения?
ID и Handle - меняется


Код: Выделить всё
#Include
#Include
$arr = _WinAPI_EnumWindowsEx(WinGetHandle(""))
_ArrayDisplay($arr)
Func _WinAPI_EnumWindowsEx($hWin, $fVisible = False)
If Not(IsHWnd($hWin)) Then Return SetError(1)
_WinAPI_EnumWindowsInit()
_WinAPI_EnumWindowsChild($hWin, $fVisible)
Local $aOUT[UBound($winapi_gaWinList)][4] = [["HWnd", "Class", "Control ID", "Control Text"]]
For $i=1 To $winapi_gaWinList[0][0]
$aOUT[$i][0] = $winapi_gaWinList[$i][0]
$aOUT[$i][1] = $winapi_gaWinList[$i][1]
$aOUT[$i][2] = Number(_WinAPI_GetDlgCtrlID($aOUT[$i][0]))
$aOUT[$i][3] = ControlGetText($hWin,"","[ID:"& $aOUT[$i][2] &"]")
Next
Return $aOUT
EndFunc ;==>_WinAPI_EnumWindowsEx
Код: Выделить всё
#include
#include
_EnumWindowsChildClass(WinGetHandle(""), "Scintilla")
_ArrayDisplay($a_EnumWindows)
Func _EnumWindowsChildClass($hWnd, $sClassName = "")
Global $a_EnumWindows[1][5] = [["Class","NN","hWnd","ID","Text"]]
Local $hCallBack = DLLCallbackRegister("__EnumWindowsChildClassProc", "int", "hwnd;lparam")
Local $tClassName = DllStructCreate("hwnd hWndMain;char ClassName[255]")
Local $pClassName = DllStructGetPtr ($tClassName)
Local $pCallBack = DllCallbackGetPtr($hCallBack)
DllStructSetData($tClassName, "hWndMain", $hWnd)
DllStructSetData($tClassName, "ClassName", $sClassName)
DllCall("user32.dll", "int", "EnumChildWindows", "hwnd", $hWnd, "ptr", $pCallBack, "lparam", $pClassName)
DllCallbackFree($hCallBack)
EndFunc
Func __EnumWindowsChildClassProc($hWnd, $lParam)
Local $tClassName = DllStructCreate("hwnd hWndMain;char ClassName[255]", $lParam)
Local $sClassName = DllStructGetData($tClassName, "ClassName")
Local $hWndMain = DllStructGetData($tClassName, "hWndMain")
Local $iUB = UBound($a_EnumWindows, 1), $iNN = 1
If _WinAPI_IsClassName($hWnd, $sClassName) Then
ReDim $a_EnumWindows[$iUB+1][5]
$a_EnumWindows[$iUB][0] = _WinAPI_GetClassName($hWnd)
If $iUB>1 And $a_EnumWindows[$iUB][0]=$a_EnumWindows[$iUB-1][0] Then $iNN=$a_EnumWindows[$iUB-1][1]+1
$a_EnumWindows[$iUB][1] = $iNN
$a_EnumWindows[$iUB][2] = $hWnd
$a_EnumWindows[$iUB][3] = Number(_WinAPI_GetDlgCtrlID($hWnd))
$a_EnumWindows[$iUB][4] = ControlGetText($hWndMain,"","[ID:"& $a_EnumWindows[$iNN][3] &"]")
EndIf
Return 1
EndFunc