Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.10.13;
Скачать: [xml.tar.bz2];

Вниз

Перехватить нажатие пункта меню   Найти похожие ветки 

 
L.N.N.   (2003-08-07 10:42) [0]

Добрый день.
Есть программа для бухгалтерии. При отправке на печать документа, она создаёт отчет в Ворде. Отчет людей не устраивает, поэтому я хочу, чтобы когда пользователь нажимает на определённый пункт в менюшке, действие передалось моей программе. А вот в каком направлении работать я не знаю. Хэндл программы, меню, и подменю с пунктом печати, я нахожу. Но как узнать, что пункт был нажат?


 
Игорь Шевченко   (2003-08-07 11:31) [1]

Очевидно, обрабатывать сообщение WM_COMMAND, которое посылается главному (или неглавному :)) окну системы при клике на пункте меню.


 
L.N.N.   (2003-08-07 12:39) [2]

GetMessage? Или что-то другое. И каким образом ловить это сообщение? По таймеру? Можно немного поподробнее?
Заранее спасибо.


 
Игорь Шевченко   (2003-08-07 12:44) [3]

Если в чужом приложении - то хуком WH_CALLWNDPROC скорее всего


 
L.N.N.   (2003-08-07 15:20) [4]

Я пытаюсь делать следующим образом:

Так устанавливаю хук.

theHook := SetWindowsHookEx(WH_CALLWNDPROC, @TfmMain.CBTHookProc, hInstance, 0);
if theHook = 0 then messageBox(0,"Error!","Error!",mb_ok);

А так, насколько я понимаю, надо отфильтровывать только сообщения из необходимой программы. Всё правильно?

function TfmMain.CBTHookProc(Code: Integer; wParam: Longint;lParam:
Longint):Longint;
begin
Result := 0;
// А как реализовать проверку здесь?
Result := 1;
end;
Если нетрудно, то можете указать материалы по хукам в интернете.



 
Игорь Шевченко   (2003-08-07 15:25) [5]


> Если нетрудно, то можете указать материалы по хукам в интернете.

Раздел "Статьи" на этом сайте


 
L.N.N.   (2003-08-07 16:47) [6]

Прочитал. Только всё равно не понятно, как я фильтре определю нужное мне приложение, допустим зная его хэндл.


 
Игорь Шевченко   (2003-08-07 17:40) [7]

Все вроде проще - в hook передается структура, одним из полей которой является hwnd. Сравниваешь его с окном твоей программы, поле Message сравниваешь с WM_COMMAND, поле wParam - с тем самым идентификатором меню, который вызывает печать отчета. Но, IMHO, все это неверный в корне путь.
Программа для печати отчета ведь какие-то данные использует, правильно ? А их ты откуда брать собираешься ?


 
L.N.N.   (2003-08-08 10:31) [8]

Объясняю. Есть программа для бухгалтерии, которая хранит счета. Она при печати создаёт Вордовский документ, который и печатает. Но маркетингу отчет не нравится (нельзя передать по факсу), и изменить его нельзя, так как прогамма его создает с нуля. Поэтому я написал программу, которая создает удобный для всех отчет в Экселе, используя базу бухгалтерской программы. Но начальник хочет, чтобы я автоматизировал свою программу, чтобы народ просто нажимал кнопку печати в той программе, а печатала моя.
За пояснение спасибо. Будем разбираться.



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

Форум: "WinAPI";
Текущий архив: 2003.10.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
3-40305
Виталий Панасенко
2003-09-22 09:17
2003.10.13
Работа с XML


6-40544
SergP
2003-08-13 18:16
2003.10.13
Прокси-Сервер. Как закрыть соединение с браузером.


3-40236
M126
2003-09-23 15:07
2003.10.13
Как пользоваться Substring в запросе?


1-40470
GreySerg
2003-09-30 20:44
2003.10.13
Как в ListView при редактировании запретить действие ShortCutов ?


14-40671
J. Bush
2003-09-25 18:51
2003.10.13
Repeate





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский