WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  SetWindowsHookEx и WM_PAINT

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   SetWindowsHookEx и WM_PAINT
EHOT опубликован 12-10-2001 19:27 MSK   Click Here to See the Profile for EHOT   Click Here to Email EHOT  
проблема такая:
ловлю сообщения WM_PAINT (и некоторые другие) всех приложений.
зарегистрировал для этого хуки:
WH_GETMESSAGE
WH_CALLWNDPROC
WH_SYSMSGFILTER
И получается интересная картина: WM_PAINTы ловятся, но как бы не все. Например, обычный PBrush, когда в нем рисуешь, непрерывно их получает. Spy++ видит, а моя прога ловит только когда кнопку мыши отпустишь. В чем грабли?
talex опубликован 13-10-2001 14:38 MSK     Click Here to See the Profile for talex  Click Here to Email talex     
а как ты проверяешь?
напиши немного кода, и еще скажи как твоя прога не вешает windows? :)
EHOT опубликован 14-10-2001 12:59 MSK     Click Here to See the Profile for EHOT  Click Here to Email EHOT     
//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 рисуешь, а ко мне приходят только когда мышь нажмешь\отпустишь. т.е.
если скажем линию ведешь, то только в начале и в конце, а в процессе, так сказать, - нет.
И с чего моя прога должна винды вешать????

migel опубликован 15-10-2001 13:14 MSK     Click Here to See the Profile for migel  Click Here to Email migel     
#pragma data_seg(".MyData")
А сегмент то у тебя расшарен?
talex опубликован 16-10-2001 18:43 MSK     Click Here to See the Profile for talex  Click Here to Email talex     
может попробуешь вместо PostMessage, SendMessage.
в твоем коде вроде все правильно, только вот как ты показываешь в своей проге что WM_PAINT произошел, т.е. когда нажимаешь и отпускаешь кнопку в пбраш-е, где у тебя видно это?

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.