Что нового

Как послать команду в расскрывающийся список?

lemonia

Новичок
Сообщения
126
Репутация
0
Вот информация из Window Info для нераскрытого списка:
Код:
>>>> Window <<<<
Title:	1 - ABBYY FineReader 8.0 Professional Edition
Class:	FineReader8MainWindowClass
Position:	-4, -4
Size:	1032, 746
Style:	0x17CF0000
ExStyle:	0x00040100
Handle:	0x001007A2

>>>> Control <<<<
Class:	ComboBox
Instance:	1
ClassnameNN:	ComboBox1
Name:	
Advanced (Class):	[CLASS:ComboBox; INSTANCE:1]
ID:	20443
Text:	
Position:	244, 3
Size:	172, 21
ControlClick Coords:	116, 15
Style:	0x50000213
ExStyle:	0x00000000
Handle:	0x000B07FE

>>>> Mouse <<<<
Position:	360, 64
Cursor ID:	0
Color:	0xFFFFFF

>>>> StatusBar <<<<
1:	Starts the spelling check
2:	INS
3:	
4:	
5:	
6:	Pages: 1/5
7:	

>>>> ToolsBar <<<<

>>>> Visible Text <<<<
Batch
Batch
Starts the spelling check
(Choose more languages...)


>>>> Hidden Text <<<<



Вот информация для отлавливаемого пункта раскрытого списка из wInformer:
Код:
--- Window Info ---
 Title : 
 Class : ComboLBox
 Position : 244, 70
 Size : 192, 77
 Client Size : 190, 75
 Style : 0x54808051
 ExStyle : 0x00000088
 Handle : 0x0007028E
 PID : 1428

--- Control Info ---
 Class : 
 Instance : 
 ClassnameNN : 
 ID : 
 Text : 
 Position : 
 Size : 
 ControlClick : 
 Style : 
 ExStyle : 
 Handle : 
 IsVisible : 
 IsEnabled : 

--- Mouse Info ---
 Position (screen) : 415, 136
 Position (window) : 171, 66
 Position (client) : 170, 65
 Pixel Color (hex) : 0x316AC5
 Pixel Color (dec) : 3238597
 Cursor ID : 2

Пожалуйста полную команду напишите, а то новичок и что то не так могу сделать. То есть нуждаюсь раскрыть выпадающее меню и выбрать пункт Russian-English.
 

Вложения

  • fhdrrh.jpg
    fhdrrh.jpg
    82.9 КБ · Просмотры: 13
Автор
L

lemonia

Новичок
Сообщения
126
Репутация
0
Код:
Run("E:\Program Files\ABBYY FineReader 8.0 Professional Edition\FineReader.exe")
WinWaitActive("ABBYY")
SendKeepActive("ABBYY")
Send("{CTRLDOWN}{SHIFTDOWN}n")
Send("{SHIFTUP}{CTRLUP}2{ENTER}{ENTER}")
WinWaitActive("ABBYY")
SendKeepActive("ABBYY")
 Sleep(500)
 Send ControlCommand("[class:FineReader8MainWindowClass]", "", "ComboBox1", "SelectString", "Russian-English")
 

Вложения

  • RE.jpg
    RE.jpg
    53.3 КБ · Просмотры: 6

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
lemonia
ControlCommand() - это полноценная самодостаточная функция для отправки команд элементам. Не нужно в начале строки указывать Send.
 
Автор
L

lemonia

Новичок
Сообщения
126
Репутация
0
InnI сказал(а):
lemonia
ControlCommand() - это полноценная самодостаточная функция для отправки команд элементам. Не нужно в начале строки указывать Send.
Спасибо, ошибки уже нет, правда пока не выбирается из списка.
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
lemonia
Попробуйте автоматизировать другой раскрывающийся список, чтобы проверить получается ли это в принципе. Список ведь может быть созданным заранее, а может формироваться в момент раскрытия, а если второе, то он изначально пуст и значит его надо сначала раскрыть, а потом выбрать. Функция _GUICtrlComboBox_GetCount получает число элементов в списке, можно ей проверить или моей утилитой CaptureText наведя не на поле а на весь элемент, на стрелку раскрытия. На Win7 захват курсора из трея делается двойным кликом но с интервалом между кликами.
 
Автор
L

lemonia

Новичок
Сообщения
126
Репутация
0
Работаю в XP. Запустил вашу утилиту, не могу в трее у нее вызвать настройки. При клике на этом пункте не открывается ничего, а повторно вообще серым этот пункт становится. У меня несколько операционок, если так не должно быть, попробую еще в другой. А как ей пользоваться, чтобы скопировать данные в буфер обмена?
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
lemonia
Код:
; развернуть список
ControlCommand("[class:FineReader8MainWindowClass]", "", "ComboBox1", "ShowDropDown")
; свернуть список
ControlCommand("[class:FineReader8MainWindowClass]", "", "ComboBox1", "HideDropDown")
; выбрать строку
ControlCommand("[class:FineReader8MainWindowClass]", "", "ComboBox1", "SelectString", "Russian-English")
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
lemonia
В комплекте Readme, какой смысл сюда его переписывать.
Тогда минимум проблем, щёлкнуть мышкой на иконке в трее и не отпуская тащить на раскрывающийся список и на нём отпустить. В буфере обмена будет список всех элементов. К примеру в адресной строке эксплорера список формируется в момент раскрытия, так как захват ничего не возвращает.

Проверил, список захватывает, только выбор у меня пока не работает.
Код:
$hWnd = WinWait("[CLASS:FineReader8MainWindowClass]", "", 5)
If Not $hWnd Then
    MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
    Exit
EndIf

$hControl = ControlGetHandle($hWnd, "", "ComboBox3")
If Not $hControl Then
    MsgBox(4096, 'Сообщение', 'ComboBox не найден, завершаем работу скрипта')
    Exit
EndIf

ControlCommand($hWnd, '', $hControl, "SelectString", "Украинский")


Добился, работает, просто экземпляр 3 (у меня), а не 1, а в твоём посту написано 1
 
Автор
L

lemonia

Новичок
Сообщения
126
Репутация
0
Из предпоследнего поста код не сработал.
А как подправить? На одном скриншоте заснял, после того как вручную раскрыл меню, показать, что там сейчас.
На другом заскриншотил результат работы утилиты после того, как вручную выставил Russian-English.
 

Вложения

  • Image 1.jpg
    Image 1.jpg
    73.8 КБ · Просмотры: 7
  • Image 2.jpg
    Image 2.jpg
    110.7 КБ · Просмотры: 7

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
lemonia
Исправил класс окна, я пробовал на версии 9, теперь попробовал на 8. Итог, у меня изменилось, с учётом, что номер элемента ComboBox у меня 3


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

lemonia
Проверь такой вариант
Код:
$hWnd = WinWait("[CLASS:FineReader8MainWindowClass]", "", 5)
If Not $hWnd Then
    MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
    Exit
EndIf

$hControl = ControlGetHandle($hWnd, "", "ComboBox3")
If Not $hControl Then
    MsgBox(4096, 'Сообщение', 'ComboBox не найден, завершаем работу скрипта')
    Exit
EndIf

; ControlCommand($hWnd, '', $hControl, "SelectString", "Украинский")

#include <GuiComboBox.au3>

$sText = 'Украинский'
$iIndex = _GUICtrlComboBox_FindStringExact($hControl, $sText)
; MsgBox(0, 'Сообщение', $iIndex)
If $iIndex = -1 Then
    MsgBox(4096, 'Сообщение', 'Пункт "' & $sText & '" не найден, завершаем работу скрипта')
    Exit
EndIf
_GUICtrlComboBox_ShowDropDown($hControl, True)
_GUICtrlComboBox_SetCurSel($hControl, $iIndex)
ControlClick ($hWnd, "", $hControl)
 
Автор
L

lemonia

Новичок
Сообщения
126
Репутация
0
Сейчас список раскрывается, выбирается Russian-English, однако почему то, после выбора, когда список складывается, там по прежнему English.
Код:
Run("E:\Program Files\ABBYY FineReader 8.0 Professional Edition\FineReader.exe")
WinWaitActive("ABBYY")
SendKeepActive("ABBYY")
Send("{CTRLDOWN}{SHIFTDOWN}n")
Send("{SHIFTUP}{CTRLUP}2{ENTER}{ENTER}")
WinWaitActive("ABBYY")
SendKeepActive("ABBYY")
 Sleep(500)
;--------------------------------------------------------------
$hWnd = WinWait("[CLASS:FineReader8MainWindowClass]", "", 5)
If Not $hWnd Then
    MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
    Exit
EndIf

$hControl = ControlGetHandle($hWnd, "", "ComboBox1")
If Not $hControl Then
    MsgBox(4096, 'Сообщение', 'ComboBox не найден, завершаем работу скрипта')
    Exit
EndIf

; ControlCommand($hWnd, '', $hControl, "SelectString", "Russian-English")

#include <GuiComboBox.au3>

$sText = 'Russian-English'
$iIndex = _GUICtrlComboBox_FindStringExact($hControl, $sText)
; MsgBox(0, 'Сообщение', $iIndex)
If $iIndex = -1 Then
    MsgBox(4096, 'Сообщение', 'Пункт "' & $sText & '" не найден, завершаем работу скрипта')
    Exit
EndIf
_GUICtrlComboBox_ShowDropDown($hControl, True)
_GUICtrlComboBox_SetCurSel($hControl, $iIndex)
ControlClick ($hWnd, "", $hControl)
;-----------------------------------------------------------
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
lemonia
Попробуй вместо ControlClick использовать Send+ENTER
 
Автор
L

lemonia

Новичок
Сообщения
126
Репутация
0
Как понял, нужно подправить последнюю строчку кода. А как это правильно сделать?



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

В другой теме по поиску фрилансера
http://autoit-script.ru/index.php?topic=18968.0
в результате праведных трудов появился работоспособный код для решения этой проблемы:
Код:
; установка языка
  ControlCommand("ABBYY FineReader", "", "ComboBox1", "SelectString", "Russian-English")

осталось написать цикл, чтобы Finereader обрабатывал пакеты один за другим со счетчиком +1, желательно найдя сначала папку с наименьшим порядковым номером.
 

becauseim

Новичок
Сообщения
1
Репутация
0
Заранее извиняюсь, т.к. вопрос наверняка имеет ответ в справке по программе, но информация из нее тяжеловата для восприятия без имения общего представления о написании скриптов (программ и пр.), а поиск по форуму подробного ответа не выдал.
Хотелось бы узнать, как правильно применять функцию controlClick от начала и до конца, т.е. какую именно информацию необходимо черпать из приложения Windows Info и как ее верно записывать.
Необходимо: нажать на выпадающий список Draft (Full) (скриншот 1)

Использование глобальной координаты расположения курсора не подходит, т.к. данное встариваемое окно программы имеет свойство менять свою позицию слишком часто. Поэтому, важно понять, как сфокусировать действие на нужной кнопке (выпадающем списке) окна программы. Windows Info фокусируется лишь на тулбаре, как получить и записать информацию о нужной кнопке - не ясно. Надеюсь, кто-то поможет.
1121569378ac6c59f278982c8b8b9e37.jpg
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
becauseim
Windows Info фокусируется лишь на тулбаре
На вкладке "Control" пункт "ControlClick Coords" - это и есть координаты клика - последние два параметра функции
Код:
ControlClick("[class:Vegas.Class.Frame]", "", "ToolbarWindow322", "left", 1, 180, 15)
 
Верх