Текущий архив: 2003.10.13;
Скачать: CL | DM;
ВнизПерехватить нажатие пункта меню Найти похожие ветки
← →
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 вся ветка
Текущий архив: 2003.10.13;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.009 c