私はいくつかの外部デバイスとキーボードとの間の接続を行うためのハンドラを設計しています。そのため私は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
を作成することに注意してください。私はそれが動作しない限り、いずれかを必要としません。バックグラウンドでのキーの押下を検出する限り、厳密なコンソールでも問題ありません。
Windowsでは、ウィンドウがフォーカスされていないときにキー押下を検出できる方法は、RawInputをチェックすることです。簡単な方法は、SetWindowsHookExを使用してその中のキーを聴くことです。 – Brandon
@Brandon 'SetWindowsHookEx'は完璧に動作しました。 – Primemaster