2

次のスニペットは、ユーザーがキーを入力したときにメッセージを表示するためのものです。アプリケーションに焦点が当てられていない場合でも。しかし、次のコードには問題があるようです。ウィンドウでフックチェーンに登録された関数を呼び出しません。問題はにあると思いHINSTANCE hInstます。ユーザーがキーをタップしたときにメッセージを表示できるようにするには、以下のコードをどのように変更すればよいですか。

// Global Variables
static HHOOK handleKeyboardHook = NULL;
HINSTANCE hInst = NULL;

void TestKeys_setWinHook // i call this function to activate the keyboard hook
  (...) {
    hInst = GetModuleHandle(NULL);
    handleKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInst, 0); // LowLevelKeyboardProc should be put in the hook chain by the windows,but till now it doesn't do so.
    printf("Inside function setWinHook !");
}

// the following function should be called when the user taps a key.

static LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
  printf("You pressed a key !\n");
  return CallNextHookEx(handleKeyboardHook, nCode, wParam, lParam);
}

しかし、ウィンドウは関数を呼び出しませんLowLevelKeyboardProc。理由はわかりませんが、問題はhInstフック関数にあると確信しています。どのように初期化する必要がありますか?

今まで、私が見る出力はInside function setWinHook !

4

1 に答える 1

1

LowLevelKeyboardProc の例を次に示します。

HHOOK hHook;

LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
{
    printf("You pressed a key!\n"); 
    return CallNextHookEx(hHook, nCode, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
  hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);
  MSG msg;
  while(GetMessage(&msg, NULL, 0, 0))
  {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
  return msg.wParam;
}
于 2012-05-25T07:22:06.577 に答える