PDA

Показать полную графическую версию : [решено] как сделать клик на иконке в tray


Страниц : [1] 2

adima
12-02-2009, 21:11
Не могу сообразить как сделать клик на иконке в tray

Creat0R
13-02-2009, 07:01
Можно по 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 (для последней версиии аутоита) прикрепил к сообщению.

kuzyaka
13-03-2010, 13:36
А как при этом выбрать пункт из контекстного меню?

Creat0R, с помощью вашей программы контекстное меню Диспетчера очереди печати (spoolsv.exe) выскакивает, мне теперь нужно выбрать в нем пункт "Обновить ...".

Мне это требуется после программной очистки очереди печати, чтобы иконка не маячила в трее.

Если выбрать в контекстном меню Диспетчера очереди печати (spoolsv.exe) пункт "Обновить ...", иконка при этом, если очередь печати пустая, исчезает.

Может ее убрать можно как то и иначе, не знаю, пока нашел только способ с "Обновить ..." - в общем надо как то её убрать из трея.

pashkovka
01-03-2011, 18:02
Я новичок в данной программе, она мне требуется лишь для того, чтоб сделать три клика в трее, т.е. запустить программу. При загрузке компьютера.

как это возможно сделать?
Подскажите какие значения надо изменить, просто нет времени вникать во всю программу.

суровый
18-07-2012, 15:44
код работает но если появляется новая иконка,кликает мимо.

хотелось бы чтоб работало корректнее

AZJIO
18-07-2012, 16:52
суровый, а если вызвать _SysTrayIconIndex перед SysTrayIconClick?

суровый
18-07-2012, 18:57
в коде так и есть
вообще странно конечно нафиг тогда проверка присутствия приложения в трее если он всё время кликает самую левую иконку

вот один в один только имя файла моё


#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


А почему у меня синтаксис не подсвечивается ? :)

Iska
18-07-2012, 20:28
А почему у меня синтаксис не подсвечивается ? »
Ни у кого не подсвечивается ;). Но некоторые предварительно раскрашивают. Не вручную, конечно.

madmasles
18-07-2012, 21:31
А почему у меня синтаксис не подсвечивается ? »Au3ToPost - Инструмент для расскраски AutoIt-кода (http://autoit-script.ru/index.php/topic,117.0.html)

суровый
18-07-2012, 23:36
:)
прикольно
Блин,всё это конечно хорошо но почему иконка кликается всегда левая
хоть что пиши в
$Pid = ProcessExists("qip.exe") »

любое приложение имеющееся в трее,всё ранво кликает левую иконку

_SysTrayIconPos »
как вывести отладочную информацию,например значение этой функции в консоль или ещё куда.
Мозг устал размышлять по текущей ситуации.

AZJIO
20-07-2012, 19:54
_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).

суровый
21-07-2012, 00:10
да мая поста
тут что-то слишком тихо )

на счёт _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)


но мая не понимать как теперь кликнуть по определённому пункту
и как при выводе в консоль сделать перевод строки.

Iska
21-07-2012, 00:31
и как при выводе в консоль сделать перевод строки. »
ConsoleWrite("var5="& $var5 & " " & @CrLf)

суровый
21-07-2012, 07:59
а я думал что за закорючка в хелпе непонятная и убрал :)
благодарю

Iska
21-07-2012, 09:44
что за закорючка в хелпе непонятная »
Справка AutoIt3: Макросы, связанные с AutoIt (http://autoit-script.ru/autoit3_docs/macros/AutoItRelated.htm)

суровый
21-07-2012, 12:54
в общем сделал

#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 КИЛОБАЙТ!!!
мон поражён!

Iska
21-07-2012, 13:08
несколько строчек вылились в ужасные 240 КИЛОБАЙТ!!!
мон поражён! »
Вас не удивляет, что для исполнения некоторых программ, размером в десяток-другой килобайт, требуется многомегабайтный ,Net Framework? Или что для большинства программ, не слинкованных статически с Run-Time библиотеками, требуется этот самый C++ 20xx Run-Time Library?!

Напишите десять тысяч строк кода. Скомпилируйте. Получите немногим больший результат: основную часть этих килобайт занимает сам интерпретатор AutoIt.

P.S. При наличии установленного AutoIT можно исполнять скрипты и без компиляции.

суровый
21-07-2012, 13:47
ну так почти весь на winapi построен наверно AutoIt
так что всё равно много.
Впрочем тут главное простота )))
Хотя два дня ковырялся с тремя кликами.
На си можно было быстрее сделать возможно или на делфи.
Но гораздо проче скачать AutoIt вместо них,даже портабельных.

Iska
21-07-2012, 19:23
На си можно было быстрее сделать возможно или на делфи. »
Нет, три клика на C или Delphi не будет быстрее и проще.

AZJIO
25-07-2012, 00:06
суровый, посмотри это (http://www.autoitscript.com/forum/topic/63397-mouse-click-on-item-in-windows-system-tray/). У меня кликнул в трее без проблем.




© OSzone.net 2001-2012