|
2018年2月6日作者:ExcelOffice 鍵盤的工作原理: 當(dāng)用戶按下鍵盤上的一個鍵時,鍵盤內(nèi)的芯片會檢測到這個動作,并把這個信號傳送到計算機。如何區(qū)別是哪一個鍵被按下了呢?鍵盤上的所有按鍵都有一個編碼,稱作鍵盤掃描碼。當(dāng)你按下一個鍵時,這個鍵的掃描碼就被傳給系統(tǒng)。掃描碼是跟具體的硬件相關(guān)的,同一個鍵,在不同鍵盤上的掃描碼有可能不同。鍵盤控制器就是將這個掃描碼傳給計算機,然后交給鍵盤驅(qū)動程序。鍵盤驅(qū)動程序會完成相關(guān)的工作,并把這個掃描碼轉(zhuǎn)換為鍵盤虛擬碼。什么是虛擬碼呢?因為掃描碼與硬件相關(guān),不具有通用性,為了統(tǒng)一鍵盤上所有鍵的編碼,于是就提出了虛擬碼概念。無論什么鍵盤,同一個按鍵的虛擬碼總是相同的,這樣程序就可以識別了。簡單點說,虛擬碼就是我們經(jīng)??梢钥吹降南馰K_A,VK_B這樣的常數(shù),比如鍵A的虛擬碼是65,寫成16進制就是&H41,注意,人們經(jīng)常用16進制來表示虛擬碼。當(dāng)鍵盤驅(qū)動程序把掃描碼轉(zhuǎn)換為虛擬碼后,會把這個鍵盤操作的掃描碼和虛擬碼還有其它信息一起傳遞給操作系統(tǒng)。然后操作系統(tǒng)則會把這些信息封裝在一個消息中,并把這個鍵盤消息插入到消息列隊。最后,要是不出意外的話,這個鍵盤消息最終會被送到當(dāng)前的活動窗口那里,活動窗口所在的應(yīng)用程序接收到這個消息后,就知道鍵盤上哪個鍵被按下,也就可以決定該作出什么響應(yīng)給用戶了。這個過程可以簡單的如下表示: 用戶按下按鍵—–鍵盤驅(qū)動程序?qū)⒋耸录鬟f給操作系統(tǒng)—–操作系統(tǒng)將鍵盤事件插入消息隊列—–鍵盤消息被發(fā)送到當(dāng)前活動窗口。 api函數(shù)keybd_event可以實現(xiàn)鍵盤的各種個操作。 它的語法如下: Visual Basic VOID WINAPI keybd_event( _In_ BYTE bVk, _In_ BYTE bScan, _In_ DWORD dwFlags, _In_ ULONG_PTR dwExtraInfo );
其中bVk參數(shù)為按鍵的虛擬碼,具體的按鍵的虛擬碼可以見鏈接。 bScan參數(shù) 為按鍵的掃描碼,一般可以不提供,直接輸入0。 以下代碼是api函數(shù)keybd_event實現(xiàn)按下F2鍵的效果: Visual Basic Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Const KEYEVENTF_KEYUP = &H2 Const VK_F2 = &H71 Sub QQ1722187970() '按下F2 keybd_event VK_F2, 0, 0, 0 '釋放F2 keybd_event VK_F2, 0, KEYEVENTF_KEYUP, 0 End Sub
|
|
|