Вопросы о подключении окон - PullRequest
0 голосов
/ 09 мая 2009

Я использую это:

SetWindowsHookEx(WH_CALLWNDPROC, ...);

Я вижу сообщения, которые хочу обработать, но я не хочу, чтобы эти сообщения достигли целевого окна. Итак, я попробовал это:

SetWindowsHookEx(WH_GETMESSAGE, ...);

Когда я делаю это, я могу изменить сообщение и запретить его обработке целевым окном, но эта ловушка не видит сообщения, которые мне нужно обработать. Я предполагаю, что это потому, что оно отправляется в очередь целевого окна, а не отправлено? Есть ли способ обойти эту проблему? Я слышал, что подклассификация окна могла бы достичь этого, но могу ли я создать подкласс окна в другом процессе? Есть ли способ сделать это с помощью хуков?

Ответы [ 3 ]

1 голос
/ 09 мая 2009

Вы не можете создать подкласс окна в другом процессе, но DLL-ловушка должна иметь возможность подкласса интересующего вас окна. Хуки WH_GETMESSAGE и WH_CALLWNDPROC выполняются в контексте процесса, получающего сообщение, так что при этом у вас есть «в» для подкласса окна цели.

0 голосов
/ 17 августа 2009

Документация о хуке предполагает, что это невозможно, но я предполагаю, что эта стратегия может сработать: использовать SetWindowsHookEx (WH_CALLWNDPROC, ...)

В процедуре просто измените сообщение, которое вы хотите выбросить, до неиспользованного значения WM_.

LRESULT CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
{
   CWPSTRUCT *C=(CWPSTRUCT *)lParam;

   if ( ...we are interested in this one) {
     ..deal with this message here...
     //Modify the message so that the client will ignore it
     C->message=WM_USER+44; //presumably ignored by client
   }       
   return GetNextHook(...);
}

Противно, но легко?

0 голосов
/ 09 мая 2009

Вы можете попробовать создать подкласс целевого окна и затем отфильтровать сообщения.

...