Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CallWndProc 
:(
    Опции темы
koder
Дата 13.4.2007, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 30.4.2005
Где: Moscow

Репутация: нет
Всего: 2



Ребята, есть ли у кого работающий пример под XP, установка хука на CallWndProc?
--------------------
THE TRUTH IS OUT THERE
PM WWW ICQ   Вверх
ama_kid
Дата 13.4.2007, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 5
Всего: 95



у меня есть (я отлавливал факт завершения своего приложения через диспетчер задач кнопкой "Завершить приложение"), хотя я не понимаю, чем установка на CallWndProc отличается от установки любого другого хука? Все абсолютно одинаково вапче-то...
Код

HHOOK SysHookHandle;
...
...
int __stdcall SysMessageProc(int nCode, DWORD wParam, DWORD lParam)
{

    static CWPSTRUCT *p;
    static flag = false;

    p = (CWPSTRUCT *)lParam;
    if (nCode < 0) return (int)CallNextHookEx(SysHookHandle, nCode, wParam, lParam);

    if (p->message==WM_CLOSE)
    {
        flFlag = true;
    }
    return (int)CallNextHookEx(SysHookHandle, nCode, wParam, lParam);    
}
...

int APIENTRY _tWinMain(HINSTANCE hInstance,
                       HINSTANCE hPrevInstance,
                       LPTSTR    lpCmdLine,
                       int       nCmdShow)
{
...
    try        //Вешаем хук на свой обработчик оконных сообщений
    {
        SysHookHandle = SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)&SysMessageProc, (HINSTANCE) NULL, GetCurrentThreadId());
    }
    catch(...)
    {
        ;
    }
...

Ну и не забыть UnhookWindowsHookEx(SysHookHandle); на выходе...
Естессно, это пример установки хука на окно своего процесса. Если надо на все окна в системе - тогда надо пихать этот код в dll...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
koder
Дата 13.4.2007, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 30.4.2005
Где: Moscow

Репутация: нет
Всего: 2



А как Утановить хук на CallWndProc и принимать все сообщения и куда-нибдуь записывать?
--------------------
THE TRUTH IS OUT THERE
PM WWW ICQ   Вверх
ama_kid
Дата 13.4.2007, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 5
Всего: 95



Цитата(koder @  13.4.2007,  10:55 Найти цитируемый пост)
А как Утановить хук на CallWndProc...
Обрати внимание на 29-ю строку приведенного мной кода...
Цитата(koder @  13.4.2007,  10:55 Найти цитируемый пост)
...принимать все сообщения...
Этим занимается хуковая функция (у меня она начинается на стр. 4 - тоже прошу обратить внимание)
Цитата(koder @  13.4.2007,  10:55 Найти цитируемый пост)
...куда-нибдуь записывать
Это уже как твоя душа пожелает. Вся информация о приходящих оконных сообщениях лежит в структуре CWPSTRUCT



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
koder
Дата 13.4.2007, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 30.4.2005
Где: Moscow

Репутация: нет
Всего: 2



Хорошо, а как расшифровать p->message, чтобы было текстом, а не кодом?
--------------------
THE TRUTH IS OUT THERE
PM WWW ICQ   Вверх
ama_kid
  Дата 13.4.2007, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 5
Всего: 95



koder
Как-нибудь так:
Код

 char s[50];
 switch (p->message)
{
  case WM_CLOSE: strcpy(s,"WM_CLOSE"); break;
  case WM_DESTROY: strcpy(s,"WM_DESTROY"); break;
  ...
  case default: strcpy(s,"undefined"); break;
}



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
koder
Дата 13.4.2007, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 181
Регистрация: 30.4.2005
Где: Moscow

Репутация: нет
Всего: 2



т.е. как-нибдуь MesToString(p->message)
а результатом будет те же WM_KEYUP,WM_CLOSE
может есть какая-нибудь такая функция?
--------------------
THE TRUTH IS OUT THERE
PM WWW ICQ   Вверх
Greeen
Дата 13.4.2007, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 710
Регистрация: 13.8.2006
Где: Петербург

Репутация: нет
Всего: 18



Цитата(koder @  13.4.2007,  11:23 Найти цитируемый пост)
может есть какая-нибудь такая функция? 

нет


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0462 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.