Что нового

Как работает ControlClick?

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Нужно нажать на кнопку "Дополнительно" в окне "Сервис>Свойства папки>Типы файлов"
Код:
Run("explorer.exe")
WinWaitActive("Мои документы")
Send("{ALT}")
Send("{RIGHT 4}")
Send("{DOWN}")
Send("{DOWN 3}")
Send("{ENTER}")
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
decadent
Несколько иной способ.
Код:
Run("explorer.exe")
WinWaitActive("Мои документы", "")
Sleep(100)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; установка русской раскладки клавиатуры для нашего окна
$hWnd = WinGetHandle("Мои документы")
_SetKeyboardLayout("00000419", $hWnd) ; 419 - код русской раскадки клавиатуры
Func _SetKeyboardLayout($sLayoutID, $hWnd)
Local $WM_INPUTLANGCHANGEREQUEST = 0x50
Local $ret = DllCall("user32.dll", "long", "LoadKeyboardLayout", "str", $sLayoutID, "int", 0)
DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, "int", $WM_INPUTLANGCHANGEREQUEST, "int", 1, "int", $ret[0])
EndFunc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ControlSend("Мои документы", "", "ToolbarWindow323", "!е") ; жмем Alt + е (русское) - откр. Сервис
ControlSend("Мои документы", "", "ToolbarWindow323", "а") ; жмем а (русское) - откр. Свойства папки
WinWaitActive("Свойства папки", "")
Sleep(100)
ControlCommand("Свойства папки", "", "[CLASS:SysTabControl32; INSTANCE:1]", "TabRight", "") ; на следующую вкладку вправо
ControlCommand("Свойства папки", "", "[CLASS:SysTabControl32; INSTANCE:1]", "TabRight", "") ; на следующую вкладку вправо
WinWaitActive("Свойства папки", "Сведения для типа файла") ; ждем активации кнопки Дополнительно
Sleep(100)
ControlSend("Свойства папки", "", "[CLASS:Button; INSTANCE:5]", "п") ; жмем п (рус) - нажимаем на кнопку Дополнительно.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Yuriy
Именно этого я и старался избежать _SetKeyboardLayout ;D

Кстати что-то WinMenuSelectItem у меня не сработала на explorer.exe`e :(
Хотя на других приложениях всё работает на ура!
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Garrett
Я сначала тоже хотел через WinMenuSelectItem.
Но не получилось, т.к. наверное потому что это ToolsBar.
Кроме AutoIt Window Info использую еще InqSoft Window Scanner.
В нем сразу можно нажимать на кнопки, меню и т.п.
 

decadent

Новичок
Сообщения
6
Репутация
0
Garrett сказал(а):
Код:
Run("explorer.exe")
WinWaitActive("Мои документы")
Send("{ALT}")
Send("{RIGHT 4}")
Send("{DOWN}")
Send("{DOWN 3}")
Send("{ENTER}")

С этим я разобрался :smile:
Проблема в другом. В окне "Cвойства папки" я открываю вкладку "Типы файлов", там спускаюсь до строки "Папка" и для нее нужно нажать "Изменение свойств типа файлов", то есть кнопку дополнительно. AutoIt Window Info все поле "Сведения для типа файла Папка" определяет как [CLASS:Button; INSTANCE:5]. Я использую координаты ControlClick через AutoIt Window Info, но он никакого эффекта.

Yuriy

Cпасибо. Я кажется понял, что я делаю не так. Наверно кнопка просто не успевает стать активной. Буду пробовать.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
decadent
Да, надо дождаться активности кнопки:
Код:
WinWaitActive("Свойства папки", "Сведения для типа файла") ; ждем активации кнопки Дополнительно
 

decadent

Новичок
Сообщения
6
Репутация
0
Yuriy

В твоем примере я разобрался. То чего хотел, достиг, но не тем путем. ControlClick в те координаты, где "Дополнительно" все равно не срабатывает.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
decadent
После активации кнопки Дополнительно можно просто нажать
два Таба и один Пробел.
Код:
WinWaitActive("Свойства папки", "Сведения для типа файла") ; ждем активации кнопки Дополнительно
Sleep(100)
Send("{TAB 2}")
Send("{SPACE}")
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
decadent
Можно так попробовать:
Код:
#include <GuiTab.au3>

Run('control folders')
$hHandle = WinWait('Свойства папки', '', 5)
If Not IsHWnd($hHandle) Then Exit
If Not WinActive($hHandle) Then WinActivate($hHandle)
WinWaitActive($hHandle)
$hTab = ControlGetHandle($hHandle, '', '[CLASS:SysTabControl32; INSTANCE:1]')
_GUICtrlTab_ClickTab($hTab, 2)
While 1
	If ControlCommand($hHandle, '', '[CLASS:Button; INSTANCE:4]', 'IsEnabled', '') Then ExitLoop
	Sleep(100)
WEnd
ControlClick($hHandle, '', '[CLASS:Button; INSTANCE:4]')
$hChange = WinWait('Изменение свойств типа файлов', '', 2)
If Not WinActive($hChange) Then WinActivate($hChange)
Sleep(3000)
ControlClick($hChange, '', '[CLASS:Button; INSTANCE:10]')
Sleep(3000)
ControlClick($hHandle, '', '[CLASS:Button; INSTANCE:7]')
 

decadent

Новичок
Сообщения
6
Репутация
0
Yuriy
Так-то оно можно. Я уже разобрался, что у меня кнопка просто не успевала активироваться. Вопрос в другом: принцип ControlClick, почему он, то срабатывает, то нет, я пока не понял.

madmasles
Попробую, спасибо :smile:

Собственно разобрался. AutoIt Window Info просто не выделял отдельно кнопку "Дополнительно", а она по счету четвертая. Затупил, извиняюсь.
 

APGEN

Новичок
Сообщения
9
Репутация
0
Как именно такая команда работает и какие именно данные из "Autoit Window Info" следует брать? Basic Window Info или Basic Control Info? По справочнике смотрел, но не дошло. По примеру работает, но например в окнах посложнее нет. В том же ворде или файнридере не проходит почемуто :'( :IL_AutoIt_1: :laugh: :rofl: :wacko:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
APGEN
Код:
Run(@SystemDir & '\calc.exe')
$hCalc = WinWait('[Class:SciCalc]', '', 5)
If Not $hCalc Then
	MsgBox(16, 'Error', 'Error')
	Exit
EndIf
For $i = 5 To 11
	ToolTip('Кликаем по кнопке Button' & $i & @CRLF & _
			'Можно применить [CLASS:Button; INSTANCE:' & $i & ']', 0, 0)
	ControlClick($hCalc, '', 'Button' & $i)
	Sleep(3000)
Next

[box title=Из вкладки Summary]>>>> Control <<<<
Class: Button
Instance: 6
ClassnameNN: Button6
Name:
Advanced (Class): [CLASS:Button; INSTANCE:6][/box]
 

Leef

Новичок
Сообщения
5
Репутация
0
можно ли использовать ControlClick для вызова контекстного меню?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
MiOksa

{CodeWarn}
 

djasup

Новичок
Сообщения
64
Репутация
1
А как в определенную вкладку браузера Firefox отправить клик если autoit window info не различает вкладки отдельно , а лишь весь браузер видет?
 
Верх