Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] как сделать клик на иконке в tray (http://forum.oszone.net/showthread.php?t=131812)

adima 12-02-2009 21:11 1036761

как сделать клик на иконке в tray
 
Не могу сообразить как сделать клик на иконке в tray

Creat0R 13-02-2009 07:01 1037042

Вложений: 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 (для последней версиии аутоита) прикрепил к сообщению.

kuzyaka 13-03-2010 13:36 1367662

А как при этом выбрать пункт из контекстного меню?

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

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

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

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

pashkovka 01-03-2011 18:02 1624657

Я новичок в данной программе, она мне требуется лишь для того, чтоб сделать три клика в трее, т.е. запустить программу. При загрузке компьютера.

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

суровый 18-07-2012 15:44 1954266

код работает но если появляется новая иконка,кликает мимо.

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

AZJIO 18-07-2012 16:52 1954306

суровый, а если вызвать _SysTrayIconIndex перед SysTrayIconClick?

суровый 18-07-2012 18:57 1954379

в коде так и есть
вообще странно конечно нафиг тогда проверка присутствия приложения в трее если он всё время кликает самую левую иконку

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

Код:

#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 1954443

Цитата:

Цитата суровый
А почему у меня синтаксис не подсвечивается ? »

Ни у кого не подсвечивается ;). Но некоторые предварительно раскрашивают. Не вручную, конечно.

madmasles 18-07-2012 21:31 1954475

Цитата:

Цитата суровый
А почему у меня синтаксис не подсвечивается ? »

Au3ToPost - Инструмент для расскраски AutoIt-кода

суровый 18-07-2012 23:36 1954543

:)
прикольно
Блин,всё это конечно хорошо но почему иконка кликается всегда левая
хоть что пиши в
Цитата:

Цитата суровый
$Pid = ProcessExists("qip.exe") »

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

Цитата:

Цитата суровый
_SysTrayIconPos »

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

AZJIO 20-07-2012 19:54 1955714

_SysTrayIconIndex у меня возвращает постоянно -1, с любым процессом.

читать дальше »
суровый
На офсайте тема предложили _SysTrayIconPos (или это твой пост?). Кстати в русской справке функции эти есть. Раскраска кода - альтернатива.

суровый 21-07-2012 00:10 1955895

да мая поста
тут что-то слишком тихо )

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

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

Iska 21-07-2012 00:31 1955909

Цитата:

Цитата суровый
и как при выводе в консоль сделать перевод строки. »

Код:

ConsoleWrite("var5="& $var5 & " " & @CrLf)

суровый 21-07-2012 07:59 1955948

а я думал что за закорючка в хелпе непонятная и убрал :)
благодарю

Iska 21-07-2012 09:44 1955961

Цитата:

Цитата суровый
что за закорючка в хелпе непонятная »

Справка AutoIt3: Макросы, связанные с AutoIt

суровый 21-07-2012 12:54 1956022

в общем сделал
Код:

    #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 1956036

Цитата:

Цитата суровый
несколько строчек вылились в ужасные 240 КИЛОБАЙТ!!!
мон поражён! »

Вас не удивляет, что для исполнения некоторых программ, размером в десяток-другой килобайт, требуется многомегабайтный ,Net Framework? Или что для большинства программ, не слинкованных статически с Run-Time библиотеками, требуется этот самый C++ 20xx Run-Time Library?!

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

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

суровый 21-07-2012 13:47 1956054

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

Iska 21-07-2012 19:23 1956193

Цитата:

Цитата суровый
На си можно было быстрее сделать возможно или на делфи. »

Нет, три клика на C или Delphi не будет быстрее и проще.

AZJIO 25-07-2012 00:06 1958188

суровый, посмотри это. У меня кликнул в трее без проблем.

суровый 30-07-2012 09:34 1961361

да пока работает ....
кривова-то конечно реализовано,я то хотел как бы названия пунктов указать чтоб на случай смены пунктов местами в меню всё равно работало.

Но всё равно ,благодарю за отзывчивость,буду смотреть .


Время: 17:11.

Время: 17:11.
© OSzone.net 2001-