Что нового

[Окна, Диалоги] Перемещение по закладкам

Gray2009

Новичок
Сообщения
4
Репутация
1
Доброе время суток.
Подскажите как можно переходить по закладкам, обращаясь по наименованию закладки.
За пример можно взять окно Nero burning rom 6 при создании нового задания
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Gray2009
У меня так получилось с Nero 6:
Код:
$sTitle = "Nero StartSmart"
$sTitleNext = "Nero Express"
Run(@ProgramFilesDir & "\Ahead\Nero StartSmart\NeroStartSmart.exe")
WinWait($sTitle)
If Not WinActive($sTitle) Then WinActivate($sTitle)
WinWaitActive($sTitle)
ControlClick($sTitle, "", "[CLASS:Button; INSTANCE:2]") ; Данные
Sleep(500)
ControlClick($sTitle, "", "[CLASS:Button; INSTANCE:7]") ; Создать диск с данными.
WinWait($sTitleNext)
If Not WinActive($sTitleNext) Then WinActivate($sTitleNext)
$hNero = WinWaitActive($sTitleNext)
MsgBox(0, "", $hNero)
 
Автор
G

Gray2009

Новичок
Сообщения
4
Репутация
1
[Окна, Диалоги] Re: [Окна, Диалоги] Перемещение по закладкам

В NeroStartSmart вы перемещаетесь по кнопрам у которых изменяется instance.
В Nero Burning rom окно "новый проект" закладки (Инфо, мультисессия, ISO, Наклейка, Даты и т.д) имеют [CLASS:SysTabControl32; INSTANCE:1] и instance не меняется при открытии различных закладок.
Нажатие кнопок при помощи указателя мыши, даже привязанному к данному окну, на разных машинах приходит к смещению курсора и не попадает в нужное место, а корректировка к конкретному месту не правильный выход из положения.
Вот и хотелось бы узнать, может кто смог решить данную проблему другим путем.
 

Guezt

Продвинутый
Сообщения
335
Репутация
82
Gray2009
если конкретно nero интересует, то советую использовать nerocmd.exe (консольная версия) :smile:
p.s. всегда устанавливается с nero в той же папке лежит, я ее использовал для резервирования данных и записи их на диск.
 

madmasles

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

$sTitle = "Новый проект"

Run(@ProgramFilesDir & "\Ahead\Nero\nero.exe")
WinWait($sTitle)
If Not WinActive($sTitle) Then WinActivate($sTitle)
WinWaitActive($sTitle)
$h_tabcontrol = ControlGetHandle($sTitle, "", "[CLASS:SysTabControl32; INSTANCE:1]")
$i_TabItems = _GUICtrlTab_GetItemCount($h_tabcontrol)
For $i_Item = 0 To $i_TabItems - 1
	_GUICtrlTab_ClickTab($h_tabcontrol, $i_Item)
	$sText = WinGetText($sTitle)
	$sText = StringSplit($sText, @CRLF)
	MsgBox(0, $sTitle, "Открыта вкладка № " & $i_Item +1 & ' "' & $sText[1] & '"', 5)
	Sleep(1000)
Next
MsgBox(0, $sTitle, "Кончились вкладки.", 5)
Но это переход по номеру. По идее, _GUICtrlTab_GetItemText($h_tabcontrol, $i_Item) должна отображать название вкладок (у меня, например у Ad Muncher отображает без проблем), но у Nero текст не хочет определять.
 
Автор
G

Gray2009

Новичок
Сообщения
4
Репутация
1
[Окна, Диалоги] Re: [Окна, Диалоги] Перемещение по закладкам

Спасибо, то что нужно


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

Подскажите для данного класса [CLASS:TPageControl; INSTANCE:1] как организовать переход по закладкам. INSTANCE:1 для всех закладок неизменен
 

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
Код:
#include <GuiTab.au3>
$n=0;Первая вкладка и так делее
$hWnd=ControlGetHandle('Новый проект','','[CLASS:TPageControl; INSTANCE:1]')
_GUICtrlTab_SetCurFocus($hWnd,$n)
 
Автор
G

Gray2009

Новичок
Сообщения
4
Репутация
1
Возможно не правильный пример привел с закладками в Nero.
Пытаюсь написать скрипт для другой программы и в силу того что это первый проект на autoit, ввел в заблуждение остальных указав в качестве примера закладки в Nero burning rom с объектом [CLASS:SysTabControl32; INSTANCE:1].
В моем случае используются закладки с классом TPageControl, в которым перемещение производится стрелками вправо и влево, но не клавишей таб.
У меня данная операция получилась следующим кодом:

ControlFocus($sTitle, "", "[CLASS:TPageControl; INSTANCE:1]")
Send("{RIGHT}")
Send("{RIGHT}")

В принципе работает правильно и от кликаньем мышкой ушел, так как она показала свою нестабильность на разных машинах.
Однако спасибо за советы и оперативность с которой они были предложены.
 

SharkyEXE

Новичок
Сообщения
134
Репутация
0
Всем здравствуйте.

Версия AutoIt: 3.3.14.0
1) Операционная система: Microsoft Windows 7 Professional Service Pack 1 x64
2) Контроль учетных записей: ВЫКЛючен

Пожалуйста, научите, как сделать переход по названию вкладки Монитор, не по номеру?

Этот код не работает

Код:
Opt ( "WinTitleMatchMode", 2 )

################################################################################################################

RunWait ("rundll32.exe shell32.dll,Control_RunDLL desk.cpl")

WinWait ( "Разрешение экрана", "" )

WinActivate ( "Разрешение экрана", "" )

WinWaitActive ( "Разрешение экрана", "" )

WinSetOnTop ( "Разрешение экрана", "", 1 )

WinMove ( "Разрешение экрана", "", 0, 0, 648, 412 )

# Один раз быстро нажать левую кнопку мышки на строке " Дополнительные параметры "
MouseClick ( "left", 453, 362, 1, 1 )

WinWait ( "Свойства", "" )

WinActivate ( "Свойства", "" )

WinWaitActive ( "Свойства", "" )

WinSetOnTop ( "Свойства", "", 1 )

#include <GuiTab.au3>
#include <GuiHeader.au3>
#include <GuiListView.au3>

$hWnd = WinWaitActive("Свойства")

; активация вкладки "Монитор"
$hTab = ControlGetHandle($hWnd, "", "SysTabControl321")
_GUICtrlTab_SetCurFocus($hTab, _GUICtrlTab_FindTab($hTab, "Монитор"))
 
Последнее редактирование:

SharkyEXE

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

Здравствуйте.

А можно или нет чего-то добавить внутрь кода, чтобы при запуске F5 был запуск как x64 чтоли?
 

SharkyEXE

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

Здравствуйте.

Скажите, пожалуйста, а как сделать нормально, с мозгами, мол
если система x64 - то будет запускаться со строкой
#AutoIt3Wrapper_UseX64=Y

если система x86 - то будет запускаться со строкой
#AutoIt3Wrapper_UseX64=N

Как смог написал, вроде работает

Код:
################################################################################################################

# В окне с заголовком " Список всех режимов " выбрать строку " 640 на 480, 256 цветов, 60 Гц "
$hStroke = "640 на 480, 256 цветов, 60 Гц"

################################################################################################################

Opt ( "WinTitleMatchMode", 4 )

################################################################################################################

# BlockInput ( 1 )
# Sleep ( 1000 )

################################################################################################################

RunWait ("rundll32.exe shell32.dll,Control_RunDLL desk.cpl")

$Name = "Разрешение экрана"

WinWait ( "[REGEXPTITLE:.*" & $Name & ".*]", "" )

WinActivate ( "[REGEXPTITLE:.*" & $Name & ".*]", "" )

WinWaitActive ( "[REGEXPTITLE:.*" & $Name & ".*]", "" )

WinSetOnTop ( "[REGEXPTITLE:.*" & $Name & ".*]", "", 1 )

# MsgBox ( 0, "", "[REGEXPTITLE:*" & $Name & "*]" )

WinMove ( "[REGEXPTITLE:.*" & $Name & ".*]", "", 0, 0, 648, 412 )

#***************************************************************************************************************

# Один раз быстро нажать левую кнопку мышки на строке " Дополнительные параметры "

# Тема " Классическая " + ВЫКЛючено " Упорядочить " -> " Представление " -> " Строка меню "
MouseClick ( "left", 453, 311, 1, 1 )

# Тема " Классическая " + ВКЛючено " Упорядочить " -> " Представление " -> " Строка меню "
MouseClick ( "left", 453, 362, 1, 1 )

# Тема " Windows 7 - упрощённый стиль " + ВЫКЛючено " Упорядочить " -> " Представление " -> " Строка меню "
MouseClick ( "left", 439, 329, 1, 1 )

# Тема " Windows 7 - упрощённый стиль " + ВКЛючено " Упорядочить " -> " Представление " -> " Строка меню "
MouseClick ( "left", 439, 350, 1, 1 )

#***************************************************************************************************************

WinWait ( "Свойства", "" )

WinActivate ( "Свойства", "" )

$hWnd = WinWaitActive ( "Свойства" )

WinSetOnTop ( "Свойства", "", 1 )

#include <GuiTab.au3>

# В окне с заголовком " Свойства " активация вкладки " Монитор "
$hTab = ControlGetHandle ( $hWnd, "", "SysTabControl321" )
_GUICtrlTab_SetCurFocus ( $hTab, _GUICtrlTab_FindTab ( $hTab, "Монитор" ))

ControlFocus ( "Свойства", "", "[CLASS:Button; INSTANCE:4]" )

# Проверяем статус галки : установлена ( 1 ) / не установлена ( 0 )
$Status1 = ControlCommand ( "Свойства", "", "[CLASS:Button; INSTANCE:4]", "IsChecked" )

# Если 1, значит установлена
If $Status1 = 1 Then

# Иначе - не установлена
Else

# В окне с заголовком " Свойства " поставить птичку/галочку " Скрыть режимы, которые монитор не может использовать "
# ControlFocus ( "Свойства", "", "[CLASS:Button; INSTANCE:4]" )
ControlClick ( "Свойства", "", "[CLASS:Button; INSTANCE:4]" )

# В окне с заголовком " Свойства " нажать кнопку " Применить "
ControlFocus ( "Свойства", "", "[CLASS:Button; INSTANCE:7]" )
ControlClick ( "Свойства", "", "[CLASS:Button; INSTANCE:7]" )

EndIf

# Sleep ( 5000 )

# В окне с заголовком " Свойства " активация вкладки " Адаптер "
$hTab = ControlGetHandle ( $hWnd, "", "SysTabControl321" )
_GUICtrlTab_SetCurFocus ( $hTab, _GUICtrlTab_FindTab ( $hTab, "Адаптер" ))

# Sleep ( 5000 )

# В окне с заголовком " Свойства " нажать кнопку " Список всех режимов "
ControlFocus ( "Свойства", "", "[CLASS:Button; INSTANCE:4]" )
ControlClick ( "Свойства", "", "[CLASS:Button; INSTANCE:4]" )

WinWait ( "Список всех режимов", "" )

WinActivate ( "Список всех режимов", "" )

WinWaitActive ( "Список всех режимов", "" )

WinSetOnTop ( "Список всех режимов", "", 1 )

#***************************************************************************************************************

# https://www.autoitscript.com/forum/topic/188307-select-an-item-from-a-listbox-newbie/?do=findComment&comment=1352756

$hWindow = WinGetHandle ( "Список всех режимов" )

$hControl = ControlGetHandle ( $hWindow, "", "[CLASS:ListBox; INSTANCE:1]" )

ControlCommand ( $hWindow, "", $hControl, "SelectString", $hStroke )

#***************************************************************************************************************

# В окне с заголовком " Список всех режимов " нажать кнопку " OK "
ControlFocus ( "Список всех режимов", "", "[CLASS:Button; INSTANCE:1]" )
ControlClick ( "Список всех режимов", "", "[CLASS:Button; INSTANCE:1]" )

WinWait ( "Свойства", "" )

WinActivate ( "Свойства", "" )

WinWaitActive ( "Свойства", "" )

WinSetOnTop ( "Свойства", "", 1 )

# В окне с заголовком " Свойства " нажать кнопку " Применить "
ControlFocus ( "Свойства", "", "[CLASS:Button; INSTANCE:7]" )
ControlClick ( "Свойства", "", "[CLASS:Button; INSTANCE:7]" )

# Не удалять эту паузу
Sleep ( 5000 )

If WinExists ( "Параметры дисплея", "" ) Then

WinWait ( "Параметры дисплея", "" )

WinActivate ( "Параметры дисплея", "" )

WinWaitActive ( "Параметры дисплея", "" )

WinSetOnTop ( "Параметры дисплея", "", 1 )

# В окне с заголовком " Параметры дисплея " нажать кнопку " Да "
ControlFocus ( "Параметры дисплея", "", "[CLASS:Button; INSTANCE:1]" )
ControlClick ( "Параметры дисплея", "", "[CLASS:Button; INSTANCE:1]" )

EndIf

# В окне с заголовком " Свойства " нажать кнопку " OK "
ControlFocus ( "Свойства", "", "[CLASS:Button; INSTANCE:5]" )
ControlClick ( "Свойства", "", "[CLASS:Button; INSTANCE:5]" )

WinWait ( "[REGEXPTITLE:.*" & $Name & ".*]", "" )

WinActivate ( "[REGEXPTITLE:.*" & $Name & ".*]", "" )

WinWaitActive ( "[REGEXPTITLE:.*" & $Name & ".*]", "" )

WinSetOnTop ( "[REGEXPTITLE:.*" & $Name & ".*]", "", 1 )

# В окне с заголовком " Разрешение экрана " нажать кнопку " Применить "
ControlFocus ( "[REGEXPTITLE:.*" & $Name & ".*]", "", "[CLASS:Button; INSTANCE:6]" )
ControlClick ( "[REGEXPTITLE:.*" & $Name & ".*]", "", "[CLASS:Button; INSTANCE:6]" )

# В окне с заголовком " Разрешение экрана " нажать кнопку " OK "
ControlFocus ( "[REGEXPTITLE:.*" & $Name & ".*]", "", "[CLASS:Button; INSTANCE:4]" )
ControlClick ( "[REGEXPTITLE:.*" & $Name & ".*]", "", "[CLASS:Button; INSTANCE:4]" )

While WinExists ( "Разрешение экрана", "" )
Sleep ( 1000 )
WEnd


Пожалуйста, скажите,к ак красиво, с мозгами сделать эту вещь
Код:
RunWait ("rundll32.exe shell32.dll,Control_RunDLL desk.cpl")

$Name = "Разрешение экрана"

WinWait ( "[REGEXPTITLE:.*" & $Name & ".*]", "" )

WinActivate ( "[REGEXPTITLE:.*" & $Name & ".*]", "" )

WinWaitActive ( "[REGEXPTITLE:.*" & $Name & ".*]", "" )

WinSetOnTop ( "[REGEXPTITLE:.*" & $Name & ".*]", "", 1 )


Я использую
Код:
Opt ( "WinTitleMatchMode", 4 )


Я подсмотрел здесь перейти

Просто может есть способ как-то лучше, компактнее использовать это
Код:
RunWait ("rundll32.exe shell32.dll,Control_RunDLL desk.cpl")

$Name = "Разрешение экрана"

WinWait ( "[REGEXPTITLE:.*" & $Name & ".*]", "" )

WinActivate ( "[REGEXPTITLE:.*" & $Name & ".*]", "" )

WinWaitActive ( "[REGEXPTITLE:.*" & $Name & ".*]", "" )

WinSetOnTop ( "[REGEXPTITLE:.*" & $Name & ".*]", "", 1 )


Чтобы при этом 100%но искался заголовок окна с опцией
Код:
Opt ( "WinTitleMatchMode", 4 )
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
если система x64 - то будет запускаться со строкой
#AutoIt3Wrapper_UseX64=Y
Директива #AutoIt3Wrapper_UseX64=Y так и работает. Если система х64, то принудительно будет запущен AutoIt3_x64.exe. В противном случае, естественно, х86.
 
Верх