Войти

Показать полную графическую версию : [архив - Часть 2] AutoIt скрипты


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [25] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

Maza Faka
25-09-2007, 16:27
adima
В настройках радмина есть опция скрытия иконки.

SAOPP
25-09-2007, 16:30
Creat0R, вот меня мысль посетила, к выше опубликованному скрипту можно привинтить (если такое возможно путём AutoIt'а) таймер, который запустит сам скрипт на выполнение через заданный промежуток времени?

Например: запускаю я скрипт, а он через минуту только выполнит своё назначение, т.е. задержка перед выполнением...

Creat0R
25-09-2007, 16:41
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) ;будет спать одну минуту ;)
Почитай справку, там много интересного.

SAOPP
25-09-2007, 22:30
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)

Creat0R
26-09-2007, 01:06
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")

Creat0R
26-09-2007, 02:23
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

SAOPP
26-09-2007, 10:10
Creat0R, странно, но по каким то причинам не хочет нажимать на кнопочки окна 'Языковая панель', пока не смог разобраться :(

Creat0R
26-09-2007, 10:25
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. На
других разрешения не пробовал...

SAOPP
26-09-2007, 11:34
Creat0R, всё тоже самое что и в скрипте, но не хочет нажимать ничего :(

Creat0R
26-09-2007, 12:36
TERMINAL,
Держи-если просто хочешь отключить отображение языковой панели
Этот скрипт не очень практичен, и не надёжен, если у SAOPP не сработал скрипт по проще, то этот точно не сработает.

P.S
Юзай теги [Cоde][/Cоde] ;)

TERMINAL
26-09-2007, 12:40
Creat0R, должен сработать, там хоть сама працедура не всегда срабатывает - поэтому мне скрипт побольше сделать чтобы обходил он ошибки. Вроде проверял раз 20 то пока он работает...

Creat0R
26-09-2007, 12:46
SAOPP,
не хочет нажимать ничего
Очень странно, может есть уже открыто подобное окошео где то? перезапустить систему пробовал?

TERMINAL,
проверял раз 20 то пока он работает...
У тебя работает ;)

Creat0R
26-09-2007, 13:08
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)

SAOPP
27-09-2007, 01:41
Creat0R, что бы во время выполнения скрипта был другой курсор? :)

Creat0R
27-09-2007, 02:38
SAOPP,
Это для пипетки, вот тут (http://forum.oszone.net/thread-60616-147.html#post647673) мы обсуждали эту тему ;)

amel27
27-09-2007, 06:35
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

Creat0R
27-09-2007, 07:26
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)

amel27
27-09-2007, 08:35
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