none
キーの意味ではなく、位置を検出することはできるのでしょうか RRS feed

  • 質問

  • OS:Vista SP2
    VSEE:2008

    Aのキーを押して、Aを検出することはできますが、ハードウェアに依存したキーボードでの位置も検出したいのです。
    使用しているソフトウェアでそれができているものがあるのですが、VC++で探してみたところ、できそうなクラス等が見つかりません。
    できているという判断は、そのソフトウェアの動作からそう解釈しています。
    例として、いくつかあげると、
    (左がキー、右が位置と思われるデータ)

    Y:21
    H:35
    N:49
    M:50
    B:48
    1:2

    使っているキーボードの配列は、1キーの左に漢字ボタンがあります。
    おそらく、それが位置では1にあたると予想されます。
    Yが21で、そのまま右に数えていくと、"「"が27になります。
    その右に縦長のEnterがありますが、これを28と解釈すると、左端に戻ってCAPSを29から数えると、Hが35となります。
    2011年1月24日 19:09

回答

  • それはおそらくスキャンコードと呼ばれる値です(詳しくは検索してください)。

    WM_KEYDOWN などなら LPARAM の 16-23 ビット目に、MFC の CWnd::OnKeyDown などなら nFlags の 0-7 ビット目に格納されています。

    • 回答としてマーク K6963 2011年1月25日 13:46
    2011年1月25日 3:56

すべての返信

  • それはおそらくスキャンコードと呼ばれる値です(詳しくは検索してください)。

    WM_KEYDOWN などなら LPARAM の 16-23 ビット目に、MFC の CWnd::OnKeyDown などなら nFlags の 0-7 ビット目に格納されています。

    • 回答としてマーク K6963 2011年1月25日 13:46
    2011年1月25日 3:56
  • レスありがとです。

    そんな言葉があったとは(^^;<スキャンコード
    調べてみたところ、MapVirtualKey()でやりたいことができました(^^)
    http://msdn.microsoft.com/ja-jp/library/cc410909.aspx
    初めはリンクが失敗し、user32.libを探したら、たしかにVC下にない。
    一応、検索してみたところ、Windows SDKの下にあり、そこにパスを通すと成功し、動作も確認できました。
    Windows SDKを入れた覚えがないんだけどなぁ。。。(^^;
    2011年1月25日 10:18
  • 一応、検索してみたところ、Windows SDKの下にあり、そこにパスを通すと成功し、動作も確認できました。
    Windows SDKを入れた覚えがないんだけどなぁ。。。(^^;

    最近の Visual C++ は標準で Windows SDK (の一部)をインストールします。
    User32.lib などは、このインストールされたパスを参照することになります。

    # VC 配下のフォルダには Windows 関連の lib/h はなくなっています。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年1月25日 13:50
    モデレータ