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