hook

0

Jets dany hook obsługujący klawiaturę

//---------------------------------------------------------------------------
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
//---------------------------------------------------------------------------

// funkcje eksportowane
extern "C" __declspec(dllexport)bool InstallKeyboardHook();
extern "C" __declspec(dllexport)bool RemoveKeyboardHook();

// deklaracja procedury zwrotnej hooka (ang. callback hook procedure)
LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam);

// zmienne globalne
HHOOK HookHandle;
HINSTANCE DllInstance;
bool IsInRect = false;

//---------------------------------------------------------------------------
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
   DllInstance = hinst;

   return 1;
}
//---------------------------------------------------------------------------
bool InstallKeyboardHook()
{
   HookHandle = SetWindowsHookEx(WH_KEYBOARD, 
                reinterpret_cast<HOOKPROC>(KeyboardProc), DllInstance, 0);

   if (HookHandle == NULL) 
      return false;
   else 
      return true;
}
//---------------------------------------------------------------------------
bool RemoveKeyboardHook()
{
   if (UnhookWindowsHookEx(HookHandle) == 0)
      return false;
   else
      return true;
}
//---------------------------------------------------------------------------
LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
   if (code < 0)
      return CallNextHookEx(HookHandle, code, wParam, lParam);

   if(wParam)
      ShowMessage(char(wParam));


   // wywołanie nastepnego hooka w lancuchu
   return CallNextHookEx(HookHandle, code, wParam, lParam);
}
//---------------------------------------------------------------------------

I zamiast jednego okienka z klawiszem wyświetlają mi się 2.
Co zrobić aby pojawiała się tylko jedna wiadomość ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1