Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.04.2009, 13:46
KavMax KavMax вне форума
Прохожий
 
Регистрация: 22.04.2009
Сообщения: 2
Репутация: 10
По умолчанию Управление интерфейсом другой программы

Всем привет. Недавно пишу под дельфи. Проблема такая:
Есть программа, в которой путем выбора меню и последующего выбора в списке этого меню нужного элемента я заставляю прогу сделать определенное действие. Задача состоит в том, чтобы заставить эту прогу делать все эти действия нажатием одной клавиши, например пробела. То есть моя прога на дельфи при нажатии пробела должна выбирать нужные меню и выбирать нужный элемент меню в данной проге. Такой вот shortcut-key нужно сделать =)

Вопрос: какой здесь принцип? на какие функции стоит обратить внимание?

Последний раз редактировалось KavMax, 22.04.2009 в 13:51.
Ответить с цитированием
  #2  
Старый 22.04.2009, 14:42
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ловите Key=32 в KeyDown
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 22.04.2009, 15:27
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Если речь о работе с меню в чужом приложении, то можно так.
Чтобы программно вызвать команду из меню в чужом окне, ему посылается сообщение типа WM_COMMAND. В третьем параметре функции SendMessage (а именно, в младшем слове wParam) нужно указать идентификатор элемента выпадающего меню. Идентификатор можете получить с помощью функции GetMenuItemId. Только для этого необходимо знать позицию элемента меню (фактически порядковый номер начиная с 0).
Можно поиздеваться над Блокнотом для примера.
Вот так можно вызвать диалог выбора шрифта в Блокноте.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  NPadHandle: HWND; // handle главного окна Блокнота
  NPadMenu, NPadSubMenu: HMENU; // дескрипторы главного и выпадающего меню
begin
  NPadHandle := FindWindow(nil, PChar('Безымянный - Блокнот'));
  NPadMenu := GetMenu(NPadHandle);
  NPadSubMenu := GetSubMenu(NPadMenu, 2);
  SendMessage(NPadHandle, WM_COMMAND, GetMenuItemId(NPadSubMenu, 1), 0);
end;
Поясню. Функция GetSubMenu возвращает дескриптор меню, соответствующего третьему (начиная с нуля) элементу главного меню. Это элемент "Формат" в Блокноте. При отправлении сообщения WM_COMMAND третий параметр — идентификатор второго (начиная с нуля) элемента в подменю "Формат". Получаю его с помощью функции GetMenuItemId. Если желаете, делайте это не при нажатии на кнопку, как в моем примере, а при нажатии клавиши пробел...

P.S. Вообще, думаю, вам следует еще посмотреть описание функции GetMenuItemInfo и про структуру MENUITEMINFO.

Последний раз редактировалось Nyctos Kasignete, 22.04.2009 в 15:38.
Ответить с цитированием
  #4  
Старый 22.04.2009, 21:13
KavMax KavMax вне форума
Прохожий
 
Регистрация: 22.04.2009
Сообщения: 2
Репутация: 10
По умолчанию

2Nyctos Kasignete
Спасибо=) Но дело в том, что программа немного по другому устроена. Вот скрин http://img50.imageshack.us/img50/6515/ampli.jpg . Там сверху есть обычные меню. Для них тот код, что вы дали, работает правильно. А вот к другому меню, которое вылезает после нажатия на надпись 'Metal', я не знаю как обратиться=\
Код:
NPadSubMenu := GetSubMenu(NPadMenu, 2);
Менял числовой параметр от 0 до 20. Работают только 0 и 1 - то есть стандартные менюшки.

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

Последний раз редактировалось KavMax, 22.04.2009 в 21:16.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:58.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025