如何切換用 NUM LOCK、 大寫鎖定和鎖定捲動鍵

文章翻譯 文章翻譯
文章編號: 177674 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文將告訴您如何切換 NUM LOCK,大寫鎖定在 [Windows 95、 Windows 98、 Windows Me、 Windows NT 或 Windows 2000 的鎖定 AND 捲動索引鍵。

其他相關資訊

若要切換 NUM LOCK、 大寫鎖定或鎖定捲動鍵,您可以使用下列邏輯:
  1. 使用 GetKeyboardState 函數來判斷索引鍵的狀態。
  2. 判斷哪一個作業系統可搭配 GetVersionEx API。 (Windows 95/98/Me 和 Windows NT/2000年需要不同的方法。 切換這些機碼)
  3. 在 [Windows 95、 Windows 98 或 Windows Me,使用 SetKeyboardState API 函數來設定索引鍵的狀態。在 [Windows NT 或 Windows 2000,使用 keybd_event 函數來模擬按下按鍵。

此範例將示範如何切換到 「 開啟 」 這些三個機碼,如果他們是 「 關閉 」。這個範例可能輕易地修改切換關閉或只是要檢查其狀態。

範例專案

  1. 在 Visual Basic 中啟動新的標準 EXE 專案。預設會建立 Form1。
  2. Form1 新增一個指令按鈕。
  3. 將下列程式碼加入至 Form1 的一般宣告區段:
          ' Declare Type for API call:
          Private Type OSVERSIONINFO
            dwOSVersionInfoSize As Long
            dwMajorVersion As Long
            dwMinorVersion As Long
            dwBuildNumber As Long
            dwPlatformId As Long
            szCSDVersion As String * 128   '  Maintenance string for PSS usage
          End Type
    
          ' API declarations:
    
          Private Declare Function GetVersionEx Lib "kernel32" _
             Alias "GetVersionExA" _
             (lpVersionInformation As OSVERSIONINFO) 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)
    
          Private Declare Function GetKeyboardState Lib "user32" _
             (pbKeyState As Byte) As Long
    
          Private Declare Function SetKeyboardState Lib "user32" _
             (lppbKeyState As Byte) As Long
    
          ' Constant declarations:
          Const VK_NUMLOCK = &H90
          Const VK_SCROLL = &H91
          Const VK_CAPITAL = &H14
          Const KEYEVENTF_EXTENDEDKEY = &H1
          Const KEYEVENTF_KEYUP = &H2
          Const VER_PLATFORM_WIN32_NT = 2
          Const VER_PLATFORM_WIN32_WINDOWS = 1
    
  4. 將下列程式碼加入至指令按鈕的 Click 事件:
        Private Sub Command1_Click()
          Dim o As OSVERSIONINFO
          Dim NumLockState As Boolean
          Dim ScrollLockState As Boolean
          Dim CapsLockState As Boolean
    
          o.dwOSVersionInfoSize = Len(o)
          GetVersionEx o
          Dim keys(0 To 255) As Byte
          GetKeyboardState keys(0)
    
          ' NumLock handling:
          NumLockState = keys(VK_NUMLOCK)
          If NumLockState <> True Then    'Turn numlock on
            If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then  '=== Win95/98
    
              keys(VK_NUMLOCK) = 1
              SetKeyboardState keys(0)
            ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then   '=== WinNT
            'Simulate Key Press
              keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
            'Simulate Key Release
              keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY _
                 Or KEYEVENTF_KEYUP, 0
            End If
          End If
    
          ' CapsLock handling:
          CapsLockState = keys(VK_CAPITAL)
          If CapsLockState <> True Then    'Turn capslock on
            If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then  '=== Win95/98
              keys(VK_CAPITAL) = 1
              SetKeyboardState keys(0)
            ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then   '=== WinNT
            'Simulate Key Press
              keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
            'Simulate Key Release
              keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY _
                 Or KEYEVENTF_KEYUP, 0
            End If
          End If
    
          ' ScrollLock handling:
          ScrollLockState = keys(VK_SCROLL)
          If ScrollLockState <> True Then    'Turn Scroll lock on
            If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then  '=== Win95/98
              keys(VK_SCROLL) = 1
              SetKeyboardState keys(0)
            ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then   '=== WinNT
            'Simulate Key Press
              keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
            'Simulate Key Release
              keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY _
                Or KEYEVENTF_KEYUP, 0
            End If
          End If
        End Sub
    
  5. 按下 F5 鍵以執行程式。按一下指令按鈕。大寫鎖定、 NUM LOCK 和鎖定捲動鍵的狀態應該會 「 開啟 」。

?考

如需詳細資訊請參閱下列文件 「 Microsoft 知識庫 」 中:
127190: 如何切換 NUM LOCK、 大寫鎖定和鎖定捲動鍵

屬性

文章編號: 177674 - 上次校閱: 2004年7月13日 - 版次: 2.1
這篇文章中的資訊適用於:
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
關鍵字:?
kbmt kbhowto KB177674 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:177674
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com