2016-01-14 51 views
0

我正在爲使用Windows Embedded Handheld 6.5 Classic的手持式條形碼掃描器編寫程序。在Windows Embedded Handheld 6.5 Classic中按住Shift鍵停留

我在表單上添加了一個LinkLabel,並對它進行了編碼,這樣當您按下Shift並單擊鏈接時,它會彈出一個輸入框供您輸入密碼(我將用一個實際的表單替換它但它暫時是一個輸入框)

當我放開班次並開始使用物理鍵輸入密碼(它當前是4位數字)時,它將第一個字符視爲我仍在握住轉移。

在代碼中,是否有任何方法將其還原回來,以免按下換檔? 我試圖使用keybd_event api,它似乎並不工作

這是我試過,但我似乎無法找到其他任何東西嘗試。

Public Declare Sub keybd_event Lib "coredll.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer) 

Private Sub lblTitle_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblTitle.Click 
    Try 
     If GetKeyState(Keys.ShiftKey) = 0 Then Exit Sub 

     Dim StaffPassword as String = "1234" 
     Dim _Continue As Boolean = False 

     keybd_event(VK_Shift, 0, KEYEVENTF_KEYDOWN, 0) 
     keybd_event(VK_Shift, 0, KEYEVENTF_KEYUP, 0) 

     Do Until _Continue 
      Dim _Password As String = InputBox("Please enter the staff password to go into the Admin Screen.", "Enter Password", "", True) 

      If Not _Password = StaffPassword Then 
       Dim _Ans As MsgBoxResult = MsgBox("You entered an incorrect password!" & vbNewLine & vbNewLine & "Would you like to try again?", MsgBoxStyle.Exclamation + MsgBoxStyle.YesNo, "Incorrect Password") 

       If _Ans = MsgBoxResult.No Then Exit Sub 
      Else 
       _Continue = True 
      End If 
     Loop 

     frmAdmin.ShowDialog() 
    Catch ex As Exception 
     MsgBox(ex.ToString, MsgBoxStyle.Critical, "Error") 
    End Try 
End Sub 

請問能有人幫忙嗎?

+0

嘗試將兩個語句組合成一個:'keybd_event(VK_Shift,0,KEYEVENTF_KEYDOWN或KEYEVENTF_KEYUP,0)' –

+0

感謝您的建議,但它沒有奏效。該設備似乎將它保存在內存中,不管按鍵是否按下,即使您還沒有按下它。當輸入文本信息等時,它使得它更容易,所以你按下shift鍵(而不是按住),然後它將大寫下一個字符。 –

+0

在你的代碼中使用ToUpper()或者使用VK_CAPITAL(0x14)而不是VK_SHIFT(0x10) – josef

回答

0

我知道你想恢復轉換效果,但也許一個簡單的解決方法可以做到這一點。我只是建議這種方法,因爲Windows CE設備通常有非標準(硬件)鍵盤,其驅動程序並不總是完美的。

由於您只希望數字,您可以嘗試檢測非數字字符並將其映射到鍵盤上的相應數字。