• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:仮想キーコード、スキャンコードの拾い方)

仮想キーコード、スキャンコードを拾う方法

alfeimの回答

  • ベストアンサー
  • alfeim
  • ベストアンサー率58% (114/195)
回答No.1

仮想keyCodeはGetAsyncKeyState()APIを使えば取得可能です。 ScanCodeはMapVirtualKey()APIで出来そうですね。 ただ質問を見るとシステム全体のキーボード入力をトラップしたい様に見受けられます。 フック自体はSetWindowsHookEx()APIで出来ますが、システム全体にフックを掛ける場合、DLLでの実装が必要です。 確かなぜDLLでなければならないかの解説もwebにあったとおもったのですが・・・失念しました(^^; で、サンプルソースですが、webに結構転がってます。キーボードカスタマイズ系アプリケーションでソース公開されているものは大体同様の手法を取っているのでそれを探してくればOKではないかとおもいます。 とりあえずぱっと思い出した所で私が普段使ってるKeymacsというユーティリティのsrcが公開されているようです。確かこれもシステムフックを使っていたはずなので、これを参考にしてみるのはいかがでしょうか?

参考URL:
http://michiko.shiratori.riec.tohoku.ac.jp/~jir/windows/keymacs+/
naru
質問者

お礼

ご回答ありがとうございます!! 半ばあきらめていたのですが、ありがたい情報を いただきました。 連休明けにさっそく挑んでみたいと思います。 感謝いたします。

関連するQ&A

  • MSGFILTER lParmで得られるキーコード?

    いつもお世話になっております。 以下のような関数で押されたキーを判定しています。 lParmで得られるキーコードはVK_??のコードと違うようなのですが、 (キーボードの並び方順になってる?) これをVK_??に変換するような方法はあるのでしょうか? (本当はSHIFTデータもプラスして文字コードに変換したいのですが・・・) 何か良い方法があればアドバイスお願いいたします。 void CCtypeView::OnMsgfilterEdit1(NMHDR* pNMHDR, LRESULT* pResult) { MSGFILTER *pMsgFilter = reinterpret_cast<MSGFILTER *>(pNMHDR); if( pMsgFilter->msg == WM_KEYDOWN ) { SHORT sho = GetAsyncKeyState(VK_SHIFT); TRACE( "%d : \nWM_LBUTTON x=%x,y=%d sho=%x", pMsgFilter->msg, HIWORD( pMsgFilter->lParam), LOWORD( pMsgFilter->lParam), sho ); } *pResult = 0; }

  • C++Builder 6 でkeybd_event

    C++Builder 6 でkeybd_eventを使っています 文字を送るときに仮想キーコードにすると未定義と出て 文字コードにすると送れます .hが通ってないのでしょうか? けど、VK_ESCAPE などは使えます。??? そういう仕様なのでしょうか? すいませんがよろしくお願いいたします

  • 図形と計量

    さっきは2次関数の問題に回答してくださった方々、ありがとうございました。やっぱり実際解いてみて分からなかったところを質問するのがいいですよね。反省です。 ではでは、早速なのですがまた分からない問題が出てきてしまいました(^^;どなたか分かる方よろしくお願いします。 問題です!! *AB=8、BC=3、∠B=60゜の三角形ABCがある。このとき次の各問いに答えよ。 (1)AC=アであり、三角形ABCの面積はイ√ウである。 (2)2辺AB、BC上にそれぞれ点D,Eを、2BD+BE=7を満たすようにとるとき   (ⅰ)三角形BDEの面積が三角形ABCの面積の1/6倍となるのは、     BD=エ+√オカ/キのときである。   (ⅱ)三角形BDEの外接円の半径は、BD=ク/ケのとき最小値√コ/サをと      る。 ア~サの値を求めよ。 以上です。それで私が出した解答は、 (1)AC^2=64・9-2・24・1/2 =49 AC=7・・・ア       S=1/2・3・8・sin60°     =6√3・・・イ√ウ (2)(ⅰ)△DBEの面積が△ABCの1/6なので    6√3×1/6=√3 2BD+BE=7よりBE=7-2BD BD=x,BE=yとおくとy=7-2x △DBEにおいて    S=1/2・BD・BE・sin60゜=√3 =1/2xy・√3/2=√3 xy=4 より    x(7-2x)=4 x=7√17/4=BD・・・エ√オカ/キ この後がわかりません。またこれまでの解答はこれで良いのでしょうか?? アドバイスお願いします。

  • VB6で他のアプリへ左右のCTRLキーを送る方法

    先に「Excel VBA で CTRLキーを送る方法」と題して質問したものです。 VB6でSendInputを使うアドバイスを頂きCTRLを送ることが出来たので解決したと思っていましたが、左右のキーの判断が出来ていないようです。 下記のコードを実行形式にしてたとき、引数の如何にかかわらず、受け取る側(YourAppli.ws)では右のCTRLを受け取った動作をします。左のCTRL(Zキーに近い方)を受け取った動作をしてくれません。 アプリケーションに左右のCTRLを認識させる方法をご教示お願いします。 コードの作成は http://mt-soft.sakura.ne.jp/web_dl/vb-parts/key_sendinput/​を参考に致しました。 Option Explicit Private Type KEYBDINPUT wVk As Integer wScan As Integer dwFlags As Long time As Long dwExtraInfo As Long no_use1 As Long no_use2 As Long End Type Private Type INPUT_TYPE dwType As Long xi As KEYBDINPUT End Type '仮想キーコード Private Const KEYEVENTF_KEYUP = &H2 'キーアップ Private Const KEYEVENTF_EXTENDEDKEY = &H1 'スキャンコードは拡張コード Private Const INPUT_KEYBOARD = 1 '入力タイプ:キーボード Private Const VK_CTRL = &H11 'Contorol Private Const VK_LCONTROL = &HA2 'Left_Contorol Private Const VK_RCONTROL = &HA3 'Right_Contorol Private Const VK_RETURN = &HD 'Right_Contorol Private Const KEY_DOWN = 0 'キー押し下げ Private Const KEY_UP = 1 'キーアップ '仮想キーコード・ASCII値・スキャンコード間でコードを変換する Private Declare Function MapVirtualKey Lib "user32" _ Alias "MapVirtualKeyA" (ByVal wCode As Long, _ ByVal wMapType As Long) As Long 'キーストローク、マウスの動作、ボタンのクリックをシミュレートする Private Declare Function SendInput Lib "user32.dll" _ (ByVal nInputs As Long, pInputs As INPUT_TYPE, _ ByVal cbsize As Long) As Long ' 指定時間Wait(ミリ秒) Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub Main() Const AppID = "YourAppli.ws" Dim i As Integer AppActivate AppID Select Case Command Case "L", "l" Send_LCtrl Case "R", "r" Send_RCtrl Case "" Send_Ctrl Case Else MsgBox ("Error") End Select Sleep 50 End Sub Private Sub Send_LCtrl() Call KeyEvent(VK_LCONTROL, KEY_DOWN) Call KeyEvent(VK_LCONTROL, KEY_UP) End Sub Private Sub Send_RCtrl() Call KeyEvent(VK_RCONTROL, KEY_DOWN) Call KeyEvent(VK_RCONTROL, KEY_UP) End Sub Private Sub Send_Ctrl() Call KeyEvent(VK_CTRL, KEY_DOWN) Call KeyEvent(VK_CTRL, KEY_UP) End Sub Sub KeyEvent(VkKey As Integer, UpDown As Integer) ' VkKey:仮想キーコード ' UpDown:動作(KEY_DOWN/KEY_UP) ' Dim inputevents As INPUT_TYPE With inputevents .dwType = INPUT_KEYBOARD With .xi .wVk = VkKey '操作キーコード .wScan = MapVirtualKey(VkKey, 0) 'スキャンコード If UpDown = KEY_DOWN Then 'キーDown .dwFlags = KEYEVENTF_EXTENDEDKEY Or 0 Else 'キーUP .dwFlags = KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP End If .time = 0 .dwExtraInfo = 0 End With End With Call SendInput(1, inputevents, Len(inputevents)) End Sub

  • 1986年の共通一次試験数学の問題です

    難しくて解けません。解説も御願いします。 【1】  AB=AC= 1 ,BAC =90 である直角三角形 ABC の辺 AB , BC ,CA 上に,それぞれ点 P ,Q ,R があり, AP=CR= x, BQ=2 x を満たしている.このとき, (1)  PR2 ,QP2 , RQ2 を x を用いて表すと,PR2= ア x 2- イ x+ ウ QP2= エ x2 - オ x+ カ RQ2= キ x 2- ク x+ ケ である. (2)  P が A ,B のいずれとも異なるとき, APR , BQP, CRQ の外接円の半径は,それぞれ コ サ PR , シ 2 QP, ス 2 RQ である. (3) (2)の三つの外接円の面積をそれぞれ S 1, S2 , S3 で表す. x が 0 と 1 の間を動くとき, S1+ S2+ S3 は x= セ ソ で最小値 タ チ をとる. よろしく御願いします。

  • キーコード

    本格ソフトの中にユーザーIDとキーコードが書いてありました。医学総合のキーコードですが、どこに入力すればいいのですか?

  • キーコードって何ですか?

    ソフトを半年ほど使って、しばらく経ってから最近使い始めました。ところが立ち上げる時キーコードを要求する画面が現れてきました。今まで、キーコード無しで立ち上がっていたのが、どうして突然現れてきたのですか? このナンバーは記憶にありませんので、このソフトの利用が出来ません。 OSの再インストールをした矢先なので、それ以前では、問題なくソフトは動いていました。他のパソコンでも、同じキーコードを要求してきます。

  • キーコードの調べ方

    バージョンアップのときにユーザーID,パスワードは製品パッケージに書いてありますがキーコードが分からないとできません。どのように調べたらよいのでしょうか?

  • キーコード

    いきなりPDF 2 ダウンロウド版  スグレモノ ダウンロウド版   を解凍してパソコンに取り込んでユーザ情報画面でスグレモノのインストールで キーコード入力するとシリアル番号が間違っていますでます、と何回も 入力し直してもでます。いきなりPDF 2 は 正常にいきました。宜しくお願いします。

  • キーコードがとれました

    タイトルどうりノートパソコンのキーコード「の部分がとれました、直そうとしましたが斜めに片寄ったりして直せないですけど、なにかわかりやすい画像をのせたHPはりませんか?