私のラップトップには数字パッドがありますが、NumLockキーはありません。数字パッドは文字の上にある数字の行のコピーです。これは、これらのキーを押したときに送信される仮想キーコードによって確認されます。ラップトップでのAltコードの作成なし
altキーと通常の数字が押されたときにaltコードを模倣する小さなプログラムを開発しようとしています。私は低レベルのキーボードフックを使用します(私は別のプログラムで動作する同様のフォーマットを持っています)。そして、どちらかのaltキーが押されているかどうかを確認します。いずれかの場合は、VKコード0x30-0x39(0-9キー)をループします。その瞬間にそれらのうちの1つが押されると、私は実際のキーストロークを破棄して1の値を返し、その代わりにそのキーの数値パッドバージョンを送ります(この時点でaltはまだ押されています)。
フックに達していて、altキーがダウンしていることを確認できました。しかし、私が0-9で一致するかどうかを確認するときは、その後に何もマッチしない前にカップルだけが表示されるか、番号を押すたびにaltキーを押し上げる必要があります。さらに、数値を押したaltを解放してからaltキーを押しながら別の番号を押すと16回印刷されます(これは16xです)。
また、SendInputシーケンスが、フックからその部品をコピーし、それをメイン関数に入れ、iを0x30に置き換えることで動作することを確認できます。実行時に、0がテキスト文書に入力されます。
テキスト文書でALT(下)+ 6 + 5 + ALT(上)を押し続けると、「65」が表示されます。別のALT(下)+6を追加すると、16個の16個が表示されます。
フック手順:
LRESULT CALLBACK proc (int code, WPARAM wParam, LPARAM event) //hook proc
{
if (code < HC_ACTION) //don't process if not meant to
return CallNextHookEx (0, code, wParam, event);
if (GetAsyncKeyState (VK_MENU) & 0x8000) //if either alt is down
{
for (int i = 0x30; i <= 0x39; ++i) //loop 0-9
{
if (GetAsyncKeyState (i) & 0x8000) //if index is down
{
cout << "MATCH\n"; //debug
input.ki.wVk = i + 0x30; //set VK code to numpad version of index
input.ki.dwFlags = 0; //key is being pressed
SendInput (1, &input, sizeof (INPUT)); //send keystroke down
input.ki.dwFlags = KEYEVENTF_KEYUP; //key is being released
SendInput (1, &input, sizeof (INPUT)); //send keystroke up
while (GetAsyncKeyState (i) & 0x8000) //wait for normal key to be released
Sleep (10); //don't hog CPU
return 1; //discard normal key
} //end if match
} //end for
} //end if alt
return CallNextHookEx (0, code, wParam, event); //if any key not handled, pass on
} //end function
私はあなたがキーコードを確認したことがわかりますが、私は依然として質問しています。あなたはnumlockキーを持っていませんか?ラップトップでは色分けされていて、挿入や一時停止など、他のキーとスペースを共有していることがよくあります。いくつかの "fn"ボタンや何かを押して起動します。 – davogotland
私は検索して検索しました。私は最初にこれを気付きました。別のバイヤーからのコメントで購入しました。 Asus G74SX-XA1に興味があります。 – chris
おっとり..お悔やみ – davogotland