Показать полную графическую версию : [решено] как сделать клик на иконке в tray
Не могу сообразить как сделать клик на иконке в tray
Можно по PID:
#NoTrayIcon
#include <SysTray_UDF.au3>
;
$Pid = ProcessExists("Opera.exe")
If Not $Pid Then
MsgBox(16, "Error", "This process not exists")
Exit
EndIf
$Index = _SysTrayIconIndex($Pid)
If @error Then
MsgBox(16, "Error", "This process not have tray icon")
Exit
EndIf
_SysTrayIconClick($Index, "Right")
If @error Then
MsgBox(16, "Error", "There was an error to click on the icon")
Exit
EndIf
Func _SysTrayIconClick($iIndex, $sButton="Main")
Local $TrayIcon_Pos = _SysTrayIconPos($iIndex)
If Not IsArray($TrayIcon_Pos) Then Return SetError(1, 0, 0)
Local $Old_Mouse_Pos = MouseGetPos()
MouseClick($sButton, $TrayIcon_Pos[0], $TrayIcon_Pos[1], 1, 0)
MouseMove($Old_Mouse_Pos[0], $Old_Mouse_Pos[1], 0)
EndFunc
Рабочий SysTray_UDF.au3 (для последней версиии аутоита) прикрепил к сообщению.
А как при этом выбрать пункт из контекстного меню?
Creat0R, с помощью вашей программы контекстное меню Диспетчера очереди печати (spoolsv.exe) выскакивает, мне теперь нужно выбрать в нем пункт "Обновить ...".
Мне это требуется после программной очистки очереди печати, чтобы иконка не маячила в трее.
Если выбрать в контекстном меню Диспетчера очереди печати (spoolsv.exe) пункт "Обновить ...", иконка при этом, если очередь печати пустая, исчезает.
Может ее убрать можно как то и иначе, не знаю, пока нашел только способ с "Обновить ..." - в общем надо как то её убрать из трея.
pashkovka
01-03-2011, 18:02
Я новичок в данной программе, она мне требуется лишь для того, чтоб сделать три клика в трее, т.е. запустить программу. При загрузке компьютера.
как это возможно сделать?
Подскажите какие значения надо изменить, просто нет времени вникать во всю программу.
код работает но если появляется новая иконка,кликает мимо.
хотелось бы чтоб работало корректнее
суровый, а если вызвать _SysTrayIconIndex перед SysTrayIconClick?
в коде так и есть
вообще странно конечно нафиг тогда проверка присутствия приложения в трее если он всё время кликает самую левую иконку
вот один в один только имя файла моё
#NoTrayIcon
#include <SysTray_UDF.au3>
;
$Pid = ProcessExists("advor.exe")
If Not $Pid Then
MsgBox(16, "Error", "This process not exist")
Exit
EndIf
$Index = _SysTrayIconIndex($Pid)
If @error Then
MsgBox(16, "Error", "This process not have tray icon")
Exit
EndIf
;_SysTrayIconIndex($Pid) // эта строчке никак не влияет
_SysTrayIconClick($Index, "Right")
If @error Then
MsgBox(16, "Error", "There was an error to click on the icon")
Exit
EndIf
Func _SysTrayIconClick($iIndex, $sButton="Main")
Local $TrayIcon_Pos = _SysTrayIconPos($iIndex)
If Not IsArray($TrayIcon_Pos) Then Return SetError(1, 0, 0)
Local $Old_Mouse_Pos = MouseGetPos()
MouseClick($sButton, $TrayIcon_Pos[0], $TrayIcon_Pos[1], 1, 0)
MouseMove($Old_Mouse_Pos[0], $Old_Mouse_Pos[1], 0)
EndFunc
А почему у меня синтаксис не подсвечивается ? :)
А почему у меня синтаксис не подсвечивается ? »
Ни у кого не подсвечивается ;). Но некоторые предварительно раскрашивают. Не вручную, конечно.
madmasles
18-07-2012, 21:31
А почему у меня синтаксис не подсвечивается ? »Au3ToPost - Инструмент для расскраски AutoIt-кода (http://autoit-script.ru/index.php/topic,117.0.html)
:)
прикольно
Блин,всё это конечно хорошо но почему иконка кликается всегда левая
хоть что пиши в
$Pid = ProcessExists("qip.exe") »
любое приложение имеющееся в трее,всё ранво кликает левую иконку
_SysTrayIconPos »
как вывести отладочную информацию,например значение этой функции в консоль или ещё куда.
Мозг устал размышлять по текущей ситуации.
_SysTrayIconIndex у меня возвращает постоянно -1, с любым процессом.
суровый
На офсайте тема (http://www.autoitscript.com/forum/topic/142619-click-only-left-trey-iconwhy/) предложили _SysTrayIconPos (или это твой пост?). Кстати в русской справке функции эти есть. Раскраска кода - альтернатива (http://azjio.ucoz.ru/load/vsjo_dlja_autoit3/skompilirovannye_skripty/converter_au3_to_bbcode/4-1-0-49).
да мая поста
тут что-то слишком тихо )
на счёт _SysTrayIconPos там итак есть эта функция в примере
но я взял старый пример может в новых версиях не работает или там lokal тип мешает в общем я наковырял какой-то странный код
отсюда:
http://autoit-script.ru/index.php/topic,3202.msg23316.html#msg23316
он правда не рабочий ,тоже по старости.
Переделал.
Вот теперь работает
---------
А раскраской да надо заняться для разнообразия.
#NoTrayIcon
#include <SysTray_UDF.au3>
$var1="AdvOR.exe"; имя процесса
ConsoleWrite("var1="& $var1 & " ")
$var2=0
$var3=1
$var4=_SysTrayIconIndex($var1)
$var5=_SysTrayIconPos($var4)
ConsoleWrite("var5="& $var5 & " ")
MouseClick("right", $var5[0]+2,$var5[1]+2,1,0)
но мая не понимать как теперь кликнуть по определённому пункту
и как при выводе в консоль сделать перевод строки.
и как при выводе в консоль сделать перевод строки. »
ConsoleWrite("var5="& $var5 & " " & @CrLf)
а я думал что за закорючка в хелпе непонятная и убрал :)
благодарю
что за закорючка в хелпе непонятная »
Справка AutoIt3: Макросы, связанные с AutoIt (http://autoit-script.ru/autoit3_docs/macros/AutoItRelated.htm)
в общем сделал
#NoTrayIcon
#include <SysTray_UDF.au3>
$var1="AdvOR.exe"; имя процесса
ConsoleWrite("var1="& $var1 & " ")
$var2=0
$var3=1
$var4=_SysTrayIconIndex($var1)
$var5=_SysTrayIconPos($var4)
ConsoleWrite("var5="& $var5 & " ")
MouseClick("right", $var5[0]+2,$var5[1]+2,1,0)
WinWait("[class:#32768]") ; окно меню
Send("{DOWN 5}") ; выбор 5-го сверху пункта ("New identity")
Send("{ENTER}") ; выполнение пункта( жмём ентер)
WinWait("[class:#32770]") ; окно готовности
Send("{ENTER}") ; выполнение пункта
несколько строчек вылились в ужасные 240 КИЛОБАЙТ!!!
мон поражён!
несколько строчек вылились в ужасные 240 КИЛОБАЙТ!!!
мон поражён! »
Вас не удивляет, что для исполнения некоторых программ, размером в десяток-другой килобайт, требуется многомегабайтный ,Net Framework? Или что для большинства программ, не слинкованных статически с Run-Time библиотеками, требуется этот самый C++ 20xx Run-Time Library?!
Напишите десять тысяч строк кода. Скомпилируйте. Получите немногим больший результат: основную часть этих килобайт занимает сам интерпретатор AutoIt.
P.S. При наличии установленного AutoIT можно исполнять скрипты и без компиляции.
ну так почти весь на winapi построен наверно AutoIt
так что всё равно много.
Впрочем тут главное простота )))
Хотя два дня ковырялся с тремя кликами.
На си можно было быстрее сделать возможно или на делфи.
Но гораздо проче скачать AutoIt вместо них,даже портабельных.
На си можно было быстрее сделать возможно или на делфи. »
Нет, три клика на C или Delphi не будет быстрее и проще.
суровый, посмотри это (http://www.autoitscript.com/forum/topic/63397-mouse-click-on-item-in-windows-system-tray/). У меня кликнул в трее без проблем.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.