Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Контекстное меню

Ответить
Настройки темы
[решено] Контекстное меню

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Подскажите как работать с контекстным меню?
Как можно вызвать определенный пукт контекстного меню в любой программе, без эмуляцией нажатий клавиш клавиатуры.

Отправлено: 17:29, 18-09-2009

 

Аватара для Creat0R

Must AutoIt


Moderator


Сообщения: 3054
Благодарности: 1008

Профиль | Сайт | Отправить PM | Цитировать


Цитата Dreadfulangel:
Как можно вызвать определенный пукт контекстного меню в любой программе »
Что не устраивает в этом примере?

Код: Выделить весь код
#include <WindowsConstants.au3>
#include <SendMessage.au3>
#include <GuiMenu.au3>
;

Run("TaskMgr.exe")

WinWait("[CLASS:#32770;REGEXPTITLE:.*Windows.*]", "", 5)
$hTskMgr = WinGetHandle("[CLASS:#32770;REGEXPTITLE:.*Windows.*]")
If Not WinExists($hTskMgr) Then Exit 1

$nCurrentTab = ControlCommand($hTskMgr, "", "SysTabControl321", "CurrentTab")

$nSubMenu_Item = 4 ;Change to 3th submenu (zero-based), now it will only show the "About" window.
If $nCurrentTab = 1 Then $nSubMenu_Item += 1

$hMenu = _GUICtrlMenu_GetMenu($hTskMgr)

;Theese two is to activate the menu, strange bug, but GetItemSubMenu fails if the menu was not used (clicked)
ControlSend($hTskMgr, "", $hMenu, "!_")
ControlClick($hTskMgr, "", "SysTabControl321")

$hSubMenu = _GUICtrlMenu_GetItemSubMenu($hMenu, $nSubMenu_Item)

;2 = Shutdown, 3 = Restart (2 and 3 it's zero-based item from the top of menu)
$iItemID = _GUICtrlMenu_GetItemID($hSubMenu, 2)

$sItemText = _GUICtrlMenu_GetItemText($hSubMenu, $iItemID, 0)

If MsgBox(262144+36, "GetItemText", StringFormat("Item text: %s\nExecute?", $sItemText)) = 6 Then _
    _SendMessage($hTskMgr, $WM_COMMAND, $iItemID, 0)
И темы нужно называть более конкретно.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

Русское сообщество AutoIt | CreatoR's Lab | Opera AC Community


Отправлено: 18:04, 18-09-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


В этом примере работаем с обычным меню, а необходимо с контекстным, которое появляется при нажатии правой кнопкой мыши.

Отправлено: 18:19, 20-09-2009 | #3


Аватара для Creat0R

Must AutoIt


Moderator


Сообщения: 3054
Благодарности: 1008

Профиль | Сайт | Отправить PM | Цитировать


Цитата Dreadfulangel:
В этом примере работаем с обычным меню, а необходимо с контекстным »
Тогда вот пример на редакторе реестра, где используются заранее известные ID-элементов (посмотреть можно с Reshacker):

Код: Выделить весь код
#include <WindowsConstants.au3>
#include <SendMessage.au3>
;

If Not ProcessExists("Regedit.exe") Then
    Run("Regedit.exe")
    WinWait("[CLASS:RegEdit_RegEdit]")
EndIf

$hRegEdit = WinGetHandle("[CLASS:RegEdit_RegEdit]")
WinActivate($hRegEdit)

_SendMessage($hRegEdit, $WM_COMMAND, 659, 0) ;Пункт "Экспортировать"
;_SendMessage($hRegEdit, $WM_COMMAND, 675, 0) ;Пункт "Копировать имя раздела"

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

Русское сообщество AutoIt | CreatoR's Lab | Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:38, 20-09-2009 | #4


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Большое спасибо за помощь. Теперь всё понятно.

Отправлено: 22:50, 20-09-2009 | #5


Аватара для semiono

Ветеран


Сообщения: 822
Благодарности: 33

Профиль | Отправить PM | Цитировать


В моём случае несколько особый тип меню наверное...
http://i.imagehost.org/0477/Snap6.png
Меню отображает плагины к программе, которые она как хост загружает динамически.
То-есть прога сканирует папку и загружает все возможные anyfilename.dll модули которые там находит.
Это я о том, что ResHacker здесь безполезен. Не знаю на сколько это обычная ситуация, но думаю
здесь подходит только нажатие по текст-содержимому паттерна. Знать бы как!
Первый пример довольно сложноватый я не осилил разобраться, тем боелее с TaskMgr.exe я уже как-то
сталкивался, одно из самых трудных окон! Может что попроще б?
Можно ли зделать Select на определённое слово в меню? (Кстати, я не вижу тут особой разницы простое или контекстное)

-------
Полезное сообщение


Отправлено: 22:38, 02-01-2010 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Контекстное меню

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - Редактирование контекстного меню в Windows 7 Suneu Microsoft Windows 7 179 13-11-2015 14:42
Медиа - [решено] Контекстное меню helge12 Microsoft Windows 2000/XP 14 22-12-2010 22:42
Интерфейс - [решено] Как прописать корзину в контекстное меню? LHf1 Microsoft Windows 2000/XP 3 23-12-2009 10:22
Установка - [решено] ASDsee и контекстное меню jesla Microsoft Windows 2000/XP 2 30-10-2009 13:14
Интерфейс - [решено] Контекстное меню проводника Stryker88 Microsoft Windows 2000/XP 2 18-05-2008 03:41




 
Переход