LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

押されたキーのKeycodeを検出するには?

Solved!
Go to solution
スペースキーを押したときのKeycodeを取得する方法を探しています。
 
以前のWindows 98SEの場合はIn Port.viを使用していました。
Windows XPになってからはCall Library Function Nodeを使用してcviVXDWrapper.dllのCVI_inp関数を呼んでいます。
スペースキーを押下したとき、入力パラメータ=96で出力パラメータ=57が得られます。
しかし、最近のHP社のノートPCでは出力パラメータ=0でスペースキーの検出ができません。
 
環境: Windows XP(SP2)+LabVIEW6.1
*** St.River ***
0 Kudos
Message 1 of 3
(4,469 Views)
Solution
Accepted by topic author St.River

HIJIRIKAWA様

平素より弊社製品をご利用いただき誠にありがとうございます。
日本ナショナルインスツルメンツの井関と申します。

HP社のノートPCで検出できないのは、スペースキーのみでしょうか、それとも他のキーも検出できないのでしょうか。
WindowsAPIを使用して取得も可能ですので、方法をご紹介いたします。

使用する関数はGetAsyncKeyStateです。
関数呼び出し時にキーが押されているかどうか、また、前回の GetAsyncKeyState 関数呼び出し以降にキーが押されたかどうかを判定します。

Call Library Function Nodeを使用して C:\WINDOWS\system32\user32.dll内のGetAsyncKeyState 関数を呼びます。
引数は数値・符号つき32ビット整数
返り値タイプは、数値・符号つき16ビット整数
です。Spaceキーは10進で"32"なので、引数に32を渡します。

前回から今回実行するまでにスペースキーが押された場合
2進表記で 0000000000000001
実行時にスペースキーが押されている場合
2進表記で 1000000000000001
が返ってくることを確認しました。

GetAsyncKeyState関数についての詳細はMSDNライブラリをご参照下さい。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_getasynckeystate.asp

現在私が使用できるLabVIEW6.1がなかったため、動作確認したVIをご紹介できず申し訳ありませんが、上記の内容がご参考になれば幸いです。
ご不明な点などございましたらまたご連絡下さい。
よろしくお願いします。
Message 2 of 3
(4,417 Views)

ご回答ありがとうございました。

実はCall Library Functionを用いて別のWindows API
GetKeyboardState(char *VirtKey)
をCALLてLabVIEW6.1 + Windows XP SP2環境で[Spce]押下時のKey Codeを取得できました。

*** St.River ***
0 Kudos
Message 3 of 3
(4,400 Views)