Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.28;
Скачать: CL | DM;

Вниз

Эмуляция выбора пункта меню в чужом приложении   Найти похожие ветки 

 
Хинт ©   (2005-07-06 11:44) [0]

Есть некое приложение. Необходимо автоматизировать очень часто выполняемую операцию. Так как приложение не поддерживает никаких макросов, то приходится управлять им на уровне WinAPI. Одно из действий, которое необходимо выполнить, заключается в эмуляции выхова одного из пунктов меню. Аналогично тому, чтобы щелкнуть в блокноте "Файл\Открыть". Но в отличии от блокнота приложение не использует "горячие клавиши".

Конечно можно просто послать приложению комвинацию клавиш: "ALT"->"Стрелка вниз"->"Стрелка вниз"->"Enter", но по-моему этого является далеко не лучшем решением проблемы...


 
VMcL ©   (2005-07-06 11:58) [1]

WM_COMMAND, WM_MENUCOMMAND
?


 
Хинт ©   (2005-07-06 13:33) [2]

WM_COMMAND  
wNotifyCode = HIWORD(wParam); // notification code
wID = LOWORD(wParam);         // item, control, or accelerator identifier
hwndCtl = (HWND) lParam;      // handle of control

Прочитал справку по этим сообщениям и понял, что это как раз то, что мне нужно. Только я никак не могу понять как пользоваться ими? Как узнать этот самый wID?


 
Digitman ©   (2005-07-06 13:47) [3]


> этого является далеко не лучшем решением проблемы


да, разумная мысль.

такой подход м.б. оправдан (ибо будет чуть ли единственно возможным) лишь в случае "рисованого меню" и невозможности инф.обмена с целевым приложением как с олей/СОМ-сервером автоматизации


> Как узнать этот самый wID?


GetMenuItemID


 
Игорь Шевченко ©   (2005-07-06 13:47) [4]


> Как узнать этот самый wID?


Spy++ или WinSight помогают


 
Хинт ©   (2005-07-06 13:59) [5]

Проблема в том, что это не просто меню окна, а панель в стиле OfficeXP... GetMenu и GetSubMenu не работают =(


 
Хинт ©   (2005-07-06 14:24) [6]

Так работает:
var
Men:HMenu;
idMen:integer;
begin
WWND:=FindWindow(nil,"Безымянный - Блокнот");
Men:=GetMenu(WWND);
Men:=GetSubMenu(Men,0);
idMen:=GetMenuItemID(Men,1);
if idMen<>0 then PostMessage(WWND,WM_COMMAND,idMen,0);
end;


Но если вместо "Безымянный - Блокнот" написать "Документ1 - Microsoft Word", то уже не работает =( Т.е. GetMenu не работает с меню типа OfficeXP. Как можно поступить аналогично в этом случае?


 
KosilkA ©   (2005-07-06 17:59) [7]


> GetMenu не работает с меню типа OfficeXP

присоединяюсь к вопросу, примерно такие-же грабли, только с эксплорером-)


 
Хинт ©   (2005-07-06 19:24) [8]

Мастера! Очень надеюсь на вашу помощь! Уже часа 4 ломаю голову над этой проблемой... решение все ещё не найдено :(((


 
alpet ©   (2005-07-06 20:58) [9]

1. У этих приложений нет меню.
2. Оно заменяется как правило тулбаром (class=ToolbarWindow32, или msoCommandBar), который от других тулбаров отделить еще надо по каким то признакам (один из вариантов - позиция по отношению к родительскому окну).


 
Хинт ©   (2005-07-06 21:51) [10]

Как класс пишет "Afx:00400000:8:00010011:00000000:00000000"
Получить HWND этого ToolBar"a не проблема. Проблема в том, чтобы эмулировать вызов элемента меню из подменю этого ToolBar"a

Помогите


 
Хинт ©   (2005-07-06 21:53) [11]

Насколько я понимаю самый простой вариант описан в первом посте...
"ALT"->"Стрелка вниз"->"Стрелка вниз"->"Enter" :(
Не хотелось бы делать так...


 
alpet ©   (2005-07-06 22:31) [12]

1. Определи на какое сообщение сам тулбар откликается. Искать следует среди сообщений TBM_*. Это позволит получить все его кнопки, и даже возможно их текст.
2. Закрепленные подменю у кнопок могут и отстутствовать - они могут показываться динамически по WM_CONTEXTMENU на кнопке.


 
alpet ©   (2005-07-06 22:33) [13]

Поправка - сообщения начинаюся с TB_, например TB_GETBUTTONTEXT



Страницы: 1 вся ветка

Текущий архив: 2005.08.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
1-1123219072
root
2005-08-05 09:17
2005.08.28
Манифест XP


3-1121418159
vigo
2005-07-15 13:02
2005.08.28
Подключение к Oracle


1-1123237260
officeman
2005-08-05 14:21
2005.08.28
бесконечная запись в файл


8-1113978635
SilenBlock
2005-04-20 10:30
2005.08.28
Помогите исправить ошибку в тексте!


1-1123441747
Tab
2005-08-07 23:09
2005.08.28
Прозрачность SpeedButton при включенных стилях XP.