информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеПортрет посетителяСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft Authenticator прекращает... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
пробовал, не помогает :( 14.10.01 02:09  Число просмотров: 925
Автор: goblin Статус: Незарегистрированный пользователь
<"чистая" ссылка>
<programming>
[Win32] [VC++] Хуки и глюки... 13.10.01 13:04  
Автор: goblin Статус: Незарегистрированный пользователь
<"чистая" ссылка>
перехватываю сообщения WM_PAINT всех приложений.
зарегистрировал для этого хук WH_GETMESSAGE.
Но! Сообщения перехватываются но как бы не все.
Вот обычный PBrush например. В Spy++ видно, что WM_PAINTы сыпятся просто, когда рисуешь (не отпуская мышь). А моя прога ловит только когда мышь нажмешь-отпустишь. Почему Spy ловит, а моя прога нет? Вот в чем вопрос.
Всем спасибо. Разобрался. 14.10.01 18:22  
Автор: goblin Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Прав оказался <Mikhail>. Все отловилось WH_CALLWNDPROC хуком.

Только вначале я на него забил. Опшибочку допустил.
В CALLBACK функции
CallWndProc( int code, WPARAM wParam, LPARAM lParam )
lParam не к (CWPSTRUCT *) приводил а к (MSG *), как с WH_GETMESSAGE хуком.
Структуры-то похожие, вот я и облажался.
Ясно, что с WH_CALLWNDPROC у меня ничего не вышло.
Поэтому я и мучал WH_GETMESSAGE.

Но счас все ОК. Пашет.
Всем спасибо.
бх, урегщ, оехцфп setwindowshookex ойлфп ое аъбм? 13.10.01 21:28  
Автор: goblin Статус: Незарегистрированный пользователь
<"чистая" ссылка>
то есть: Ау, Cпецы, неужто никто SetWindowsHookEx не юзал? 13.10.01 21:31  
Автор: goblin Статус: Незарегистрированный пользователь
<"чистая" ссылка>
da vse usali 13.10.01 22:22  
Автор: kabanchik Статус: Незарегистрированный пользователь
<"чистая" ссылка>
vo-pervyx segodnya Subbota :-)))
vo-vtoryx napishi malen'kij primerchik rabotayushego code-a.
A to tak srazu i ne pojmesh'
ya s takoj problemoj vo vsyakom sluchae ne stalkivalsya.
Да текст-то проще некуда :( 13.10.01 23:32  
Автор: goblin Статус: Незарегистрированный пользователь
<"чистая" ссылка>
//hook.dll #pragma data_seg(".MyData") HHOOK hGetMessageHook = NULL; UINT UpdateMessage = NULL; HWND hParentWnd = NULL; #pragma data_seg( ) HINSTANCE hInstance = NULL; // This instance of the DLL LRESULT CALLBACK GetMsgProc( int code, WPARAM wParam, LPARAM lParam ); //------------------------ BOOL APIENTRY DllMain( HANDLE hModule,DWORD r,LPVOID l ) { if (r==DLL_PROCESS_ATTACH)hInstance = (HINSTANCE)hModule; return TRUE; } //------------------------ __declspec(dllexport) int SetHook( HWND hWnd,UINT UpdateMsg) { hParentWnd = hWnd; UpdateMessage=UpdateMsg; hGetMessageHook= ::SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,hInstance,0); return 0; } //----------------------- LRESULT CALLBACK GetMsgProc( int code, WPARAM wParam, LPARAM lParam ) { MSG *msg = (MSG *) lParam; if ((code >= 0)&&(msg->message==WM_PAINT)) PostMessage(hParentWnd,UpdateMessage,0,0); return CallNextHookEx (hGetMessageHook,code ,wParam , lParam); };
это вот вкратце. Если нужно подробнее, могу на мыло прислать.

А дальше вот что. Запускаю Paint Brush. Запускаю Spy++, настраиваю его ловить только сообщения WM_PAINT для дочернего окна PBrush'а - белого такого, там где рисовать можно:). Вызываю SetHook из своей длл. Ну и вот. В Spy сообщения просто валом прут, когда в PBrush рисуешь, а ко мне приходят только когда мышь нажмешь\отпустишь. т.е. если скажем линию ведешь, то только в начале и в конце, а в процессе, так сказать, - нет.
[Win32] Да текст-то проще некуда :( 14.10.01 03:08  
Автор: Vital Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > //hook.dll > #pragma data_seg(".MyData") > HHOOK hGetMessageHook = NULL; > UINT UpdateMessage = NULL; > HWND hParentWnd = NULL; > #pragma data_seg( ) > > HINSTANCE hInstance = NULL; // This instance of > the DLL > > LRESULT CALLBACK GetMsgProc( int code, WPARAM wParam, > LPARAM lParam ); > //------------------------ > BOOL APIENTRY DllMain( HANDLE hModule,DWORD r,LPVOID l ) > { > if (r==DLL_PROCESS_ATTACH)hInstance = (HINSTANCE)hModule; > return TRUE; > } > //------------------------ > __declspec(dllexport) int SetHook( HWND hWnd,UINT > UpdateMsg) > { > hParentWnd = hWnd; > UpdateMessage=UpdateMsg; > hGetMessageHook= > ::SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,hInstance,0); > return 0; > } > //----------------------- > LRESULT CALLBACK GetMsgProc( int code, WPARAM wParam, > LPARAM lParam ) > { if (nCode < 0) return (hGetMessageHook,code ,wParam ,lParam); > MSG *msg = (MSG *) lParam; > if ((code >= 0)&&(msg->message==WM_PAINT)) > PostMessage(hParentWnd,UpdateMessage,0,0); > CallNextHookEx (hGetMessageHook,code ,wParam ,lParam); return 0; > }; > >
> это вот вкратце. Если нужно подробнее, могу на мыло
> прислать.
>
> А дальше вот что. Запускаю Paint Brush. Запускаю Spy++,
> настраиваю его ловить только сообщения WM_PAINT для
> дочернего окна PBrush'а - белого такого, там где рисовать
> можно:). Вызываю SetHook из своей длл. Ну и вот. В Spy
> сообщения просто валом прут, когда в PBrush рисуешь, а ко
> мне приходят только когда мышь нажмешь\отпустишь. т.е. если
> скажем линию ведешь, то только в начале и в конце, а в
> процессе, так сказать, - нет.

Кажется нужно сделать так, т.к функция GetMsgProc должна возвращать 0
Да текст-то проще некуда :( 14.10.01 00:50  
Автор: kabanchik Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > //hook.dll > #pragma data_seg(".MyData") > HHOOK hGetMessageHook = NULL; > UINT UpdateMessage = NULL; > HWND hParentWnd = NULL; > #pragma data_seg( ) > > HINSTANCE hInstance = NULL; // This instance of > the DLL > > LRESULT CALLBACK GetMsgProc( int code, WPARAM wParam, > LPARAM lParam ); > //------------------------ > BOOL APIENTRY DllMain( HANDLE hModule,DWORD r,LPVOID l ) > { > if (r==DLL_PROCESS_ATTACH)hInstance = (HINSTANCE)hModule; > return TRUE; > } > //------------------------ > __declspec(dllexport) int SetHook( HWND hWnd,UINT > UpdateMsg) > { > hParentWnd = hWnd; > UpdateMessage=UpdateMsg; > hGetMessageHook= > ::SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,hInstance,0); > return 0; > } > //----------------------- > LRESULT CALLBACK GetMsgProc( int code, WPARAM wParam, > LPARAM lParam ) > { > MSG *msg = (MSG *) lParam; > if ((code >= 0)&&(msg->message==WM_PAINT)) ^^^^^^ a pochemu (code >= 0) ??? poprobuj bez nego, dumaju message-i valom lezt' budut :-))) > PostMessage(hParentWnd,UpdateMessage,0,0); > return CallNextHookEx (hGetMessageHook,code ,wParam , > lParam); > }; > >
> это вот вкратце. Если нужно подробнее, могу на мыло
> прислать.
>
> А дальше вот что. Запускаю Paint Brush. Запускаю Spy++,
> настраиваю его ловить только сообщения WM_PAINT для
> дочернего окна PBrush'а - белого такого, там где рисовать
> можно:). Вызываю SetHook из своей длл. Ну и вот. В Spy
> сообщения просто валом прут, когда в PBrush рисуешь, а ко
> мне приходят только когда мышь нажмешь\отпустишь. т.е. если
> скажем линию ведешь, то только в начале и в конце, а в
> процессе, так сказать, - нет.
Да текст-то проще некуда :( 14.10.01 03:28  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
Po moemu type hooka dolzhen byt`: WH_CALLWNDPROC
пробовал, не помогает :( 14.10.01 02:09  
Автор: goblin Статус: Незарегистрированный пользователь
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach