Извлечение определенного текста из диалогового окна с помощью autoit - PullRequest
0 голосов
/ 03 января 2019

Я хочу получить текст из диалогового окна.Я получаю заголовок из диалогового окна с помощью функции winGetTitle().

Мой код в autoit выглядит следующим образом:

$pId = Run("C:/foldername/Dialogbox.exe")

Local $hWnd   = WinWait("[CLASS:#32770]", "", 10)
Local $sTitle = WinGetTitle("[ACTIVE]")

; Display the window title.
ConsoleWrite($sTitle & @CRLF)

; changing control from the class containg title to the class containing the text. 
Local $hSysTray_Handle = ControlGetHandle('[Class:#32770]', '', '[Class:SysListView32;Instance:1]')
Local $sText           = WinGetText("[ACTIVE]")
Local $sTextnew        = ControlGetText($hSysTray_Handle, "", $sText)

ConsoleWrite($sTextnew & @CRLF)

Возвращает только заголовок, а не текст в диалоговом окне.коробка.#32770 является основным классом диалогового окна и заголовка, текст в разных классах в базовой управляющей информации в autoit.

Я новичок в autoit и не знаю, как извлечь текст из диалогового окна.Или я должен использовать sikuli для этого?

1 Ответ

0 голосов
/ 04 января 2019
; Start Mp3tag if not running.
If Not ProcessExists('Mp3tag.exe') Then
    Run('"C:\Program Files (x86)\Mp3tag\Mp3tag.exe"')
    If @error Then Exit 1
EndIf

; Scans working directory for Mp3 files.
WinWaitClose('Reading directory', '', 5)

; Main window.
$hWnd = WinWait('Mp3tag')

; Get item count of 1st column from the listview.
For $i1 = 1 To 5
    $iCount = ControlListView($hWnd, '', 'SysListView321', 'GetItemCount')

    If $iCount Then
        ConsoleWrite('Found ' & $iCount & ' items.' & @CRLF)
        ExitLoop
    EndIf

    Sleep(1000)
Next

If Not $iCount Then
    MsgBox(0x40000, @ScriptName, 'Count is 0')
    Exit 1
EndIf

; Get text of each listview item in the 1st column.
For $i1 = 0 To $iCount -1
    $sText = ControlListView($hWnd, '', 'SysListView321', 'GetText', $i1)
    ConsoleWrite(StringFormat('%3d  Text: %s', $i1, $sText) & @CRLF)
Next

У меня нет "C:/foldername/Dialogbox.exe" для проверки.У меня есть Mp3tag , который имеет элемент управления SysListView32.

ControlListView () может получить текст и т. Д. Из элемента управления ListView.Параметр GetItemCount будет получать количество элементов списка, а GetText будет получать текст из каждого элемента списка.

Это тестовый вывод:

Found 15 items.
  0  Text: 01 - Lively Up Yourself.mp3
  1  Text: 02 - Soul Rebel.mp3
  2  Text: 03 - Treat Yourself Right.mp3
  3  Text: 04 - Rebels Hop.mp3
  4  Text: 05 - Soul Almighty.mp3
  5  Text: 06 - Kaya.mp3
  6  Text: 07 - Trenchtown Rock.mp3
  7  Text: 08 - Soul Shakedown Party.mp3
  8  Text: 09 - Natural Mystic.mp3
  9  Text: 10 - Fussing And Fighting.mp3
 10  Text: 11 - African Herbsman.mp3
 11  Text: 12 - Keep On Moving.mp3
 12  Text: 13 - Go Tell It On The Mountain.mp3
 13  Text: 14 - How Many Times.mp3
 14  Text: 15 - Bonus Track.mp3

Номер элемента списка находится слева, а текст элемента списка - справа, следующий за Text:.


. Предположительно, код для проверки вашего Dialogbox.exe с помощью:

Run("C:\foldername\Dialogbox.exe")
$hWnd = WinWait("[CLASS:#32770]", "", 10)

; Allow time for SysListView321 to fully load.
Sleep(1000)

; Get the window title.
$sTitle = WinGetTitle("[ACTIVE]")
ConsoleWrite($sTitle & @CRLF)

; Changing control from the class containing title to the class containing the text.
$hLView = ControlGetHandle($hWnd, '', 'SysListView321')

; Get item count of 1st column from the listview.
$iCount = ControlListView($hWnd, '', $hLView, 'GetItemCount')

; Get text of each listview item in the 1st column.
For $i1 = 0 To $iCount -1
    $sText = ControlListView($hWnd, '', $hLView, 'GetText', $i1)
    ConsoleWrite(StringFormat('%3d  Text: %s', $i1, $sText) & @CRLF)
Next

Можно было бы использовать некоторые улучшения, даже если это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...