2012-01-13 13 views
1

私のラップトップには数字パッドがありますが、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 
+0

私はあなたがキーコードを確認したことがわかりますが、私は依然として質問しています。あなたはnumlockキーを持っていませんか?ラップトップでは色分けされていて、挿入や一時停止など、他のキーとスペースを共有していることがよくあります。いくつかの "fn"ボタンや何かを押して起動します。 – davogotland

+0

私は検索して検索しました。私は最初にこれを気付きました。別のバイヤーからのコメントで購入しました。 Asus G74SX-XA1に興味があります。 – chris

+0

おっとり..お悔やみ – davogotland

答えて

0

まあ、私は最終的に戻ってこれに来て、いくつかのより多くのテストの後、私は、プログラムの送信は、[ALT] [num6] [num5] [ALT]全く何もしないことを発見しました。私は、これらのキーを持っていないにもかかわらず、Macキーボード上のボリュームコントロールキーをシミュレートできるので、この奇妙なことがわかります。

コンピュータは単にaltコードを送信できないため、私は何千もの文字をマップしない限り、この便利なツールは戸惑うと宣言します。

EDIT:

は、ここでは、G74SX-XA1に取り組んで数字パッドを得るために行うために必要なものです:

  1. 202点の作品かどう(私は知らないBIOS 203をダウンロードし、私は201から203に行きました)。
  2. ファイルをFAT32形式のフラッシュドライブに保存します。
  3. コンピュータを再起動し、F4キーを押してEasyFlashに右折するか、BIOS経由で移動します。付属のWinflashプログラムは動作しません。
  4. フラッシュドライブ上の更新されたBIOSファイルを選択します。
  5. numlockのライトは常にオンになり、数字パッドは数字パッドの仮想キーコードを持ち、文字の上の数字は表示しません。これには当然ALTコードが含まれます。
関連する問題