汇编中的扫描码、ASCII码(也称字符码)、扩展码、虚拟键码 的区别
掃描碼 是鍵盤對應按鍵的編碼 ,虛擬鍵碼 是操作系統對 “對應按鍵”的編碼,
鍵盤ASCII碼 ,是操作系統對“對應 虛擬鍵碼”的編碼(也稱ASCII字符碼或者字符碼)
鍵盤掃描碼:是每個鍵盤生產廠家為自己所生產的鍵盤設置的掃面方式,目的檢測是那個鍵被按下。
ASCII碼:是虛擬鍵碼對應的編碼。虛擬鍵碼是按照相關國際標準制定,全世界的計算機都要遵守。
虛擬鍵碼:為了解決不同鍵盤生產廠家生產鍵盤的排布或掃面方式不同,而建立的從鍵盤掃面到虛擬鍵碼的映射,(即實現鍵盤掃描到虛擬鍵碼的轉換)
虛擬鍵碼
在模擬鍵盤程序中會用到相關函數,其中有些步驟就是把正常的ASCII或者其他字符轉換成虛擬鍵碼!VkKeyScan就是將字符轉換成虛擬鍵碼用的。Windows開發者試圖通過定義所謂的虛擬鍵碼,以便經由與裝置無關的方式處理鍵盤,這就是產生虛擬鍵碼的目的!大多數虛擬鍵碼的名稱在WINUSER.H表頭檔案中都定義為以VK_開頭。其中數字和字母的虛擬鍵碼是ASCII碼。Windows程式幾乎從不使用這些虛擬鍵碼;實際上,程式使用的是ASCII碼字元的字元訊息。
虛擬指的是假定存在于思想中而不是現實世界中的一些事物,也只有熟練使用DOS組合語言編寫應用程式的程式寫作者才有可能指出,為什么對Windows鍵盤處理如此基本的鍵碼是虛擬的而不是真實的。
對於早期的程式寫作者來說,真實的鍵碼由實際鍵盤硬體產生。在Windows文件中將這些鍵碼稱為「掃描碼(scan codes)」。在IBM相容機種上,掃描碼16是Q鍵,17是W鍵,18是E、19是R,20是T,21是Y等等。這時您會發現,掃描碼是依據鍵盤的實際布局的。Windows開發者認為這些代碼過於與設備相關了,於是他們試圖通過定義所謂的虛擬鍵碼,以便經由與裝置無關的方式處理鍵盤。其中一些虛擬鍵碼不能在IBM相容機種上產生,但可能會在其他制造商生產的鍵盤中找到,或者在未來的鍵盤上找到。
您使用的大多數虛擬鍵碼的名稱在WINUSER.H表頭檔案中都定義為以VK_開頭。
當用戶按下某個鍵時,
1.鍵盤會檢測到這個動作,并通過 鍵盤控制器 把 掃描碼(scan code) 傳送到計算機; 鍵盤掃描碼跟具體的硬件有關的,不同廠商對同一個鍵的掃描碼有可能不同。
2.計算機接收到 掃描碼 后,將其交給 鍵盤 驅動程序 ;
3. 鍵盤驅動程序 把這個 掃描碼 轉換為 鍵盤虛擬碼 ; 虛擬碼與具體硬件無關,不同廠商的鍵盤,同一個鍵 的 虛擬碼 總是相同的。
4.然后,鍵盤驅動程序 把該鍵盤操作的 掃描碼 和 虛擬碼 以及 其它信息 傳遞給 操作系統;
5.操作 系統將獲得 的信息封裝在一個 鍵盤消息 中,并把該 鍵盤消息 插入到 消息列隊。 6.通過Windows的 消息系統,該 鍵盤消息 被送到 某個窗口 中;
7.窗口所在的應用程序 接收到消息后,可以了解到有關 鍵盤操作的信息,然后決定作出一定的響應
總結
以上是生活随笔為你收集整理的汇编中的扫描码、ASCII码(也称字符码)、扩展码、虚拟键码 的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 冒泡排序(O(n^2))
- 下一篇: 键盘I/O中断调用(INT 16H)和常