|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] работа с контекстым меню |
|
[решено] работа с контекстым меню
|
Новый участник Сообщения: 25 |
Профиль | Отправить PM | Цитировать Всем привет! кто-нибудь знает, как с помощью AutoIt можно управлять контекстным меню (обычно это окна типа: [Class: #32768]). в частности интересует возможность управлять менюшками, которые появляютя, если кликнуть правой кнопкой мыши по какой-нить иконке в трее.
|
|
Отправлено: 16:49, 25-05-2010 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать alexey_a,
Попробуйте так. Вместо "AdMunch.exe" поставьте нужную Вам Программу. Если раскомментировать последние строки в функции, то у меня закрывает Ad Muncher. #NoTrayIcon #include <SysTray_UDF.au3> $Pid = ProcessExists("AdMunch.exe") If Not $Pid Then Exit EndIf Local $Old_Mouse_Pos = MouseGetPos() MouseMove(@DesktopWidth / 2, @DesktopHeight, 0) $Index = _SysTrayIconIndex($Pid) If @error Then Exit EndIf _SysTrayIconClick($Index, "Right") Func _SysTrayIconClick($iIndex, $sButton = "Main") Local $TrayIcon_Pos = _SysTrayIconPos($iIndex) If Not IsArray($TrayIcon_Pos) Then Return SetError(1, 0, 0) MouseClick($sButton, $TrayIcon_Pos[0], $TrayIcon_Pos[1], 1, 0) ;MouseClick("left", $TrayIcon_Pos[0] - 15, $TrayIcon_Pos[1] - 15, 1, 0) ;MouseMove($Old_Mouse_Pos[0], $Old_Mouse_Pos[1], 0) EndFunc ;==>_SysTrayIconClick |
Отправлено: 17:49, 25-05-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 25
|
Профиль | Отправить PM | Цитировать Спасибо, madmasles!
я тут написал немного другую функцию. она мне больше подходит, так как менюшки, с которыми я работаю, периодически меняются (количество пунктов меню, очередность). поэтому после каждого изменения для каждого пункта в меню измерять его положение относительно окошка, мне не очень хочется. вот код функции: ; #Функция# ----------------------------------------------------------------------------------------------------------------------------- ; Имя....................: SelectItemFromMonitorMenu ; Описание ..............: Выбирает пункт контекстного меню для иконки вашего приложения в трее ; Параметры .............: $item - текст пункта меню (например: "Exit") ; Возвращаемые значения .: Успешно - 1 ; Ошибка - 0 ; Заметки ...............: $your_applications_window_title - title окошка вашего приложения, которое отображается в трее. ; Вы можете его увидеть в секции ToolsBar в AutoIt Window Info, если наведете на курсор на иконку в трее. ; ----------------------------------------------------------------------------------------------------------------------------------------- #Include <GuiToolBar.au3> #include <GuiMenu.au3> Func SelectItemFromMonitorMenu($item) Opt("MouseCoordMode", 1) $ind = 0 $hWnd = ControlGetHandle("[CLASS:Shell_TrayWnd]","","[CLASS:ToolbarWindow32; TEXT:Notification Area]") if $hWnd = "" Then ConsoleWrite("Can't get hwnd of bottom toolbar.") Return 0 EndIf $tray_icon_count = _GUICtrlToolbar_ButtonCount($hWnd) For $i = 0 to $tray_icon_count $command_id = _GUICtrlToolbar_IndexToCommand($hWnd, $i) $text = _GUICtrlToolbar_GetButtonText($hWnd, $command_id) if StringInStr($text,$your_applications_window_title) = 0 Then ContinueLoop Else $index = $i ExitLoop EndIf Next _GUICtrlToolbar_ClickIndex($hWnd, $index, "right") Sleep(100) $cur_pos = MouseGetPos() if IsArray($cur_pos) = 0 Then ConsoleWrite("Can't get position of current mouse coordinate") Return 0 EndIf if WinExists("[Class:#32768]") = 0 Then ConsoleWrite("Context menu is not appeared for tray icon.") Return 0 Else $h_win = WinGetHandle("[Class:#32768]") if $h_win = "" Then ConsoleWrite("Can't get hwnd for application's context menu window.") Return 0 EndIf $hMenu = _SendMessage($h_win, $MN_GETHMENU,0,0) $it_index = _GUICtrlMenu_FindItem($hMenu, $item,True) if $it_index = -1 Then ConsoleWrite("Can't find item " & $item & " in the application's context menu window.", $fail) Return 0 EndIf $it_pos = _GUICtrlMenu_GetItemRect($h_win, $hMenu, $it_index) if IsArray($it_pos) = 0 Then ConsoleWrite("Can't get position of item " & $item & " in the application's context menu window.", $fail) Return 0 EndIf MouseClick("left", $it_pos[0] + ($it_pos[2]-$it_pos[0])/2, $it_pos[1] + ($it_pos[3]-$it_pos[1])/2) EndIf MouseMove($cur_pos[0], $cur_pos[1]) Return 1 EndFunc |
Отправлено: 10:42, 26-05-2010 | #3 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать alexey_a,
У меня не работает, ругается на необъявленную переменную $your_applications_window_title, и не понял, откуда $MN_GETHMENU и $fail. |
Отправлено: 16:55, 26-05-2010 | #4 |
Новый участник Сообщения: 25
|
Профиль | Отправить PM | Цитировать там же вверху написано, что:
$your_applications_window_title - title окошка вашего приложения, которое отображается в трее. Вы можете его увидеть в секции ToolsBar в AutoIt Window Info. $MN_GETHMENU - это стандартная константа, объявленная в ...\AutoIt3\include\WindowsConstants.au3 $fail надо удалить и запятую, которая стоит перед ним. то есть заменить ConsoleWrite("Can't find item " & $item & " in the application's context menu window.", $fail) на ConsoleWrite("Can't find item " & $item & " in the application's context menu window."). Это моя ошибка. просто у меня в скриптах я использую свою функцию для логирования, а не ConsoleWrite. и так получилось,что переделывая скрипт для того, чтобы разместить на форуме, я заменял мою функцию на ConsoleWrite. и для одно замены сделал это неправильно, забыл удалить второй параметр $fail. |
|
Отправлено: 14:52, 28-05-2010 | #5 |
Забанен Сообщения: 91
|
Цитата alexey_a:
не находит приложение в строчке : Цитата alexey_a:
|
||
Отправлено: 19:11, 18-07-2012 | #6 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Интерфейс - [решено] История переходов в меню Пуск (все вопросы) | kortez | Microsoft Windows 7 | 35 | 02-05-2011 10:09 | |
Установка - Удаление меню "Програмы" из меню "Пуск" | fragnat | Microsoft Windows 2000/XP | 2 | 07-02-2010 23:54 | |
Работа с меню в системном трее | sashadeg | AutoIt | 4 | 20-05-2009 14:57 | |
Разное - [решено] Доп-ое меню в св-вах "Мой компьютер" и Меню восстановление | forcik | Microsoft Windows 2000/XP | 3 | 24-12-2008 02:42 | |
Разное - Отсутствует меню "Свойства папки" в меню "сервис" папки. | __sa__nya | Microsoft Windows 2000/XP | 1 | 12-08-2008 16:12 |
|