Показать полную графическую версию : [архив - Часть 2] AutoIt скрипты
Maza Faka
25-09-2007, 16:27
adima
В настройках радмина есть опция скрытия иконки.
Creat0R, вот меня мысль посетила, к выше опубликованному скрипту можно привинтить (если такое возможно путём AutoIt'а) таймер, который запустит сам скрипт на выполнение через заданный промежуток времени?
Например: запускаю я скрипт, а он через минуту только выполнит своё назначение, т.е. задержка перед выполнением...
adima,
как убрать иконку из tray
На оф. форуме выкладывали библиотеку Systray_UDF (http://www.autoitscript.com/forum/index.php?showtopic=13704), там есть функции для скрытия иконки по имени процесса, есть также и по заголовку окна, но у меня лично оно не работает, только по имени процесса...
Вот пример:
#include "SysTray_UDF.au3"
$ProcessName = "AutoIt3.exe"
$TrayIconIndex = _SysTrayIconIndex($ProcessName)
MsgBox(0, "", "Сейчас будет спрятана иконка AutoIt'а", 3)
_SysTrayIconVisible(1, $TrayIconIndex)
MsgBox(0, "", "Теперь вернём иконку AutoIt'а ;)", 3)
_SysTrayIconVisible(0, $TrayIconIndex)
Sleep(2000)
All
Если у кого-то получится сделать функцию для скрытия иконки по PID, буду безмерно благодарен. В той библиотеке есть вроде подобные приминения, но они не работают у меня :(.
SAOPP, запускаю я скрипт, а он через минуту только выполнит своё назначение, т.е. задержка перед выполнением...
А чем обычная пауза не подходит? Sleep(1000 * 60) ;будет спать одну минуту ;)
Почитай справку, там много интересного.
Creat0R, последний вопрос, тот же самый скрипт (как это не странно ;)), но(!) - возможно ли кликнуть на индикаторе языковой панели Windows? И выбрать соответствующий пункт:
http://img211.imageshack.us/img211/5097/77249632td1.png
Но после выбора, появляется окно подтверждения данного действия - если возможно всё ДО этого окна, возможность и в этом окне ответить есть? :)
http://img211.imageshack.us/img211/1496/20931931ty4.th.png (http://img211.imageshack.us/my.php?image=20931931ty4.png)
SAOPP,
Тебе в помощь инструмент Au3Info.exe (он входит в состав AutoIt пакета), когда его запускаешь, и наводишь мышку над элементами, то отображаются их классы/заголовки/текст и т.п... вот чтобы кликнуть по этой панели, узнаёшь её класс, и кликаешь ;):
$TrayTitle = "[CLASS:Shell_TrayWnd]"
ControlClick($TrayTitle, "", "CiceroUIWndFrame1", "Right") ;CiceroUIWndFrame1 это и есть класс языковой панели.
Send("{UP}")
Send("{ENTER}")
;Следующую строчку раскоментировать в случае если нужно отметить птичку "Больше не показывать это сообщение"
;ControlClick("[Class:#32770; Title:Языковая панель]", "Button1")
ControlClick("[Class:#32770; Title:Языковая панель]", "", "Button2")
Diamond
А вот и решение для установки курсора, и потом возвращение оригинального (используемого юзером)...
(По мативам примера от eltorro тут (http://www.autoitscript.com/forum/index.php?s=&showtopic=25898&view=findpost&p=409178))
Global Const $OCR_APPSTARTING = 32650
Global Const $OCR_NORMAL = 32512
Global Const $OCR_CROSS = 32515
Global Const $OCR_HAND = 32649
Global Const $OCR_IBEAM = 32513
Global Const $OCR_NO = 32648
Global Const $OCR_SIZEALL = 32646
Global Const $OCR_SIZENESW = 32643
Global Const $OCR_SIZENS = 32645
Global Const $OCR_SIZENWSE = 32642
Global Const $OCR_SIZEWE = 32644
Global Const $OCR_UP = 32516
Global Const $OCR_WAIT = 32514
$hWaitCur = _LoadCursor($OCR_CROSS)
_SetSystemCursor($hWaitCur, $OCR_NORMAL)
Sleep(2000)
_SetSystemCursor($hWaitCur, $OCR_NORMAL)
$hWaitCur = 0
Func _LoadCursor($iCursor)
Return SetError(@error,@extended ,_API(DllCall("user32.dll", "int", "LoadCursorA", "hwnd", 0, "int", $iCursor)))
EndFunc ;==>_LoadCursor
Func _SetSystemCursor($hCursor, $iCursor)
Return SetError(@error,@extended ,_API(DllCall("user32.dll", "int" ,"SetSystemCursor","int",$hCursor,"int",$iCursor)))
EndFunc
Func _API($v_ret)
Local $err = @error
Local $ext = @extended
If Not $err Then
If IsArray($v_ret) Then
Return $v_ret[0]
Else
Return $v_ret
EndIf
EndIf
Return SetError($err, $ext, 0)
EndFunc ;==>_API
Creat0R, странно, но по каким то причинам не хочет нажимать на кнопочки окна 'Языковая панель', пока не смог разобраться :(
SAOPP,
по каким то причинам не хочет нажимать на кнопочки окна 'Языковая панель'
Запусти это окно, запусти Au3Info, наведи курсор мышки над нужно кнопкой, и посмотри что написано в Au3Info тут:
http://img217.imageshack.us/img217/9599/au3infousageal3.th.png (http://img217.imageshack.us/my.php?image=au3infousageal3.png)
TERMINAL
26-09-2007, 11:31
ДSAOPP, Держи-если просто хочешь отключить отображение языковой панели,
Run ("RunDll32.exe shell32.dll,Control_RunDLL intl.cpl,,1")
For $i = 0 To 1000
If WinWait("Язык и региональные стандарты","", 1) Then
ControlClick("Язык и региональные стандарты","","Button2")
EndIf
If WinWait("Языки и службы текстового ввода","", 1) Then
ControlClick("Языки и службы текстового ввода","","Button8")
EndIf
If WinWait("Добавление языка ввода","&Раскладка клавиатуры или мето", 1) Then
ControlClick("Добавление языка ввода","&Раскладка клавиатуры или мето","Button2")
WinWait("Языки и службы текстового ввода","Выберите один из установленных")
ControlClick("Языки и службы текстового ввода","Выберите один из установленных","Button11")
WinWait("Язык и региональные стандарты","Дополнительная языковая поддер")
ControlClick("Язык и региональные стандарты","Дополнительная языковая поддер","Button7")
Run ("RunDll32.exe shell32.dll,Control_RunDLL intl.cpl,,1")
EndIf
If WinWait("Параметры языковой панели","О&тображать текстовые метки на", 1) Then
ControlClick("Параметры языковой панели","О&тображать текстовые метки на","Button2")
ControlClick("Параметры языковой панели","О&тображать текстовые метки на","Button6")
WinWait("Языки и службы текстового ввода","Выберите один из установленных")
ControlClick("Языки и службы текстового ввода","Выберите один из установленных","Button10")
WinWait("Язык и региональные стандарты","Дополнительная языковая поддер")
ControlClick("Язык и региональные стандарты","Дополнительная языковая поддер","Button6")
Exit
EndIf
Next
а по другому ,помоему, способов больше нет если только мышь заставить двигать как тебе надо, но при условии что данный компонент будет находиться в одном и том же месте. Это я привожу тут ниже
Opt("WinWaitDelay",100)
Opt("WinTitleMatchMode",4)
Opt("WinDetectHiddenText",1)
Opt("MouseCoordMode",0)
WinWait("classname=Shell_TrayWnd","TF_FloatingLangBar_W")
If Not WinActive("classname=Shell_TrayWnd","TF_FloatingLangBar_W") Then WinActivate("classname=Shell_TrayWnd","TF_FloatingLangBar_W")
WinWaitActive("classname=Shell_TrayWnd","TF_FloatingLangBar_W")
MouseMove(992,12)
MouseDown("right")
MouseUp("right")
MouseMove(899,-2)
MouseDown("left")
MouseUp("left")
MouseMove(1005,15)
MouseDown("right")
MouseUp("right")
MouseMove(908,-160)
MouseDown("left")
MouseUp("left")
Низнаю, правильно будет работать или нет, но я делал это на разрешении монитора 1024*768. На
других разрешения не пробовал...
Creat0R, всё тоже самое что и в скрипте, но не хочет нажимать ничего :(
TERMINAL,
Держи-если просто хочешь отключить отображение языковой панели
Этот скрипт не очень практичен, и не надёжен, если у SAOPP не сработал скрипт по проще, то этот точно не сработает.
P.S
Юзай теги [Cоde][/Cоde] ;)
TERMINAL
26-09-2007, 12:40
Creat0R, должен сработать, там хоть сама працедура не всегда срабатывает - поэтому мне скрипт побольше сделать чтобы обходил он ошибки. Вроде проверял раз 20 то пока он работает...
SAOPP,
не хочет нажимать ничего
Очень странно, может есть уже открыто подобное окошео где то? перезапустить систему пробовал?
TERMINAL,
проверял раз 20 то пока он работает...
У тебя работает ;)
Diamond
Как это я раньше не подумал, ведь текущий курсор можно брать с реестра :idea: ...
Local $Old_EES = Opt("ExpandEnvStrings", 1)
Local $OldCursor = RegRead("HKEY_CURRENT_USER\Control Panel\Cursors", "Arrow")
_SetCursor(@WindowsDir & "\cursors\cross_m.cur", 32512)
_SetCursor($OldCursor, 32512)
If @error Then _SetCursor(@WindowsDir & "\cursors\3dwarro.cur", 32512)
Opt("ExpandEnvStrings", $Old_EES)
Creat0R, что бы во время выполнения скрипта был другой курсор? :)
SAOPP,
Это для пипетки, вот тут (http://forum.oszone.net/thread-60616-147.html#post647673) мы обсуждали эту тему ;)
Creat0R, у кого-то получится сделать функцию для скрытия иконки по PID, буду безмерно благодаренесли немного подправить UDF _SysTrayIconIndex(), то PID можно будет передавать наравне с именем:Func _SysTrayIconIndex($name, $mode=0)
Local $index = -1
Local $process
Local $i
If $mode < 0 or $mode > 2 or Not IsInt($mode) Then
SetError(1)
return -1
EndIf
If $mode = 0 Then
If IsString($name) Then
$process = _SysTrayIconProcesses()
Else
$process = _SysTrayIconPids()
EndIf
Else
$process = _SysTrayIconTitles()
EndIf
For $i = 0 to Ubound($process)-1
If $process[$i] = $name Then
$index = $i
EndIf
Next
return $index
EndFunc
amel27,
если немного подправить UDF _SysTrayIconIndex(), то PID можно будет передавать наравне с именем:
Я это (почти) пробовал, но проблема не в этой функции, а в _SysTrayIconPids() - Если запущено приложение дважды (т.е две одинаковые иконки теперь в трее), то в массив попадает неверный порядок идентификаторов, и соответственно скрывается не всегда нужная иконка.. я уже как только не пробовал переделывать эти функии, но у меня не вышло :(, но в процессе написал функцию _SysTrayIconIndexArr() - возвращает массив всех индексов одного и того же процесса (имени процесса), чтобы скрыть все иконки (это лучше чем скрыть не ту иконку :)) - Могу выложить если нужно.
Maza Faka
27-09-2007, 08:14
Creat0R
у кого-то получится сделать функцию для скрытия иконки по PID, буду безмерно благодарен
Так?:
#include <SysTray_UDF.au3>
$pid = ProcessExists("server.exe")
$index = _SysTrayIconIndex($pid)
MsgBox(64, "Hide", "Now hide server.exe icon")
_SysTrayIconVisible(1, $index)
MsgBox(64, "Visible", "Now visible server.exe icon")
_SysTrayIconVisible(0, $index)
Creat0R
проблема не в этой функции, а в _SysTrayIconPids() - Если запущено приложение дважды (т.е две одинаковые иконки теперь в трее), то в массив попадает неверный порядок идентификаторовточно, так как _SysTrayIconPids() возвращает PID (в основном) по имени процесса, может эту UDF тоже подправить и обрабатывать ВСЕ иконки как безымянные, т.е. по индексу?Func _SysTrayIconPids()
Local $i
Local $titles = _SysTrayIconTitles()
Local $processes[UBound($titles)]
Local $ret
For $i=0 to Ubound($titles)-1
$ret = DLLCall("user32.dll","int","GetWindowThreadProcessId", "int", _SysTrayIconHandle($i), "int_ptr", -1)
If Not @error Then $processes[$i] = $ret[2]
Next
Return $processes
EndFunc
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.