2017-11-19 17 views
1

私はいくつかの外部デバイスとキーボードとの間の接続を行うためのハンドラを設計しています。そのため私はCkHttpでC++を使用しており、JSONでいくつかのhttpリクエストを送信しています。コンソールがフォーカスされていないときにキーを検出する方法

しかし、私の唯一の問題は、私のコンソールに焦点が当てられていない間、システムのキーを検出しているようです。私はポータブルC++にする必要はありません。私はWindows用に開発しています。

私はいくつかのウインドウヘッダー機能を見つけようとしましたが、フォーカスが合っていないのにシステムキーを取得できましたが、できませんでした。ここでは、最後の手段としてSDL2 libを使用しようとしている私のプロセスのいくつかが失敗しています。

#undef main 
int main(int argc, char** argv) 
{ 
    //init... 

    while (!quit) 
    { 
     while (SDL_PollEvent(&e) != 0) //Doesnt work with unfocused window... Found no flags that could do it 
     { 
      //User requests quit 
      if (e.type == SDL_QUIT) 
      { 
       quit = true; 
      } 
      //User presses a key 
      else if (e.type == SDL_KEYDOWN) 
      { 
       //Select surfaces based on key press 
       switch (e.key.keysym.sym) 
       { 
       case SDLK_q: 
        hreq.putJSON(new HPacket(25500, 254, 254, 0)); 
        hreq.putJSON(new HPacket(0, 254, 254, 3)); 
        break; 

       //some more handling... 
       } 
     //... 
     } 
    } 
    return 0; 
} 

SDL2を使用してGUIを作成することに注意してください。私はそれが動作しない限り、いずれかを必要としません。バックグラウンドでのキーの押下を検出する限り、厳密なコンソールでも問題ありません。

+1

Windowsでは、ウィンドウがフォーカスされていないときにキー押下を検出できる方法は、RawInputをチェックすることです。簡単な方法は、SetWindowsHookExを使用してその中のキーを聴くことです。 – Brandon

+0

@Brandon 'SetWindowsHookEx'は完璧に動作しました。 – Primemaster

答えて

0

@Brandonで述べたように、私の回避策には、SetWindowsHookEx()ウィンドウの機能がキーハンドラとして含まれていました。

関連する問題