Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2013, 11:30   #1
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию Глобальная отловля сообщения(message)

Привет. У меня есть процедура, которая работает при срабатывания сообщения на хендл моей формы. Как можно сделать так, чтобы эта процедура могла ловить сообщения по всей системе? HootMessage же нет.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 17.08.2013, 11:34   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

1)что за сообщение?(может есть иной выход)
2)хук на сообщения, и там уже разбираться что пришло, но это плохой вариант.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.08.2013, 14:35   #3
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
1)что за сообщение?(может есть иной выход)
2)хук на сообщения, и там уже разбираться что пришло, но это плохой вариант.
1)типа WM_PASTE, WM_Copy, WM_Cut
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 17.08.2013, 14:56   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

А что там сложного?
SetWindowsHookEx , где idHook = WH_CALLWNDPROC

Перехватываешь оконную процедуру окна и получаешь все WM_* сообщения, до того как их получит оригинальный WndProc.
С WH_CALLWNDPROCRET получаешь все WM_* уже после того, как они были обработаны окном.

Или же WH_GETMESSAGE, чтобы мониторить очереди оконных сообщений.

Последний раз редактировалось Человек_Борща; 17.08.2013 в 15:03.
Человек_Борща вне форума Ответить с цитированием
Старый 17.08.2013, 16:27   #5
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

минуту, а WH_... это тоже как бы сообщения? Или их как-то по другому надо обработать?
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 17.08.2013, 16:32   #6
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение

Или же WH_GETMESSAGE, чтобы мониторить очереди оконных сообщений.
а вот это, пожалуйста, подробней.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 17.08.2013, 17:24   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
WH_... это тоже как бы сообщения?
Нет, это тип ловушки-фильтра. WH_KEYBOARD например пропускают все сообщения в очереди кроме клавиатурных. WH_GETMESSAGE по-моему ни одного не пропускают. По крайней мере это ловушка для сообщений, обрабатываемых функциямии GetMessage и PeekMessage
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.08.2013, 17:56   #8
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Дело в том, что я хочу в данный момент переловить сообщения, которые посылает SendMessage. Для этого должен использоватся фильтр: WH_CALLWNDPROC. Так вот, а что произойдет если сообщение будет отправлено(хоть проводником)?
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 17.08.2013, 18:03   #9
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

И ещё каким задать второй параметр для SetWindowsHookEx?
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 17.08.2013, 18:18   #10
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Вот что-то накопал:
Код:
function HookCopyClipBoard(Code: Integer; WParam: word; LParam: Longint): Longint; stdcall;

var
HM: HHOOK;

//onCreate- ловушка должна работать при работе процесса
HM:=SetWindowsHookEx(WH_CALLWNDPROC,@HookCopyClipBoard,hInstance,0);

//функция
var
tag: PEVENTMSG;
begin
if Code>=0 then 
begin
result:=0;
tag:=Pointer(LParam);
if tag.message=WM_Copy then 
begin
//обрабатываем сообщение
end;
end
else
result:=CALLNextHookEx(HM,code,WParam,LParam);
end;

//onDestroy 
UnHookWindowsHookEx(HM); //снимаем ловушку
посмотрите, как вам?
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Глобальная переменная winhttp C# (си шарп) 15 20.07.2016 16:03
Отловля события копирования в буфер обмена саша40 Общие вопросы Delphi 4 17.03.2014 17:21
Глобальная статистика Marinast906 Помощь студентам 0 18.12.2012 14:14
The message resource is present but the message is not found in the string/message table Apokal Win Api 0 19.05.2011 18:06
C++ [Глобальная переменная] Lemo Помощь студентам 2 26.10.2009 17:49