Что нового

[Автоматизация] Как включить/отключить панель Quick Launch (или любую другую) с помощью AutoIt

Favorite6233

Знающий
Сообщения
21
Репутация
5
Проблема такая: при установке Win-XP бывает, что надо включить панель быстрого запуска "Quick Launch". После установки Nero 7 появляется панель инструментов "Nero Search", которую хотелось бы выключить, опять же, автоматизировано. Вопрос состоит в том: как это сделать? Ещё хотелось бы узнать, как можно включить или выключить "группировку сходных элементов в панели задач" и автоматическое скрытие панели задач с экрана?
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Favorite6233
Вопрос наверно больше относится к реестру, чем к AutoIt.
Смотри раздел реестра:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Streams\Desktop
Параметры: TaskbarWinXP и Toolbars
Но эксплорер читает этот раздел при запуске, а при выходе сохраняет текущее. Так что изменять можно только до запуска или в промежутке перезапуска.
Используй regshot и всегда получишь разницу при изменении реестра.
 
Автор
F

Favorite6233

Знающий
Сообщения
21
Репутация
5
AZJIO [?]
Смотри раздел реестра:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Streams\DesktopПараметры: TaskbarWinXP и ToolbarsНо эксплорер читает этот раздел при запуске, а при выходе сохраняет текущее. Так что изменять можно только до запуска или в промежутке перезапуска.

О, спасибо. Действительно, когда Nero внедряет свою панель, то она появляется после перезагрузки explorer-a.

На данный момент нашёл способ вот такой:
Код:
$Results = ControlGetPos("","Quick Launch","[Classnn:ToolbarWindow321]")
    If $Results = 0 Then
 	 ControlClick("","Выполнение приложений","[Class:ToolbarWindow32]","right")
	 ControlSend("","Выполнение приложений","[Class:ToolbarWindow32]","{down}{right}{up 2}{enter}")
    EndIf


В общем-то устраивает, но возникает вопрос: можно ли как-то в меню, которое открывается по правой кнопке мыши, узнать, в какой строчке что написано? Тогда проблема вообще решилась бы. Потому что сейчас просто наугад выбираю. Замечено, что этот пункт "быстрого запуска" находится в одной и той же позиции меню, поэтому просто на него попадаю и всё.
В идеале было бы, конечно, хорошо анализировать пункты этого меню и соответственно включать или выключать нужные/ненужные.
 
A

Alecsis1

Гость
Как-то имел дело с похожей задачей, касаемо Quick Launch и др. настроек ПЗ.
Если интересно, вот слегка «причёсанный» вариант, проверен в англоязычной версии с русским MUI.
Код:
Opt('MustDeclareVars', 1)
Opt('SendKeyDelay', 250)    ; для наглядности процесса

Local Const $csTAB          = '{Tab}', _        ; клавиша TAB
            $csPlus         = '{NumPadAdd}', _  ; "+" на цифровом блоке (вкл. чекбокс)
            $csMinus        = '{NumPadSub}'     ; "-" на цифровом блоке (выкл. чекбокс)

; если надо — подставить требуемые параметры
; в принципе, более кошерно считывать их
; из чего-то наподобие .INI-файла, тут дело личного вкуса
;
XPSetTaskbarOpt()
Exit

#cs
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 Настройки Панели задач
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#ce
Func XPSetTaskbarOpt($bLockTB     = False, _  ; зафиксировать Панель Задач (ПЗ)
                     $bAutoHide   = False, _  ; автоматически прятать ПЗ
                     $bKeepOnTop  = True, _   ; ПЗ поверх всех окон
                     $bGroup      = True, _   ; группировать сходные эл-ты ПЗ
                     $bShowQuick  = True, _   ; показывать Панель бустрого запуска (ПБЗ)
                     $bShowClock  = True, _   ; показывать часики в трее
                     $bHideIcons  = False)    ; прятать неактивные иконки в трее

  ; команда для вызова апплета настройки свойств ПЗ и меню "Пуск"
  ;
  Local Const $csRunTBProp    = 'RunDll32.exe shell32.dll,Options_RunDLL 1'

  ; единый регэксп заголовка окна для английского и русского интерфейса
  ;
  Local Const $csTBPropMain   = '[REGEXPTITLE:Taskbar and Start Menu|Свойства панели задач]'

  ; имя контрола с вкладками свойств собственно ПЗ и пускового меню
  ;
  Local Const $csTB_Tabs      = '[CLASS:SysTabControl32; INSTANCE:1]'

  ; имя контрола кнопки Apply свойств ПЗ
  ;
  Local Const $csBtnApplyTB   = '[CLASS:Button; INSTANCE:13]'

  Local $hWndTB     ; хендл окна настройки свойств ПЗ

  Run($csRunTBProp)                         ; вызов апплета настройки свойств ПЗ
  $hWndTB = WinWait($csTBPropMain)          ; дождаться окна с настройками
  WinActivate($hWndTB)                      ; активировать его
  ControlFocus($hWndTB, '', $csTB_Tabs)     ; фокус -> на панель вкладок
  Send('^{Home}')                           ; выбор левой вкладки ("Свойства ПЗ")

  BlockInput(True)
  XPTaskBar_Set($bLockTB)       ; Фиксация ПЗ?
  XPTaskBar_Set($bAutoHide)     ; Автоматически прятать ПЗ?
  XPTaskBar_Set($bKeepOnTop)    ; Поверх всех окон?
  XPTaskBar_Set($bGroup)        ; Группировать похожие?
  XPTaskBar_Set($bShowQuick)    ; Показывать ПБЗ?
  XPTaskBar_Set($bShowClock)    ; Показывать часики?
  XPTaskBar_Set($bHideIcons)    ; Прятать неактивные иконки в трее?

  ; Может так получиться, что кнопка Apply неактивна (например, запустили
  ; скрипт дважды с одинаковыми параметрами). Тогда нефиг на неё давить :-)
  ;
  If ControlCommand($hWndTB, '', $csBtnApplyTB, 'IsEnabled', '') Then
    ;
    ; Apply доступна, можно смело кликать
    ;
    ControlClick($hWndTB, '', $csBtnApplyTB)
  EndIf

  Send('!{F4}')   ; Finita
  WinWaitClose($hWndTB)
  BlockInput(False)
EndFunc

Func XPTaskBar_Set($bKey)
  Send($csTAB)            ; установиться на очередной чекбокс
  If $bKey Then
      Send($csPlus)       ; true  -> включить
    Else
      Send($csMinus)      ; false -> выключить
  EndIf
EndFunc

P.S. Насчёт отключения панели Nero Search ничего сказать не могу, не дружу с этим продуктом
 
Автор
F

Favorite6233

Знающий
Сообщения
21
Репутация
5
Alecsis1
О, отдельное спасибо за команду:
Код:
RunDll32.exe shell32.dll,Options_RunDLL 1
Была мысль вызывать это окно, но быстро не нашёл, как это делается. Заодно и другие параметры можно поменять.
 
A

Alecsis1

Гость
[Автоматизация] Re: [Автоматизация] Как включить/отключить панель Quick Launch (или любую другую)

Sorry, забыл откомментить существенную тонкость:
последовательность вызовов XPTaskBar_Set($bXXX) должна в точности соотвествовать последовательности чекбоксов в окне настройки ПЗ, иначе поимеем феерический облом! ;)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Alecsis1 [?]
последовательность вызовов XPTaskBar_Set($bXXX) должна в точности соотвествовать последовательности чекбоксов в окне настройки ПЗ, иначе поимеем феерический облом!
Здесь не нужно использовать Send. Так будет должно работать и в том случае, если окно не активно или закрыто другим.
Код:
Run('RunDll32.exe shell32.dll,Options_RunDLL 1')

$hWin = WinWait('[Title:Свойства панели задач и меню "Пуск"; Class:#32770]', '', 5) ;у меня такой заголовок
If Not $hWin Then Exit -13
;меняем на противоположные состояния
For $i = 1 To 7
	$iCheck = ControlCommand($hWin, '', '[CLASS:Button; INSTANCE:' & $i & ']', 'IsChecked', '')
	If $iCheck Then
		$sCommand = 'UnCheck'
	Else
		$sCommand = 'Check'
	EndIf
	ControlCommand($hWin, '', '[CLASS:Button; INSTANCE:' & $i & ']', $sCommand, '')
	Sleep(1000)
Next
;возвращаем обратно.
For $i = 1 To 7
	$iCheck = ControlCommand($hWin, '', '[CLASS:Button; INSTANCE:' & $i & ']', 'IsChecked', '')
	If $iCheck Then
		$sCommand = 'UnCheck'
	Else
		$sCommand = 'Check'
	EndIf
	ControlCommand($hWin, '', '[CLASS:Button; INSTANCE:' & $i & ']', $sCommand, '')
	Sleep(1000)
Next

ControlSend($hWin, '', '[CLASS:SysTabControl32; INSTANCE:1]', '^{TAB}')
;меняем на противоположные состояния
$iCheck = ControlCommand($hWin, '', '[CLASS:Button; INSTANCE:1]', 'IsChecked', '')
If $iCheck Then
	$sCommand = 'Check'
Else
	$sCommand = 'UnCheck'
EndIf
ControlCommand($hWin, '', '[CLASS:Button; INSTANCE:2]', $sCommand, '')
Sleep(2000)
;возвращаем обратно.
$iCheck = ControlCommand($hWin, '', '[CLASS:Button; INSTANCE:2]', 'IsChecked', '')
If $iCheck Then
	$sCommand = 'Check'
Else
	$sCommand = 'UnCheck'
EndIf
ControlCommand($hWin, '', '[CLASS:Button; INSTANCE:1]', $sCommand, '')
 
Автор
F

Favorite6233

Знающий
Сообщения
21
Репутация
5
Код:
$iCheck = ControlCommand($hWin, '', '[CLASS:Button; INSTANCE:' & $i & ']', 'IsChecked', '')

Скажите, а CLASS:Button - откуда это стало известно? AutoIt Windows Info этого не показывает. И INSTANCE у элементов тоже показывает совсем не то, которое используется в программе, вернее совсем не показывает.
 

sov44

Новичок
Сообщения
22
Репутация
0
Нашел скрипт на oszone для создания QL. К сожалению скрипт не всегда отрабатывает. OC - Windows 7 Home Premium. Просьба подкорректировать скрип.
Код:
OPT("TrayIconDebug", 1)
Opt("WinDetectHiddenText", 0)
Opt("WinTextMatchMode", 2)
Opt("TrayIconHide", 0)
HotKeySet("{F1}", "OnF1")
Sleep(100)
If $CMDLINE[0] Then
	For $I = 1 To $CMDLINE[0]
		Switch $CMDLINE[$I]
			Case "/?"
				MsgBox(262144, "Help", "Switchless Commands: /NOPIN /TGL /TSI /AUTOTRAY /LBS3 /EXPLORER")
				Exit
			Case "/NOPIN"
				RegWrite("HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Explorer", "TaskbarNoPinnedList", "REG_DWORD", "1")
			Case "/TGL"
				RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "TaskbarGlomLevel", "REG_DWORD", "2")
			Case "/TSI"
				RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "TaskbarSmallIcons", "REG_DWORD", "1")
			Case "/AUTOTRAY"
				RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer", "EnableAutoTray", "REG_DWORD", "0")
			Case "/LBS3"
				RegWrite("HKEY_CURRENT_USER\Software\Microsoft\CTF\LangBar", "ShowStatus", "REG_DWORD", "3")
			Case "/EXPLORER"
				ProcessClose("explorer.exe")
		EndSwitch
	Next
EndIf
If Not ProcessWait("explorer.exe", 5) Then Run(@WindowsDir & "\explorer.exe")
WinWait("[CLASS:Shell_TrayWnd]")
Sleep(2000)
TrayTip("Quick Launch Classic 7", "Я работаю - ничего не трогай!!!", 30, 2)
MsgBox(4095, "Running.", "Quick Launch Classic 7", 1)
Sleep(10000)
$TASKBARSIZEMOVE = RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "TaskbarSizeMove")
If $TASKBARSIZEMOVE = 1 Then
	Do
		ProcessClose("explorer.exe")
	Until Not ProcessExists("explorer.exe")
	RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "TaskbarSizeMove", "REG_DWORD", "0")
	If Not ProcessWait("explorer.exe", 5) Then Run(@WindowsDir & "\explorer.exe")
	WinWait("[CLASS:Shell_TrayWnd]")
	Sleep(2000)
EndIf
$TRAY = ControlGetPos("[CLASS:Shell_TrayWnd]", "", "[CLASS:CiceroUIWndFrame; TEXT:TF_FloatingLangBar_WndTitle]")
If Not @error Then
	Call("_DISABLELANGBAR")
	$QLA = WinGetText("[CLASS:Shell_TrayWnd]", "")
	If StringInStr($QLA, "Quick Launch") Then
		MouseClick("right", 0, @DesktopHeight)
		Send("{DOWN}{RIGHT}{UP 2}{ENTER}")
	EndIf
EndIf
$QLA = WinGetText("[CLASS:Shell_TrayWnd]", "")
If StringInStr($QLA, "Quick Launch") Then
	MouseClick("right", 0, @DesktopHeight)
	Send("{DOWN}{RIGHT}{UP 2}{ENTER}")
EndIf
$CLEARDESKTOP = ControlGetPos("[CLASS:Shell_TrayWnd]", "", "[CLASS:TrayShowDesktopButtonWClass]")
$TASKBAR_CENTERHEIGHT = @DesktopHeight - ($CLEARDESKTOP[3] / 2)
MouseClick("left", $CLEARDESKTOP[0] - 0, $TASKBAR_CENTERHEIGHT, 1, 10)
_TOGGLETASKBARLOCK()
$TRAY = ControlGetPos("[CLASS:Shell_TrayWnd]", "", "[CLASS:CiceroUIWndFrame; TEXT:TF_FloatingLangBar_WndTitle]")
If Not @error Then
	Call("_DISABLELANGBAR")
EndIf
$PATH = "Shell:Quick Launch"
$TOOLBARTEXT = "{DOWN 3}{ENTER}"
$TOOLBARTITLE = "{DOWN 4}{ENTER}"
$TRAY = ControlGetPos("[CLASS:Shell_TrayWnd]", "", "[CLASS:ReBarWindow32]")
$LANG = RegRead("HKEY_CURRENT_USER\Control Panel\Desktop", "PreferredUILanguages")
If @error = 0 Then
Else
	$LANG = RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\MuiCached", "MachinePreferredUILanguages")
EndIf
Select
	Case $LANG = "en-US"
		$TITLE = "New Toolbar - Choose a folder"
		$PROGRAMS = "[CLASS:MSTaskListWClass; TEXT:Running applications]"
	Case $LANG = "fr-FR"
		$TITLE = "Nouvelle barre dРІР‚в„ўoutilsР’В -Р’В Choisir un dossier"
		$PROGRAMS = "[CLASS:MSTaskListWClass; TEXT:Applications en cours dРІР‚в„ўexР в„–cution]"
	Case $LANG = "nl-NL"
		$TITLE = "Nieuwe werkbalk - Selecteer een map"
		$PROGRAMS = "[CLASS:MSTaskListWClass; TEXT:Actieve toepassingen]"
	Case $LANG = "da-DK"
		$TITLE = "Ny vжrktшjslinje - vжlg en mappe"
		$PROGRAMS = "[CLASS:MSTaskListWClass; TEXT:Programmer, der kС€rer]"
	Case $LANG = "se-SE"
		$TITLE = "Nytt verktygsfР Т‘lt - vР Т‘lj en mapp"
		$PROGRAMS = "[CLASS:MSTaskListWClass; TEXT:Program som kцrs]"
	Case $LANG = "nb-NO"
		$TITLE = "Ny verktС€ylinje - velg en mappe"
		$PROGRAMS = "[CLASS:MSTaskListWClass; TEXT:KjС€rer programmer]"
	Case $LANG = "de-DE"
		$TITLE = "Neue Symbolleiste - Ordner auswР Т‘hlen"
		$PROGRAMS = "[CLASS:MSTaskListWClass; TEXT:AusgefРЎРЉhrte Anwendungen]"
	Case $LANG = "ru-RU"
		$TITLE = "Новая панель инструментов - Выбор папки"
		$PROGRAMS = "[CLASS:MSTaskListWClass; TEXT:Выполнение приложений]"
EndSelect
_TASKTOOLBARWIN7("Shell:Quick Launch")
While 1
	Sleep(100)
	$QUICKLAUNCH = ControlGetPos("[CLASS:Shell_TrayWnd]", "", "[CLASS:ToolbarWindow32; TEXT:Quick Launch]")
	If Not @error Then ExitLoop
WEnd
$TASKBAR_CENTERHEIGHT = @DesktopHeight - ($QUICKLAUNCH[3] / 2)
Sleep(100)
MouseClick("right", $QUICKLAUNCH[0] - 5, $TASKBAR_CENTERHEIGHT, 1, 0)
Send($TOOLBARTEXT)
Sleep(100)
$TASKBAR_CENTERHEIGHT = @DesktopHeight - ($QUICKLAUNCH[3] / 2)
Sleep(100)
MouseClick("right", $QUICKLAUNCH[0] - 5, $TASKBAR_CENTERHEIGHT, 1, 0)
Send($TOOLBARTITLE)
Sleep(1000)
$QUICKLAUNCH = ControlGetPos("[CLASS:Shell_TrayWnd]", "", "[CLASS:ToolbarWindow32; TEXT:Quick Launch]")
MouseClickDrag("left", $QUICKLAUNCH[0] - 10, $TASKBAR_CENTERHEIGHT, $TRAY[0] + 5, $TASKBAR_CENTERHEIGHT, 40)
$CURRENTAPPS = ControlGetPos("[CLASS:Shell_TrayWnd]", "", $PROGRAMS)
MouseClickDrag("left", $CURRENTAPPS[0] - 10, $TASKBAR_CENTERHEIGHT, $TRAY[0] + 150, $TASKBAR_CENTERHEIGHT, 40)
_TOGGLETASKBARLOCK()
$CLEARDESKTOP = ControlGetPos("[CLASS:Shell_TrayWnd]", "", "[CLASS:TrayShowDesktopButtonWClass]")
$TASKBAR_CENTERHEIGHT = @DesktopHeight - ($CLEARDESKTOP[3] / 2)
MouseClick("left", $CLEARDESKTOP[0] - 0, $TASKBAR_CENTERHEIGHT, 1, 10)

Func _DISABLELANGBAR()
	MouseClick("right", 0, @DesktopHeight)
	Send("{DOWN}{RIGHT}{UP 2}{ENTER}")
EndFunc


Func _TASKTOOLBARWIN7($PATH)
	MouseClick("right", 0, @DesktopHeight)
	Send("{DOWN}{RIGHT}{UP}{ENTER}")
	WinActive($TITLE)
	Sleep(1000)
	ControlSetText($TITLE, "", "Edit1", $PATH)
	Sleep(1000)
	ControlClick($TITLE, "", "Button1")
EndFunc


Func _TOGGLETASKBARLOCK()
	MouseClick("right", 0, @DesktopHeight)
	Send("{UP 2}{ENTER}")
EndFunc

BlockInput(1)
$MP = MouseGetPos()
$WP = WinGetPos("TF_FloatingLangBar_WndTitle")
MouseClick("left", $WP[0] + $WP[2] - 10, $WP[1] + 10, 1, 0)
MouseMove($MP[0], $MP[1], 0)
BlockInput(0)
FileDelete(@AppDataDir & "\Microsoft\Internet Explorer\Quick Launch\Shows Desktop.lnk")
FileDelete(@AppDataDir & "\Microsoft\Internet Explorer\Quick Launch\Window Switcher.lnk")
DirRemove(@AppDataDir & "\Microsoft\Internet Explorer\Quick Launch\User Pinned", 1)
RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband", "Favorites", "REG_BINARY", "ff")
RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband", "FavoritesResolve")
$LANGBAR = RegRead("HKEY_CURRENT_USER\Software\Microsoft\CTF\LangBar", "ShowStatus")
Select
	Case $LANGBAR = "0"
		RegWrite("HKEY_CURRENT_USER\Software\Microsoft\CTF\LangBar", "ShowStatus", "REG_DWORD", "4")
EndSelect

Func ONF1()
	Exit
EndFunc

TrayTip("Quick Launch Classic 7", "Наслаждайся!", 30, 2)
MsgBox(4095, "Running.", "Quick Launch Classic 7", 1)
Sleep(2000)
 
Верх