ASCII矢印キーの値は何ですか?(上/下/左/右)
これらのキーには実際のアスキーコードはないため、これらのキーのスキャンコードを確認する必要があります。これは、 helppc の情報に従って、キーコードの作成とブレークとして知られています。コードが「ascii」に聞こえるのは、キーコードが古いBIOS割り込み0x16とキーボード割り込み0x9によって処理されるためです。
Normal Mode Num lock on Make Break Make Break 下矢印E0 50 E0 D0 E0 2A E0 50 E0 D0 E0 AA 左矢印E0 4B E0 CB E0 2A E0 4B E0 CB E0 AA 右矢印E0 4D E0 CD E0 2A E0 4D E0 CD E0 AA 上矢印E0 48 E0 C8 E0 2A E0 48 E0 C8 E0 AA
したがって、それぞれ0x50、0x4B、0x4D、0x48などのMakeキーコードのE0に続くコードを見ると、キーコードを見てそれらを「ascii」として扱うことで混乱が生じます...答えはしてはいけないプラットフォームが変わるとOSが変わるので、Windowsではそれらのキーに対応する仮想キーコードがあり、必ずしもBIOSと同じではないコード、VK_UP、VK_DOWN、VK_LEFT、VK_RIGHT ..これは、C++のヘッダーファイルwindows.hにあります。これは、SDKのincludeフォルダーで思い出します。
ここに示されているのと同じ「同一のASCII」コードをキーコードに依存しないでください。オペレーティングシステムは、OSが適合すると思われるものでBIOSコード全体を再プログラムします。 OS(現在は32ビット保護モード)、もちろんBIOSからのこれらのコードは無効になります。
したがって、元のキーボード割り込み0x9およびBIOS割り込み0x16は、BIOSが読み込んだ後、メモリから消去され、プロテクトモードOSが読み込みを開始すると、メモリのその領域を上書きし、独自の32ビットプロテクトモードハンドラーで置き換えて対処しますこれらのキーボードスキャンコードを使用します。
これは、Borland C v3を使用した、DOSプログラミングの昔のコードサンプルです。
#include <bios.h> int getKey(void){ int key、lo、hi; key = bioskey(0); lo = key&0x00FF; hi =(key&0xFF00)>> 8; return(lo == 0)? hi + 256:lo; }
このルーチンは、実際には、up、downのコードをそれぞれ328および336で返しました(実際には、左と右のコードはありません。これは私の古い料理本にあります!)実際のスキャンコードはlo
変数。 AZ、0-9以外のキーには、bioskey
ルーチンを介してスキャンコード0がありました。変数lo
のコードは0であり、hi
変数はスキャンコードを持ち、 'ascii'コードと混同しないように256を追加します...
要するに:
左矢印:37
上矢印:38
右矢印:39
下矢印:40
実際、この質問に対する答えは、使用しているオペレーティングシステムとプログラミング言語によって異なります。 「ASCIIコード」自体はありません。オペレーティングシステムは、ユーザーが矢印キーを押したことを検出し、プログラムがキャプチャできるイベントをトリガーします。たとえば、最新のWindowsマシンでは、WM_KEYUPまたはWM_KEYDOWNイベントを取得します。通常、16ビット値を渡して、プッシュされたキーを判別します。
以下のアスキー値:
上キー-224 72
ダウンキー-224 80
左キー-224 75
右キー-224 77
これらのそれぞれは、単に36である$のコードとは対照的に、特別なキーであるため、ascii値に2つの整数値を持っています。これらの2バイトの特別なキーは、通常、224または0 WindowsのF#または削除キーで見つかりました。
編集:これは実際には振り返ってユニコードかもしれませんが、彼らは動作します。
OpenGLでプログラミングしている場合は、GLUTを使用します。次のページが役立ちます。 http://www.lighthouse3d.com/opengl/glut/index.php?5
GLUT_KEY_LEFT Left function key
GLUT_KEY_RIGHT Right function key
GLUT_KEY_UP Up function key
GLUT_KEY_DOWN Down function key
void processSpecialKeys(int key, int x, int y) {
switch(key) {
case GLUT_KEY_F1 :
red = 1.0;
green = 0.0;
blue = 0.0; break;
case GLUT_KEY_F2 :
red = 0.0;
green = 1.0;
blue = 0.0; break;
case GLUT_KEY_F3 :
red = 0.0;
green = 0.0;
blue = 1.0; break;
}
}
この小さなC++プログラムをコンパイルし、実行することで確認できます。
#include <iostream>
#include <conio.h>
#include <cstdlib>
int show;
int main()
{
while(true)
{
int show = getch();
std::cout << show;
}
getch(); // Just to keep the console open after program execution
}
プログラミング目的でナビゲーションをアクティブ化するための特別な機能を利用できます。以下にサンプルコードを示します。
void Specialkey(int key, int x, int y)
{
switch(key)
{
case GLUT_KEY_UP:
/*Do whatever you want*/
break;
case GLUT_KEY_DOWN:
/*Do whatever you want*/
break;
case GLUT_KEY_LEFT:
/*Do whatever you want*/
break;
case GLUT_KEY_RIGHT:
/*Do whatever you want*/
break;
}
glutPostRedisplay();
}
これをメイン関数に追加します
glutSpecialFunc(Specialkey);
これが問題を解決することを願っています!
矢印文字のASCIIコードは次のとおりです。↑24↓25→26←27
Windowsのキーボードから値を取得すると、次のことがわかります。