-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
как сделать клик на иконке в tray
Не могу сообразить как сделать клик на иконке в tray
|
Вложений: 1
Можно по 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) пункт "Обновить ...", иконка при этом, если очередь печати пустая, исчезает.
Может ее убрать можно как то и иначе, не знаю, пока нашел только способ с "Обновить ..." - в общем надо как то её убрать из трея.
|
Я новичок в данной программе, она мне требуется лишь для того, чтоб сделать три клика в трее, т.е. запустить программу. При загрузке компьютера.
как это возможно сделать?
Подскажите какие значения надо изменить, просто нет времени вникать во всю программу.
|
код работает но если появляется новая иконка,кликает мимо.
хотелось бы чтоб работало корректнее
|
суровый, а если вызвать _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
А почему у меня синтаксис не подсвечивается ? :)
|
Цитата:
Цитата суровый
А почему у меня синтаксис не подсвечивается ? »
|
Ни у кого не подсвечивается ;). Но некоторые предварительно раскрашивают. Не вручную, конечно.
|
:)
прикольно
Блин,всё это конечно хорошо но почему иконка кликается всегда левая
хоть что пиши в
Цитата:
Цитата суровый
$Pid = ProcessExists("qip.exe") »
|
любое приложение имеющееся в трее,всё ранво кликает левую иконку
как вывести отладочную информацию,например значение этой функции в консоль или ещё куда.
Мозг устал размышлять по текущей ситуации.
|
_SysTrayIconIndex у меня возвращает постоянно -1, с любым процессом.
читать дальше »
суровый
На офсайте тема предложили _SysTrayIconPos (или это твой пост?). Кстати в русской справке функции эти есть. Раскраска кода - альтернатива.
|
да мая поста
тут что-то слишком тихо )
на счёт _SysTrayIconPos там итак есть эта функция в примере
но я взял старый пример может в новых версиях не работает или там lokal тип мешает в общем я наковырял какой-то странный код
отсюда:
http://autoit-script.ru/index.php/to....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)
|
а я думал что за закорючка в хелпе непонятная и убрал :)
благодарю
|
в общем сделал
Код:
#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 не будет быстрее и проще.
|
суровый, посмотри это. У меня кликнул в трее без проблем.
|
да пока работает ....
кривова-то конечно реализовано,я то хотел как бы названия пунктов указать чтоб на случай смены пунктов местами в меню всё равно работало.
Но всё равно ,благодарю за отзывчивость,буду смотреть .
|
Время: 15:06.
© OSzone.net 2001-