I've restarted to modify one of my previous programs in vb6.0and I'm having a problem: how could you let the program know when the ctrl button is pressed down when the form isn't active
someone told me to hook my keyboard, but what's that ?
Last edited by ikkeugh; 11-30-2008 at 10:23 AM.
Hello,ikkeugh!
I can add a timer to the form and set the interval.
Then declare the API Function:
If you use GetAsyncKeyState(KeyCode) and return a negtive number, it means that you have press down the key which the virtual KeyCode maps to.Code:Public Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As Long) As Integer
You enter:
And I give you the KeyCode List Module:Code:Public Function HotKey(tKey As Long) As Boolean HotKey = (GetAsyncKeyState(tKey) < 0) End Function
Attribute VB_Name = "KeyModule"
e.g.Code:Public Function RKeyName(UKeyCode As String, ReKey As Integer) As Integer If Len(UKeyCode) = 1 And ((Asc(UKeyCode) > 47 And Asc(UKeyCode) < 58) Or (Asc(UKeyCode) > 64 And Asc(UKeyCode) < 91)) Then RKeyName = Asc(UKeyCode) ElseIf (Len(UKeyCode) = 2 Or Len(UKeyCode) = 3) And Asc(Left$(UKeyCode, 1)) = 70 Then RKeyName = Asc(Right$(UKeyCode, Len(UKeyCode) - 1)) + 63 ElseIf Len(UKeyCode) = 5 And (Asc(Right$(UKeyCode, 1)) > 47 And Asc(Right$(UKeyCode, 1)) < 58) Then RKeyName = Asc(Right$(UKeyCode, 1)) Else Select Case UKeyCode Case "Enter" RKeyName = 13 Case "Esc" RKeyName = 27 Case "Space" RKeyName = 32 Case "Caps Lock" RKeyName = 20 Case "Page Up" RKeyName = 33 Case "Page Down" RKeyName = 34 Case "End" RKeyName = 35 Case "Home" RKeyName = 36 Case "←" RKeyName = 37 Case "↑" RKeyName = 38 Case "→" RKeyName = 39 Case "↓" RKeyName = 40 Case "Insert" RKeyName = 45 Case "Delete" RKeyName = 46 Case "Num Lock" RKeyName = 144 Case "Pause Break" RKeyName = 19 Case "NUM /" RKeyName = 111 Case "NUM *" RKeyName = 106 Case "NUM -" RKeyName = 109 Case "NUM +" RKeyName = 107 Case "NUM ." RKeyName = 110 Case "`" RKeyName = 192 Case "-" RKeyName = 189 Case "=" RKeyName = 187 Case "Scroll Lock" RKeyName = 145 Case "\" RKeyName = 220 Case "Back" RKeyName = 8 Case "[" RKeyName = 219 Case "]" RKeyName = 221 Case ";" RKeyName = 186 Case "'" RKeyName = 222 Case "," RKeyName = 188 Case "." RKeyName = 190 Case "/" RKeyName = 191 Case Else RKeyName = ReKey End Select End If End Function Public Function UKeyName(KeyCode As Integer, ReKey As String) As String If (KeyCode > 64 And KeyCode < 91) Or (KeyCode > 47 And KeyCode < 58) Then UKeyName = Chr(KeyCode) ElseIf KeyCode > 95 And KeyCode < 106 Then UKeyName = "NUM " + Chr(KeyCode - 48) ElseIf KeyCode > 111 And KeyCode < 124 Then UKeyName = "F" + Chr(KeyCode - 63) Else Select Case KeyCode Case 13 UKeyName = "Enter" Case 27 UKeyName = "Esc" Case 32 UKeyName = "Space" Case 20 UKeyName = "Caps Lock" Case 33 UKeyName = "Page Up" Case 34 UKeyName = "Page Down" Case 35 UKeyName = "End" Case 36 UKeyName = "Home" Case 37 UKeyName = "←" Case 38 UKeyName = "↑" Case 39 UKeyName = "→" Case 40 UKeyName = "↓" Case 45 UKeyName = "Insert" Case 46 UKeyName = "Delete" Case 144 UKeyName = "Num Lock" Case 19 UKeyName = "Pause Break" Case 111 UKeyName = "NUM /" Case 106 UKeyName = "NUM *" Case 109 UKeyName = "NUM -" Case 107 UKeyName = "NUM +" Case 110 UKeyName = "NUM ." Case 192 UKeyName = "`" Case 189 UKeyName = "-" Case 187 UKeyName = "=" Case 145 UKeyName = "Scroll Lock" Case 220 UKeyName = "\" Case 8 UKeyName = "Back" Case 219 UKeyName = "[" Case 221 UKeyName = "]" Case 186 UKeyName = ";" Case 222 UKeyName = "'" Case 188 UKeyName = "," Case 190 UKeyName = "." Case 191 UKeyName = "/" Case Else UKeyName = ReKey End Select End If End Function
Ctrl + A : If HotKey(17)=True And Hotkey(65)=True Then ...
Thanks, could you also let it happen like this
when the button pressed in and when it's released, it lets an action occure.Code:Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyControl Then Drawing = true
Ok, I give you a fast solution:
And you can use the hook function and SendMessage function (they're members of API functions) to hook key envents. It is a little complex, however.Code:Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer Dim Pressed As Boolean Private Function HotKey(tKey As Long) As Boolean HotKey = (GetAsyncKeyState(tKey) < 0) End Function Private Sub Timer1_Timer() If HotKey(17) = True Then Pressed = True If HotKey(17) = False And Pressed = True Then 'Your Code Drawing = true Pressed = False End If End Sub
Thanks, that helped!!!
but you don't really need the module to let is work ,isn't it ?
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks