Что нового

Как максимально "грамотно" кликнуть по иконке в тулбаре (открыть меню)?

alexnasa

Новичок
Сообщения
50
Репутация
0
От версии к версии AutoIT совершенствует свои механизмы. Мне нужно максимально осторожно кликнуть по иконке программы, свернутой в тулбар. Ошибка попадания может "выйти боком". К примеру не подходит элементарный клик по координате, т.к. меняется положение иконки иногда. Иконка вот такая
ico.bmp
. Window info показал что в отсеке тулбара программа имеет index- 1; command- 15 ; text- Goalcity. Как бы поступить пограмотнее?
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
_SysTray UDF
http://www.autoitscript.com/forum/topic/103871-systray-udf/

Простой пример:

Код:
#NoTrayIcon
#include <_SysTray.au3>
$var1="прога.exe"; имя процесса
$var2=0
$var3=1
$var4=_SysTrayIconIndex($var1, $var2, $var3); функция получения индекса иконки
$var5=_SysTrayIconPos($var4, 1)
MouseClick("left", $var5[0]+2,$var5[1]+2, 1)


Посложнее:

Код:
#NoTrayIcon
#include <GuiToolbar.au3>
#include <_SysTray.au3>

$ToolTipString = "Goalcity"
$Index = 100
$count = _SysTrayIconCount()
For $i = 0 to $count - 1
    $tooltip = _SysTrayIconTooltip($i)
    If $tooltip = $ToolTipString Then $Index = $i
	Next

If $Index <> 100 then
$hWnd = ControlGetHandle('[Class:Shell_TrayWnd]', '', '[Class:ToolbarWindow32;Instance:1]')
$iCommandID = _GUICtrlToolbar_IndexToCommand($hWnd, $Index)
$aRect = _GUICtrlToolbar_GetButtonRect ($hWnd, $iCommandID)
ControlClick($hWnd, '', '','left',1,$aRect[0],$aRect[1])
EndIf
 
Автор
alexnasa

alexnasa

Новичок
Сообщения
50
Репутация
0
Первый (по-проще) вариант работает! Второй нет почему-то.. А еще у меня заработал вот такой код (Его нашел и приводит в своём посту тов. Kuzyaka ) http://autoit-script.ru/index.php?topic=1302.0 -
Код:
#NoTrayIcon
#include <SysTray_UDF.au3>
;

$Pid = ProcessExists("процесс-нэйм.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
 
Верх