Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; @AZJIO
- ; Тестовый скрипт. Указываем заголовок окна (или класс), пример в строке 9-13 и запускаем скрипт, после закрытия окна с массивом элементов в той же папке со скриптом появится файл скрипт с таким же интерфейсом. Недостаток - пока не прописаны индивидуально каждый элемент и не протестировано на многих окнах, соответсвенно результат нужно доводить. Так же некоторые элементы как "кнопка" (Button) имеет несколько видов определяемых стилями, это тоже не детектируется.
- #include <WinAPI.au3>
- #include <Array.au3>
- #include <Constants.au3>
- #include <GuiButton.au3>
- ; Ожидание 5 секунд до появление окна блокнота
- ; $hWnd = WinWait("[CLASS:Notepad++]", "", 5)
- ; $hWnd = WinWait("[CLASS:AutoIt v3 GUI]", "", 5)
- ; $hWnd = WinWait("[CLASS:CabinetWClass]", "", 5)
- $hWnd = WinWait("[TITLE:7z SFX Constructor v4.4 Portable]", "", 5)
- If $hWnd Then
- _ViewArray($hWnd)
- Else
- MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
- Exit
- EndIf
- Func _ViewArray($hWnd)
- Local $aWindows, $s
- $sWind = WinGetTitle($hWnd)
- $aPosWind = WinGetPos($hWnd)
- If @error Then
- $sPosWind = '-1, -1, -1, -1'
- Else
- $sPosWind = $aPosWind[2] & ', ' & $aPosWind[3] & ', ' & $aPosWind[0] & ', ' & $aPosWind[1]
- EndIf
- $script = ''
- $aWindows = _WinAPI_EnumWindows(True, $hWnd)
- Local $aWindows2D[$aWindows[0][0] + 1][5] = [[$aWindows[0][0]]]
- For $i = 1 To $aWindows[0][0]
- $aWindows2D[$i][0] = $aWindows[$i][0]
- $aWindows2D[$i][1] = $aWindows[$i][1]
- $aWindows2D[$i][2] = StringReplace(StringStripCR(WinGetTitle($aWindows[$i][0])), @LF, ' \n ')
- If Not $aWindows2D[$i][2] Then $aWindows2D[$i][2] = StringReplace(StringStripCR(WinGetText($aWindows[$i][0])), @LF, ' \n ')
- ; $aStyleWnd = GUIGetStyle($aWindows[$i][0])
- ; If @error Or Not IsArray($aStyleWnd) Then
- $aWindows2D[$i][3] = _WinAPI_GetWindowLong($aWindows[$i][0], $GWL_STYLE) & ', ' & _WinAPI_GetWindowLong($aWindows[$i][0], $GWL_EXSTYLE)
- ; Else
- ; $aWindows2D[$i][3] = $aStyleWnd[0] & ', ' & $aStyleWnd[1]
- ; EndIf
- $aPos = ControlGetPos($hWnd, '', $aWindows[$i][0])
- If @error Then
- $aWindows2D[$i][4] = '-1, -1, -1, -1'
- Else
- $aWindows2D[$i][4] = $aPos[0] & ', ' & $aPos[1] & ', ' & $aPos[2] & ', ' & $aPos[3]
- EndIf
- $script &= _GetNameFunc($aWindows2D, $i)
- Next
- ; $s = Chr(1)
- $s = '|'
- _ArrayDisplay($aWindows2D, $sWind, -1, 0, $s, $s, '№' & $s & 'Дескриптор' & $s & 'Класс' & $s & 'Заголовок' & $s & 'Стиль' & $s & 'Координаты')
- If $script Then
- If StringInStr($script, '_GUICtrlComboBoxEx_Create') Then $script = '#include <GuiComboBoxEx.au3>' & @CRLF & $script
- If StringInStr($script, '_GUICtrlIpAddress_Create') Then $script = '#include <GuiIPAddress.au3>' & @CRLF & $script
- If StringInStr($script, '_GUICtrlRebar_Create') Then $script = '#include <GuiReBar.au3>' & @CRLF & $script
- If StringInStr($script, '_GUICtrlStatusBar_Create') Then $script = '#include <GuiStatusBar.au3>' & @CRLF & $script
- If StringInStr($script, '_GUICtrlToolbar_Create') Then $script = '#include <GuiToolBar.au3>' & @CRLF & $script
- If StringInStr($script, '_GUICtrlRichEdit_Create') Then $script = '#include <GuiRichEdit.au3>' & @CRLF & $script
- $script = "$hGUI = GUICreate('" & $sWind & "', " & $sPosWind & ")" & @CRLF & $script
- $script &= 'GUISetState()' & @CRLF & _
- 'Do' & @CRLF & _
- 'Until GUIGetMsg() = -3'
- $hFile = FileOpen(@ScriptDir & '\file.au3', 2)
- FileWrite($hFile, $script)
- FileClose($hFile)
- EndIf
- EndFunc ;==>_ViewArray
- Func _GetNameFunc(ByRef $aWin2D, $idx)
- Local $aClass[20] = ['Button', 'Static', 'Edit', 'SysListView32', 'SysTabControl32', 'ListBox', 'ComboBox', 'msctls_trackbar32', 'SysTreeView32', 'SysAnimate32', 'SysDateTimePick32', 'msctls_updown32', 'SysMonthCal32', 'msctls_progress32', 'ComboBoxEx32', 'SysIPAddress32', 'ReBarWindow32', 'msctls_statusbar32', 'ToolbarWindow32', 'RICHEDIT50W']
- Local $aCtpl[20] = ['GUICtrlCreateButton', 'GUICtrlCreateLabel', 'GUICtrlCreateInput', 'GUICtrlCreateListView', 'GUICtrlCreateTab', 'GUICtrlCreateList', 'GUICtrlCreateCombo', 'GUICtrlCreateSlider', 'GUICtrlCreateTreeView','GUICtrlCreateAvi','GUICtrlCreateDate','GUICtrlCreateUpdown','GUICtrlCreateMonthCal','GUICtrlCreateProgress','_GUICtrlComboBoxEx_Create','_GUICtrlIpAddress_Create','_GUICtrlRebar_Create','_GUICtrlStatusBar_Create','_GUICtrlToolbar_Create', '_GUICtrlRichEdit_Create']
- ; класс Static может быть GUICtrlCreateGraphic, GUICtrlCreatePic
- ; класс Button может быть чекбоксом, радиокнопкой, группой, взависимости от стиля
- ; Если высота Edit более 40 то GUICtrlCreateEdit
- ; меню и контекстное меню не видит, а также подсказки
- $ind = 999
- For $i = 0 To 19
- If $aWin2D[$idx][1] = $aClass[$i] Then
- $ind = $i
- EndIf
- Next
- If $ind = 999 Then $ind = 1
- $sCtpl = $aCtpl[$ind]
- $sText = "'" & $aWin2D[$idx][2] & "', "
- $aStyle = StringSplit($aWin2D[$idx][3], ', ')
- $sStyle1 = $aStyle[0]
- $sStyle2 = $aStyle[1]
- Switch $ind
- Case 0
- ; If BitAND($aStyle[0], $BS_GROUPBOX) Then $sCtpl = 'GUICtrlCreateGroup'
- ; If BitAND($aStyle[0], $BS_CHECKBOX) Then $sCtpl = 'GUICtrlCreateCheckbox'
- ; If BitAND($aStyle[0], $BS_AUTO3STATE) Or BitAND($aStyle[0], $BS_AUTOCHECKBOX) Then $sCtpl = 'GUICtrlCreateCheckbox'
- ; If BitAND($aStyle[0], $BS_AUTORADIOBUTTON) Then $sCtpl = 'GUICtrlCreateRadio'
- Case 7, 8, 13, 15
- $sText = ''
- Case 9
- $sText &= '0, '
- Case 2
- $aHeight = StringSplit($aWin2D[$idx][4], ', ')
- If $aHeight[4] > 40 Then $sCtpl = 'GUICtrlCreateEdit'
- Case 16
- Return $sCtpl & '($hGUI, ' & $sStyle1 & ')' & @CRLF
- Case 17
- Return $sCtpl & '($hGUI, -1, ' & $sText & $aWin2D[$idx][3] & ')' & @CRLF
- EndSwitch
- ; $aStyle = $aWin2D[$idx][3]
- ; If IsArray($aStyle) Then
- ; $sStyle1 = $aStyle[0]
- ; $sStyle2 = $aStyle[1]
- ; Else
- ; $sStyle1 = -1
- ; $sStyle2 = -1
- ; EndIf
- If $ind > 13 Then
- Return $sCtpl & "($hGUI, " & $sText & $aWin2D[$idx][4] & ', ' & $aWin2D[$idx][3] & ')' & @CRLF
- Else
- Return $sCtpl & "(" & $sText & $aWin2D[$idx][4] & ', ' & $aWin2D[$idx][3] & ')' & @CRLF
- EndIf
- ; If $ind > 13 Then
- ; Return $aCtpl[$ind] & "($hGUI, '" & $aWin2D[$idx][2] & "', " & $aWin2D[$idx][4] & ', ' & $sStyle1 & ', ' & $sStyle2 & ')' & @CRLF
- ; Else
- ; Return $aCtpl[$ind] & "('" & $aWin2D[$idx][2] & "', " & $aWin2D[$idx][4] & ', ' & $sStyle1 & ', ' & $sStyle2 & ')' & @CRLF
- ; EndIf
- EndFunc
- ; GUICtrlCreateObj
- ; Internet Explorer_Server
- ; Shell DocObject View
- ; Shell Embedding
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement