2014-01-10 14 views
6
#include <conio.h> 

int main (void) 
{ 
    for (;;) 
    { 
     unsigned char ch = getch(); 
     printf ("0x%02X\n", ch); 
    } 
} 

我想獲取掃描碼。getch()真的得到了什麼?掃描碼?

下面是從Wikipedia的描述:

Reads a character directly from the console without buffer, and without echo. 

當我按下德爾,它示出了取0xE0 0x53。

當我按下Ctrl + PgUp,它顯示0xE0 0x86。

儘管有些與表格相同,但它顯示的大部分值都不同於它。

那麼,getch()真的會得到掃描碼嗎?

下面是掃描碼錶(設置2,最常用的)

Scan Code

+0

通常情況下,我不會在適當的時候不喜歡使用'goto'。但這裏不合適;無限循環將是更好的選擇。 – glglgl

+0

@glglgl編輯。感謝您的建議。 :-) –

+0

是否真的是你使用的代碼?它應該打印一個三位數字後加十六進制的零填充十進制數字。我很好奇,因爲0x86似乎只是不可用,所以在某處沒有錯誤。數字鍵盤pg會發生什麼? – user3125280

回答

0

我在VS 2012(C++)跑了一個控制檯應用程序,並得到了相同的結果你。它確實說getch()已被棄用,我應該使用_getch(),但這沒有什麼區別。

然後我在這裏找到了一張匹配它的表格(最右邊一列)。對我來說,「白色」鍵是使用shift和數字小鍵盤的等效項,「灰色」鍵是獨立的頁面向上,頁面向下等。我發現的一個差異是在數字鍵盤上輸入的是與常規輸入鍵相同。

http://www.itlnet.net/programming/program/Reference/msc/ng7d68f.html

我不知道這個表的來源,其他如果你點擊「關於本指南」它說:「微軟C數據庫,版權所有(C)1987年,由彼得·諾頓」比。彼得得到它的地方,我不知道。

+1

Andries Brouwer在他的網站上詳細討論了不同的鍵盤掃描代碼:http://www.win.tue.nl/~aeb/linux/kbd/ scancodes-1.html –

+0

請原諒我,如果我錯了,但該表看起來類似於我發現的其他標準表,並且在他們中沒有0x86 – user3125280

+0

crud,你是對的。我一直在尋找86,但谷歌的點擊不斷提出其他的東西(x86),所以我專注於下翻代碼而不是頁碼代碼,並且最後忘了檢查兩者。 –