2011-11-12 12 views
0

私はcontrol/alt/shiftキーが押されていることを認識しているCプログラムを作成しようとしています。私はJavaでこの機能を提供するものを見つけましたが、それはあまり役に立ちません。コントロールまたはaltキーを識別するためのCプログラム

void CMousepresentView::OnDraw(CDC* pDC) 
{ 
int shiftValue=::GetKeyState(VK_SHIFT); 
if(!shiftValue) 
pDC->TextOut(0,50,"Shift not pressed"); 
else 
pDC->TextOut(0,50,"Shift pressed"); 

int ctrlValue=::GetKeyState(VK_CONTROL); 
if(!ctrlValue) 
pDC->TextOut(0,100,"Ctrl not pressed"); 
else 
pDC->TextOut(0,100,"Ctrl pressed"); 
} 

これまでのところ私はこれまで非常に初歩的でしたが、どこかで始める必要があります。しかし、それは全く機能しません。

#include <stdio.h> 
#include <ctype.h> 

int main(void) 
{ 
    char ch; 

    do { 
    ch = getchar(); 
    putchar(ch); 
    } while(iscntrl(ch)); 
    return 0; 
} 

私はiscntrlは、少なくとも制御シーケンスキー入力をデバッグし、識別を開始するために私のシステムからいくつかの反応を与えるだろうと期待していました。そのような運はありません。

"コントロールが押された/コントロールがリリースされました"という出力が表示される場合は、残りの部分を把握できました。

アップデート:私は答えはXlibのを使用していると思う


てきたが、このhttp://www.thelinuxdaily.com/2010/05/grab-raw-keyboard-input-from-event-device-node-devinputevent/

アップデートでいくつかの進展がありました。みんな、ありがとう。

+0

Microsoft Windowsまたは何ですか? – marinara

+0

私のセットアップでXubuntuを使う – Justin

+0

ターミナルウィンドウで動作するプログラムや独自のウィンドウを作成するプログラムを書いていますか?前者の場合、ヨアキムは正しいです。後者の場合、方法がありますが、私はそれを行う方法がわかりません。 – zwol

答えて

2

サイレントキーは、コンソールプログラムでは確認できません。これらのキーだけではありません。 ncursesのようなものを使用している場合は、他のキーの修飾子として使用することがあります。

グラフィカルユーザーインターフェイスでプログラムを作成する場合は問題ありません。 Qtはそのための一般的なフレームワークです。選択したフレームワークのドキュメントを確認してください。

+0

なぜそうではないでしょうかコンソールで動作しますが、Qtで動作しますか?それは意味をなさない。私は/ dev/input/by-path/platform-i8042-serio-0-event-kbdをキャプチャするかどうか疑問に思っています。 – Justin

+0

@ジャスティン:Linuxコンソールでは動作しますが、xtermsでは動作しません。 – ninjalj

+0

@Justin QTはグラフィカルユーザーインターフェイスのフレームワークであり、グラフィカルプログラムがフォーカスされている場合、すべてのキーのイベントを受け取ることができます。 xtermのようなテキストプログラムは、テキスト入力を受け取ることができます。修飾語(ALTやCTRLなど)を使用することもありますが、文字を生成しないためALTすることはできません。 –

0

生キーボードモードを使用すると、thisの質問の関連性があります。

アプリケーションによっては、未加工のキーボードイベントを受信する能力を持つlibSDLを使用することができます。

関連する問題