VB键盘代码
- 格式:doc
- 大小:126.00 KB
- 文档页数:3
‘这是程序的核心代码,其他一些辅助的模块代码,请进VB源代码相关Private Sub Command1_Click()If (Text1.Text Like "[a-z]" Or Text1.Text Like "[0-9]" Or Text1.Text = "ENTER" Or Text1.Text = "enter" Or Text1.Text = "Enter") And Text2.Text <> "" ThenTimer1.Enabled = TrueText1.Enabled = FalseText2.Enabled = FalseCommand1.Enabled = FalseCommand2.Enabled = TrueElse: MsgBox "请仔细阅读提示,然后再输入!", , "提示"End IfEnd SubPrivate Sub Label4_Click()ShellExecute 0, "open", "/u/2461456205", vbNullString, vbNullString, 3 End SubPrivate Sub Text1_Change()Text1.MaxLength = 5End SubPrivate Sub Text2_KeyPress(KeyAscii As Integer)If KeyAscii <> 8 And KeyAscii < Asc(0) Or KeyAscii > Asc(9) Then KeyAscii = 0End SubPrivate Sub Command2_Click()Timer1.Enabled = FalseCommand1.Enabled = TrueCommand2.Enabled = FalseText1.Enabled = TrueText2.Enabled = TrueEnd SubPrivate Sub Form_Load()If Dir(App.Path & "\skin.urf") <> "" ThenDim bRes As BooleanbRes = SkinStart(App.Path & "\skin.urf", 2, "RQPJNW0N0V2QRMAP1KXVBHHDUVVQGUXR", 1, 0, 0)End IfLabel3.Caption = "1、键值:[小写a-z][0-9]" & vbCrLf & " [enter][ENTER][Enter]" & vbCrLf & "2、次数:只能是数字" & vbCrLf & "3、操作:最小化时会自动退至托盘后台执行!"Call CreatTray(Me, "显示/隐藏界面", "", "", 1)Timer1.Enabled = FalseCommand2.Enabled = FalseEnd SubPrivate Sub timer1_timer()On Error Resume NextIf Text1.Text = "a" ThenIf GetAsyncKeyState(vbKeyA) Then Dim i As IntegerFor i = 1 To Text2.TextSendKeys "{a}"Next iEnd IfElseIf Text1.Text = "b" ThenIf GetAsyncKeyState(vbKeyB) Then For i = 1 To Text2.TextSendKeys "{b}"Next iEnd IfElseIf Text1.Text = "c" ThenIf GetAsyncKeyState(vbKeyC) Then For i = 1 To Text2.TextSendKeys "{c}"Next iEnd IfElseIf Text1.Text = "d" ThenIf GetAsyncKeyState(vbKeyD) Then For i = 1 To Text2.TextSendKeys "{d}"Next iEnd IfElseIf Text1.Text = "e" ThenIf GetAsyncKeyState(vbKeyE) Then For i = 1 To Text2.TextSendKeys "{e}"Next iEnd IfElseIf Text1.Text = "f" ThenIf GetAsyncKeyState(vbKeyF) Then For i = 1 To Text2.TextSendKeys "{f}"Next iEnd IfElseIf Text1.Text = "g" ThenIf GetAsyncKeyState(vbKeyG) Then For i = 1 To Text2.TextSendKeys "{g}"Next iEnd IfElseIf Text1.Text = "h" ThenIf GetAsyncKeyState(vbKeyH) Then For i = 1 To Text2.TextSendKeys "{h}"Next iEnd IfElseIf Text1.Text = "i" ThenIf GetAsyncKeyState(vbKeyI) Then For i = 1 To Text2.TextSendKeys "{i}"Next iEnd IfElseIf Text1.Text = "j" ThenIf GetAsyncKeyState(vbKeyJ) Then For i = 1 To Text2.TextSendKeys "{j}"Next iEnd IfElseIf Text1.Text = "k" ThenIf GetAsyncKeyState(vbKeyK) Then For i = 1 To Text2.TextSendKeys "{k}"Next iEnd IfElseIf Text1.Text = "l" ThenIf GetAsyncKeyState(vbKeyL) Then For i = 1 To Text2.TextSendKeys "{l}"Next iEnd IfElseIf Text1.Text = "m" ThenIf GetAsyncKeyState(vbKeyM) Then For i = 1 To Text2.TextSendKeys "{m}"Next iEnd IfElseIf Text1.Text = "n" ThenIf GetAsyncKeyState(vbKeyN) Then For i = 1 To Text2.TextSendKeys "{n}"Next iEnd IfElseIf Text1.Text = "o" ThenIf GetAsyncKeyState(vbKeyO) Then For i = 1 To Text2.TextSendKeys "{o}"Next iEnd IfElseIf Text1.Text = "p" ThenIf GetAsyncKeyState(vbKeyP) Then For i = 1 To Text2.TextSendKeys "{p}"Next iEnd IfElseIf Text1.Text = "q" ThenIf GetAsyncKeyState(vbKeyQ) Then For i = 1 To Text2.TextSendKeys "{q}"Next iEnd IfElseIf Text1.Text = "r" ThenIf GetAsyncKeyState(vbKeyR) Then For i = 1 To Text2.TextSendKeys "{r}"Next iEnd IfElseIf Text1.Text = "s" ThenIf GetAsyncKeyState(vbKeyS) Then For i = 1 To Text2.TextSendKeys "{s}"Next iEnd IfElseIf Text1.Text = "t" ThenIf GetAsyncKeyState(vbKeyT) Then For i = 1 To Text2.TextSendKeys "{t}"Next iEnd IfElseIf Text1.Text = "u" ThenIf GetAsyncKeyState(vbKeyU) Then For i = 1 To Text2.TextSendKeys "{u}"Next iEnd IfElseIf Text1.Text = "v" ThenIf GetAsyncKeyState(vbKeyV) Then For i = 1 To Text2.TextSendKeys "{v}"Next iEnd IfElseIf Text1.Text = "w" ThenIf GetAsyncKeyState(vbKeyW) Then For i = 1 To Text2.TextSendKeys "{w}"Next iEnd IfElseIf Text1.Text = "x" ThenIf GetAsyncKeyState(vbKeyX) Then For i = 1 To Text2.TextSendKeys "{x}"Next iEnd IfElseIf Text1.Text = "y" ThenIf GetAsyncKeyState(vbKeyY) Then For i = 1 To Text2.TextSendKeys "{y}"Next iEnd IfElseIf Text1.Text = "z" ThenIf GetAsyncKeyState(vbKeyZ) Then For i = 1 To Text2.TextSendKeys "{z}"Next iEnd IfElseIf Text1.Text = "1" ThenIf GetAsyncKeyState(vbKey1) Then For i = 1 To Text2.TextSendKeys "{1}"Next iEnd IfElseIf Text1.Text = "2" ThenIf GetAsyncKeyState(vbKey2) Then For i = 1 To Text2.TextSendKeys "{2}"Next iEnd IfElseIf Text1.Text = "3" ThenIf GetAsyncKeyState(vbKey3) Then For i = 1 To Text2.TextSendKeys "{3}"Next iEnd IfElseIf Text1.Text = "4" ThenIf GetAsyncKeyState(vbKey4) ThenFor i = 1 To Text2.TextSendKeys "{4}"Next iEnd IfElseIf Text1.Text = "5" ThenIf GetAsyncKeyState(vbKey5) ThenFor i = 1 To Text2.TextSendKeys "{5}"Next iEnd IfElseIf Text1.Text = "6" ThenIf GetAsyncKeyState(vbKey6) ThenFor i = 1 To Text2.TextSendKeys "{6}"Next iEnd IfElseIf Text1.Text = "7" ThenIf GetAsyncKeyState(vbKey7) ThenFor i = 1 To Text2.TextSendKeys "{7}"Next iEnd IfElseIf Text1.Text = "8" ThenIf GetAsyncKeyState(vbKey8) ThenFor i = 1 To Text2.TextSendKeys "{8}"Next iEnd IfElseIf Text1.Text = "9" ThenIf GetAsyncKeyState(vbKey9) ThenFor i = 1 To Text2.TextSendKeys "{9}"Next iEnd IfElseIf Text1.Text = "0" ThenIf GetAsyncKeyState(vbKey0) ThenFor i = 1 To Text2.TextSendKeys "{0}"Next iEnd IfElseIf Text1.Text = "ENTER" Or Text1.Text = "enter" Or Text1.Text = "Enter" ThenIf GetAsyncKeyState(vbKeyReturn) Then For i = 1 To Text2.TextSendKeys "{enter}"Next iEnd IfEnd IfEnd SubPrivate Sub Timer2_Timer()Static c As Integerc = c + 1Select Case cCase 1Label4.ForeColor = vbGreenCase 2Label4.ForeColor = vbYellowCase 3Label4.ForeColor = vbBlueCase 4Label4.ForeColor = &HFF00&c = 0End SelectEnd Sub。
第0~32号及第127号(共34个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BEL(振铃)等;通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;第33~126号(共94个)是字符,其中第48~57号为0~9十个阿拉伯数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。
注意:在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。
所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。
奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。
为了便于查询,以下列出ASCII码表:常用ASCII 码对照表第128~255号为扩展字符(不常用),如需要请下载:完整的8位ASCII 字符表keycode 是键盘上每一个按键对应的码keycode如下:keycode 0 =keycode 1 =keycode 2 =keycode 3 =keycode 4 =keycode 5 =keycode 6 =keycode 7 =keycode 8 = BackSpace BackSpace keycode 9 = Tab Tabkeycode 10 =keycode 11 =keycode 12 = Clearkeycode 13 = Enterkeycode 14 =keycode 15 =keycode 16 = Shift_Lkeycode 17 = Control_Lkeycode 18 = Alt_Lkeycode 19 = Pausekeycode 20 = Caps_Lockkeycode 21 =keycode 22 =keycode 23 =keycode 24 =keycode 25 =keycode 26 =keycode 27 = Escape Escapekeycode 28 =keycode 29 =keycode 30 =keycode 31 =keycode 32 = space spacekeycode 33 = Priorkeycode 34 = Nextkeycode 35 = Endkeycode 36 = Homekeycode 37 = Leftkeycode 38 = Upkeycode 39 = Rightkeycode 40 = Downkeycode 41 = Selectkeycode 43 = Executekeycode 44 =keycode 45 = Insertkeycode 46 = Deletekeycode 47 = Helpkeycode 48 = 0 equal braceright keycode 49 = 1 exclam onesuperior keycode 50 = 2 quotedbl twosuperior keycode 51 = 3 section threesuperior keycode 52 = 4 dollarkeycode 53 = 5 percentkeycode 54 = 6 ampersandkeycode 55 = 7 slash braceleft keycode 56 = 8 parenleft bracketleft keycode 57 = 9 parenright bracketright keycode 58 =keycode 59 =keycode 60 =keycode 61 =keycode 62 =keycode 63 =keycode 64 =keycode 65 = a Akeycode 66 = b Bkeycode 67 = c Ckeycode 68 = d Dkeycode 69 = e E EuroSignkeycode 70 = f Fkeycode 71 = g Gkeycode 72 = h Hkeycode 73 = i Ikeycode 74 = j Jkeycode 75 = k Kkeycode 76 = l Lkeycode 77 = m M mukeycode 78 = n Nkeycode 79 = o Okeycode 80 = p Pkeycode 81 = q Q atkeycode 82 = r Rkeycode 83 = s Skeycode 84 = t Tkeycode 85 = u Ukeycode 87 = w Wkeycode 88 = x Xkeycode 89 = y Ykeycode 90 = z Zkeycode 91 =keycode 92 =keycode 93 =keycode 94 =keycode 95 =keycode 96 = KP_0 KP_0keycode 97 = KP_1 KP_1keycode 98 = KP_2 KP_2keycode 99 = KP_3 KP_3keycode 100 = KP_4 KP_4keycode 101 = KP_5 KP_5keycode 102 = KP_6 KP_6keycode 103 = KP_7 KP_7keycode 104 = KP_8 KP_8keycode 105 = KP_9 KP_9keycode 106 = KP_Multiply KP_Multiply keycode 107 = KP_Add KP_Add keycode 108 = KP_Separator KP_Separator keycode 109 = KP_Subtract KP_Subtract keycode 110 = KP_Decimal KP_Decimal keycode 111 = KP_Divide KP_Divide keycode 112 = F1keycode 113 = F2keycode 114 = F3keycode 115 = F4keycode 116 = F5keycode 117 = F6keycode 118 = F7keycode 119 = F8keycode 120 = F9keycode 121 = F10keycode 122 = F11keycode 123 = F12keycode 124 = F13keycode 125 = F14keycode 126 = F15keycode 127 = F16keycode 128 = F17keycode 129 = F18keycode 131 = F20 keycode 132 = F21 keycode 133 = F22 keycode 134 = F23 keycode 135 = F24 keycode 136 = Num_Lock keycode 137 = Scroll_Lock keycode 138 =keycode 139 =keycode 140 =keycode 141 =keycode 142 =keycode 143 =keycode 144 =keycode 145 =keycode 146 =keycode 147 =keycode 148 =keycode 149 =keycode 150 =keycode 151 =keycode 152 =keycode 153 =keycode 154 =keycode 155 =keycode 156 =keycode 157 =keycode 158 =keycode 159 =keycode 160 =keycode 161 =keycode 162 =keycode 163 =keycode 164 =keycode 165 =keycode 166 =keycode 167 =keycode 168 =keycode 169 =keycode 170 =keycode 171 =keycode 172 =keycode 173 =keycode 174 =keycode 175 =keycode 176 =keycode 177 =keycode 178 =keycode 179 =keycode 180 =keycode 181 =keycode 182 =keycode 183 =keycode 184 =keycode 185 =keycode 186 =keycode 187 = acute gravekeycode 188 = comma semicolon keycode 189 = minus underscore keycode 190 = period colonkeycode 191 =keycode 192 = numbersign apostrophe keycode 193 =keycode 194 =keycode 195 =keycode 196 =keycode 197 =keycode 198 =keycode 199 =keycode 200 =keycode 201 =keycode 202 =keycode 203 =keycode 204 =keycode 205 =keycode 206 =keycode 207 =keycode 208 =keycode 209 =keycode 210 = plusminus hyphen macron keycode 211 =keycode 212 = copyright registered keycode 213 = guillemotleft guillemotright keycode 214 = masculine ordfeminine keycode 215 = ae AEkeycode 216 = cent yenkeycode 217 = questiondown exclamdownkeycode 218 = onequarter onehalf threequarters keycode 219 =keycode 220 = less greater barkeycode 221 = plus asterisk asciitildekeycode 222 =keycode 223 =keycode 224 =keycode 225 =keycode 226 =keycode 227 = multiply divisionkeycode 228 = acircumflex Acircumflex keycode 229 = ecircumflex Ecircumflex keycode 230 = icircumflex Icircumflex keycode 231 = ocircumflex Ocircumflex keycode 232 = ucircumflex Ucircumflex keycode 233 = ntilde Ntildekeycode 234 = yacute Yacutekeycode 235 = oslash Oobliquekeycode 236 = aring Aringkeycode 237 = ccedilla Ccedillakeycode 238 = thorn THORNkeycode 239 = eth ETHkeycode 240 = diaeresis cedilla currency keycode 241 = agrave Agrave atilde Atilde keycode 242 = egrave Egravekeycode 243 = igrave Igravekeycode 244 = ograve Ograve otilde Otilde keycode 245 = ugrave Ugravekeycode 246 = adiaeresis Adiaeresiskeycode 247 = ediaeresis Ediaeresiskeycode 248 = idiaeresis Idiaeresiskeycode 249 = odiaeresis Odiaeresiskeycode 250 = udiaeresis Udiaeresiskeycode 251 = ssharp question backslash keycode 252 = asciicircum degreekeycode 253 = 3 sterlingkeycode 254 = Mode_switch。
VB键盘钩子源码:截取一切键盘按键(2011-07-15 10:52:11)转载▼分类:我的VB标签:杂谈1、UI设计:2、程序源码:(1)FrmHook源码Option ExplicitDim WithEvents Hook As ClsHook '创建一个需要事件支持的Hook为模块ClsHookPrivate Declare Function MapVirtualKeyEx Lib "user32" Alias "MapVirtualKeyExA" (ByVal uCode As Long, ByVal uMapType As Long, ByVal dwhkl As Long) As Long'根据指定的映射类型,执行不同的扫描码和字符转换'' uCode Long,欲转换的源字符或代码' uMapType Long,控制映射类型,如下所示' 0 —— uCode是个虚拟键码?函数返回相应的扫描码' 1 —— uCode是个扫描码?函数返回相应的虚拟键码' 2—— uCode是个虚拟键码。
函数返回相应的ASCII值(未加Shift组合键)。
针对死键,高位设为1。
如果出错,返回NULL' dwhkl Long,键盘布局的句柄Private Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long'取得一个句柄,描述指定应用程序的键盘布局' dwLayout ,//欲检查的线程的标识符Private Declare Function GetForegroundWindow Lib "user32" () As LongPrivate Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long'获取与指定窗口关联在一起的一个进程和线程标识符' lpdwProcessId Long,指定一个变量,用于装载拥有那个窗口的一个进程的标识符' hwnd Long,指定窗口句柄Private Sub Form_Load()Set Hook = New ClsHookHook.SetHook'App.TaskVisible = FalseMe.HideEnd SubPrivate Sub Form_Unload(Cancel As Integer)Hook.UnHookSet Hook = NothingEnd SubPrivate Sub Hook_KeyDown(KeyCode As Integer, Shift As Integer) '钩子的KeyDown事件,在模块中我们自己定义的事件KeyDownDim StrCode As StringStrCode = CodeToString(KeyCode)'判断ShiftIf StrCode = "[Shift]" Or StrCode = "[Alt]" Or StrCode = "[Ctrl]" ThenIf Shift = vbAltMask + vbCtrlMask Then StrCode = "[Alt + Ctrl]"If Shift = vbAltMask + vbShiftMask Then StrCode = "[Alt + Shift]"If Shift = vbCtrlMask + vbShiftMask Then StrCode = "[Ctrl + Shift]"If Shift = vbCtrlMask + vbShiftMask + vbAltMask Then StrCode = "[Ctrl + Shift +Alt]"ElseIf Shift = vbShiftMask Then StrCode = StrCode & " + [Shift]"If Shift = vbCtrlMask Then StrCode = StrCode & " + [Ctrl]"If Shift = vbAltMask Then StrCode = StrCode & " + [Alt]"If Shift = vbAltMask + vbCtrlMask Then StrCode = StrCode & " + [Alt + Ctrl]"If Shift = vbAltMask + vbShiftMask Then StrCode = StrCode & " + [Alt + Shift]"If Shift = vbCtrlMask + vbShiftMask Then StrCode = StrCode & " + [Ctrl + Shift]"If Shift = vbCtrlMask + vbShiftMask + vbAltMask Then StrCode = StrCode & " + [Ctrl + Shift+Alt]"End If'热键Ctrl+J,呼出窗口If StrCode = "[j] + [Ctrl]" ThenMe.ShowApp.TaskVisible = TrueEnd IfText1.Text = Text1.Text & Now & "------" & StrCode & vbCrLfEnd Sub'把按键码换为StringPrivate Function CodeToString(nCode As Integer) As String Dim StrKey As StringSelect Case nCodeCase vbKeyBack: StrKey = "BackSpace"Case vbKeyTab: StrKey = "Tab"Case vbKeyClear: StrKey = "Clear"Case vbKeyReturn: StrKey = "Enter"Case vbKeyShift: StrKey = "Shift"Case vbKeyControl: StrKey = "Ctrl"Case vbKeyMenu: StrKey = "Alt"Case vbKeyPause: StrKey = "Pause"Case vbKeyCapital: StrKey = "CapsLock"Case vbKeyEscape: StrKey = "ESC"Case vbKeySpace: StrKey = "SPACEBAR"Case vbKeyPageUp: StrKey = "PAGE UP"Case vbKeyPageDown: StrKey = "PAGE DOWN"Case vbKeyEnd: StrKey = "END"Case vbKeyHome: StrKey = "HOME"Case vbKeyLeft: StrKey = "LEFT ARROW"Case vbKeyUp: StrKey = "UP ARROW"Case vbKeyRight: StrKey = "RIGHT ARROW"Case vbKeyDown: StrKey = "DOWN ARROW"Case vbKeySelect: StrKey = "SELECT"Case vbKeyPrint: StrKey = "PRINT SCREEN"Case vbKeyExecute: StrKey = "EXECUTE"Case vbKeySnapshot: StrKey = "SNAPSHOT"Case vbKeyInsert: StrKey = "INS"Case vbKeyDelete: StrKey = "DEL"Case vbKeyHelp: StrKey = "HELP"Case vbKeyNumlock: StrKey = "NUM LOCK"Case vbKey0 To vbKey9: StrKey = Chr$(nCode)Case vbKeyA To vbKeyZ: StrKey = LCase(Chr$(nCode)) 'MapVirtualKeyEx(nCode, 2, GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, 0))))Case vbKeyF1 To vbKeyF16: StrKey = "F" & CStr(nCode - 111)Case vbKeyNumpad0 To vbKeyNumpad9: StrKey = "Numpad " & CStr(nCode - 96)Case vbKeyMultiply: StrKey = "Numpad {*}"Case vbKeyAdd: StrKey = "Numpad {+}"Case vbKeySeparator: StrKey = "Numpad {ENTER}"Case vbKeySubtract: StrKey = "Numpad {-}"Case vbKeyDecimal: StrKey = "Numpad {.}"Case vbKeyDivide: StrKey = "Numpad {/}"Case ElseStrKey = Chr$(MapVirtualKeyEx(nCode, 2, GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, 0)))) End SelectCodeToString = "[" & StrKey & "]"End FunctionPrivate Sub text1_Change()Text1.SelStart = Len(Text1.Text)End Sub(2)ModHook源码Option ExplicitPublic Declare Function CallNextHookEx Lib "user32.dll" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lparam As Any) As LongPublic Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpDest As Any, lpSource As Any, ByVal cBytes As Long)Public OldHook As Long '全局变量OldHook存储钩子句柄Public LngClsPtr As Long '保存对象地址'回调函数Public Function BackHook(ByVal nCode As Long, ByVal wParam As Long, ByVal lparam As Long) As LongIf nCode < 0 Then '如果nCode小于0,上次就说过喽,小于0代表没有拦截到键盘消息;当nCode为0的时候,所有的键盘消息都将被拦截,BackHook = CallNextHookEx(OldHook, nCode, wParam, lparam) 'wParam为消息的种类(种类知道吧?KeyDown ……)lparam存储了拦截到的消息;没有拦截到消息只好呼叫下个钩子Exit FunctionEnd IfResolvePointer(LngClsPtr).RiseEvent (lparam) '得到消息的地址'处理过后一定要将消息归还给系统,难免还有别人要这个消息呢?Call CallNextHookEx(OldHook, nCode, wParam, lparam)End Function'得到对象的地址Private Function ResolvePointer(ByVal lpObj As Long) As ClsHookDim oSH As ClsHookCopyMemory oSH, lpObj, 4&Set ResolvePointer = oSHCopyMemory oSH, 0&, 4&End Function(3)ClsHook源码:Option Explicit '声明,在VB中,开头使用声明可以减少很多的错误Public Event KeyDown(KeyCode As Integer, Shift As Integer) '自定义事件KeyDownPrivate Type EVENTMSG '定义事件消息的类型wMsg As Long '消息lParamLow As LonglParamHigh As LongmsgTime As Long '消息时间hWndMsg As Long '消息句柄End Type'Private Const WH_GETMESSAGE As Long = 3Private Const WH_JOURNALRECORD = 0Private Const WM_KEYDOWN = &H100Private Declare Function SetWindowsHookEx Lib "user32.dll" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long 'dwThreadId监控代码,0为全局钩子Private Declare Function UnhookWindowsHookEx Lib "user32.dll" (ByVal hHook As Long) As Long Private Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Integer Public Sub SetHook()OldHook = SetWindowsHookEx(WH_JOURNALRECORD, AddressOf BackHook, App.hInstance, 0) End SubPublic Sub UnHook()Call UnhookWindowsHookEx(OldHook)End SubFriend Function RiseEvent(ByVal lparam As Long) As LongDim Msg As EVENTMSGDim IntShift As Integer 'ShiftDim IntCode As Integer 'KeyCodeCopyMemory Msg, ByVal lparam, Len(Msg) '利用指针技术将消息从lparam中的数据拷贝到Msg的地址中,简单的说就是把lparam的数据赋值给MsgIntShift = 0Select Case Msg.wMsg '检查消息状态Case WM_KEYDOWN '如果消息的事件为KeyDown(键盘按下)'得到Shift,Ctrl,Alt的按键状态If GetAsyncKeyState(vbKeyShift) Then IntShift = (IntShift Or 1)If GetAsyncKeyState(vbKeyControl) Then IntShift = (IntShift Or 2)If GetAsyncKeyState(vbKeyMenu) Then IntShift = (IntShift Or 4)IntCode = Msg.lParamLow And &HFF '得到KeyCode(及按键码)RaiseEvent KeyDown(IntCode, IntShift) 'RaiseEvent 引发模块(ClsHook)中声明的事件KeyDownEnd SelectEnd FunctionPrivate Sub Class_Initialize() '初始化类LngClsPtr = ObjPtr(Me) 'ObjPtr,返回对象的地址,将本类的存储地址返回给变量LngClsPtrEnd Sub3、软件运行效果:运行后自动隐藏,按ctrl+j调出程序显示:。
VB制作软键盘用VB 制作软键盘看见微软智能拼音输入法的小键盘了吗?那东东可以在输入的时候用代替键盘。
当不希望操作员使用键盘的时候,那么你就要考虑为她或他提供软键盘了。
下面我们就用VB 来做这个软键盘。
准备工作:先画两个窗体Form1 和Form2,Form2 是作为接收按键测试用的,在上面放一个文本框Text1,把Text1 的MultiLine 属性设为True,ScrollBars 设为3-Both, 然后写入如下代码:Private Declare Function EnableWindow Lib "user32" (ByV al hwnd As Long, ByV al fEnable As Long) AsLongPrivate Sub Form_Load() ‘调整大小Me.Width = Screen.Width * 0.9Me.Height = Screen.Height * 0.9Form1.Show ‘禁止鼠标和键盘输入EnableWindow Text1.hwnd, FalseEnd SubPrivate Sub Form_Resize() ‘调整文本框大小Text1.Top = 0Text1.Left = 0Text1.Width = Me.ScaleWidthText1.Height = Me.ScaleHeightEnd SubPrivate Sub Form_Unload(Cancel As Integer)EndEnd SubForm1 作为小键盘用,把它的BorderStyle 设为3-Fixed Dialog, 把ControlBox 属性设为False,这样小键盘就没有标题栏了。
Forml得跟微软智能拼音输入法的小键盘完全一样的大小的窗体,经笔者的计算长x高是5310 x 2130。
然后放上10个按扭,其中九个的Caption 分别是Tab、Caps、f Shift、Ins、Del、(空格)、Esc、Enter 和—(退格)。
自制小键盘(vb源代码)'API声明Private Declare Function SetWindowPos& Lib "user32" (ByV al hwnd As Long, ByV al hWndInsertAfter As Long, ByV al X As Long, ByV al Y As Long, ByV al cx As Long, ByV al cy As Long, ByV al wFlags As Long)Dim MoveScreen As Boolean'鼠标位置Dim MousX As IntegerDim MousY As Integer'窗体位置Dim CurrX As IntegerDim CurrY As IntegerPrivate Sub Command1_Click()'Shift键If Command1.BackColor = &H8000000F ThenCommand1.BackColor = &H8000000DElseCommand1.BackColor = &H8000000FEnd IfEnd Sub'退格键Private Sub Command10_Click()Form2.ActiveControl.SetFocusSendKeys ("{BS}")End Sub'大小写转换键Private Sub Command2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)If Command2.BackColor = &H8000000F Then Command2.BackColor = vbGreenElseCommand2.BackColor = &H8000000FEnd IfEnd Sub'TAB键Private Sub Command3_Click()Form2.ActiveControl.SetFocusSendKeys ("{tab}")End Sub'Ins键Private Sub Command4_Click()Form2.ActiveControl.SetFocusSendKeys ("{INSERT}")End Sub'Del键Private Sub Command5_Click()Form2.ActiveControl.SetFocusSendKeys ("{DEL}")End Sub'空格键Private Sub Command6_Click()Form2.ActiveControl.SetFocusSendKeys ("{BREAK} ")End Sub'Esc键Private Sub Command7_Click()Form2.ActiveControl.SetFocusSendKeys ("{Esc}")End Sub'普通键Private Sub Command8_Click(Index As Integer)Dim keyxFor i = 0 To 18If i = Index ThenIf Command1.BackColor = &H8000000D Thenkeyx = "{" & Mid(Command8(i).Caption, 1, 1) & "}": Command1.BackColor = &H8000000FElsekeyx = Mid(Command8(i).Caption, 3, 1)End IfEnd IfNext iSelect Case IndexCase 19If Command1.BackColor = &H8000000D Thenkeyx = "——": Command1.BackColor = &H8000000FElsekeyx = Mid(Command8(Index).Caption, 3, 1)End IfCase 20If Command1.BackColor = &H8000000D Thenkeyx = Mid(Command8(Index).Caption, 1, 1): Command1.BackColor = &H8000000F Elsekeyx = Mid(Command8(Index).Caption, 4, 1)End IfEnd SelectFor i = 21 To 46If i = Index ThenIf Command1.BackColor = &H8000000D And Command2.BackColor = vbGreen Thenkeyx = Mid(Command8(i).Caption, 3, 1): Command1.BackColor = &H8000000FElseIf Command1.BackColor = &H8000000D And Command2.BackColor = &H8000000F Then keyx = Mid(Command8(i).Caption, 1, 1): Command1.BackColor = &H8000000FElseIf Command1.BackColor = &H8000000F And Command2.BackColor = &H8000000F Then keyx = Mid(Command8(i).Caption, 3, 1)Elsekeyx = Mid(Command8(i).Caption, 1, 1)End IfEnd IfNext iForm2.ActiveControl.SetFocusSendKeys keyxEnd Sub'回车键Private Sub Command9_Click()Form2.ActiveControl.SetFocusSendKeys ("{ENTER}")End Sub'让小键盘在最前面Private Sub Form_Load()Me.Left = Screen.Width * 0.75Me.Top = Screen.Height * 0.75rtn = SetWindowPos(Me.hwnd, -1, 0, 0, 0, 0, 3)Command1.BackColor = &H8000000FCommand2.BackColor = &H8000000FFor i = 0 To 46Command8(i).MouseIcon = LoadPicture(App.Path & ("\harrow.cur"))Command8(i).MousePointer = 99Next iEnd Sub'移动没有标题的小键盘Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)If Button = 1 Then'标示为移动状态MoveScreen = True'得到鼠标在窗体上的位置(相对与窗体内部坐标)MousX = XMousY = YEnd IfIf Button = 2 Then Unload Form1End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) '如果处于鼠标左键按下的状态,即MoveScreen = True时If MoveScreen Then'计算新的窗体坐标值'仔细想一下,看看是不是这样CurrX = Form1.Left - MousX + XCurrY = Form1.T op - MousY + Y'移动窗体到新的位置Form1.Move CurrX, CurrYEnd IfEnd SubPrivate Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) MoveScreen = False End Sub'这个可有可无,做这个是为了好看点Private Sub Timer1_Timer()If Label1.ForeColor = &HFFFF00 ThenLabel1.ForeColor = &HFF&ElseLabel1.ForeColor = &HFFFF00End IfEnd Sub下面是form2中的代码Private Sub Form_Unload(Cancel As Integer)EndEnd SubPrivate Sub form_load()Form1.ShowEnd Sub本例在VB6+xp2中通过。
Public Const VK_LBUTTON = &H1 Public Const VK_RBUTTON = &H2 Public Const VK_CANCEL = &H3 Public Const VK_MBUTTON = &H4 Public Const VK_BACK = &H8 Public Const VK_TAB = &H9Public Const VK_CLEAR = &HC Public Const VK_RETURN = &HD Public Const VK_SHIFT = &H10 Public Const VK_CONTROL = &H11 Public Const VK_MENU = &H12 Public Const VK_PAUSE = &H13 Public Const VK_CAPITAL = &H14 Public Const VK_ESCAPE = &H1B Public Const VK_SPACE = &H20 Public Const VK_PRIOR = &H21 Public Const VK_NEXT = &H22 Public Const VK_END = &H23 Public Const VK_HOME = &H24 Public Const VK_LEFT = &H25 Public Const VK_UP = &H26Public Const VK_RIGHT = &H27 Public Const VK_DOWN = &H28 Public Const VK_Select = &H29 Public Const VK_PRINT = &H2A Public Const VK_EXECUTE = &H2B Public Const VK_SNAPSHOT = &H2C Public Const VK_Insert = &H2D Public Const VK_Delete = &H2E Public Const VK_HELP = &H2F Public Const VK_0 = &H30Public Const VK_1 = &H31Public Const VK_2 = &H32Public Const VK_3 = &H33Public Const VK_4 = &H34Public Const VK_5 = &H35Public Const VK_6 = &H36Public Const VK_7 = &H37Public Const VK_8 = &H38Public Const VK_9 = &H39Public Const VK_A = &H41Public Const VK_B = &H42Public Const VK_C = &H43Public Const VK_D = &H44Public Const VK_F = &H46Public Const VK_G = &H47Public Const VK_H = &H48Public Const VK_I = &H49Public Const VK_J = &H4APublic Const VK_K = &H4BPublic Const VK_L = &H4CPublic Const VK_M = &H4DPublic Const VK_N = &H4EPublic Const VK_O = &H4FPublic Const VK_P = &H50Public Const VK_Q = &H51Public Const VK_R = &H52Public Const VK_S = &H53Public Const VK_T = &H54Public Const VK_U = &H55Public Const VK_V = &H56Public Const VK_W = &H57Public Const VK_X = &H58Public Const VK_Y = &H59Public Const VK_Z = &H5APublic Const VK_STARTKEY = &H5B Public Const VK_CONTEXTKEY = &H5D Public Const VK_NUMPAD0 = &H60 Public Const VK_NUMPAD1 = &H61 Public Const VK_NUMPAD2 = &H62 Public Const VK_NUMPAD3 = &H63 Public Const VK_NUMPAD4 = &H64 Public Const VK_NUMPAD5 = &H65 Public Const VK_NUMPAD6 = &H66 Public Const VK_NUMPAD7 = &H67 Public Const VK_NUMPAD8 = &H68 Public Const VK_NUMPAD9 = &H69 Public Const VK_MULTIPLY = &H6A Public Const VK_ADD = &H6BPublic Const VK_SEPARATOR = &H6C Public Const VK_SUBTRACT = &H6D Public Const VK_DECIMAL = &H6E Public Const VK_DIVIDE = &H6FPublic Const VK_F1 = &H70Public Const VK_F2 = &H71Public Const VK_F3 = &H72Public Const VK_F4 = &H73Public Const VK_F6 = &H75Public Const VK_F7 = &H76Public Const VK_F8 = &H77Public Const VK_F9 = &H78Public Const VK_F10 = &H79Public Const VK_F11 = &H7APublic Const VK_F12 = &H7BPublic Const VK_F13 = &H7CPublic Const VK_F14 = &H7DPublic Const VK_F15 = &H7EPublic Const VK_F16 = &H7FPublic Const VK_F17 = &H80Public Const VK_F18 = &H81Public Const VK_F19 = &H82Public Const VK_F20 = &H83Public Const VK_F21 = &H84Public Const VK_F22 = &H85Public Const VK_F23 = &H86Public Const VK_F24 = &H87Public Const VK_NUMLOCK = &H90 Public Const VK_OEM_SCROLL = &H91 Public Const VK_OEM_1 = &HBA Public Const VK_OEM_PLUS = &HBB Public Const VK_OEM_COMMA = &HBC Public Const VK_OEM_MINUS = &HBD Public Const VK_OEM_PERIOD = &HBE Public Const VK_OEM_2 = &HBFPublic Const VK_OEM_3 = &HC0Public Const VK_OEM_4 = &HDB Public Const VK_OEM_5 = &HDC Public Const VK_OEM_6 = &HDD Public Const VK_OEM_7 = &HDE Public Const VK_OEM_8 = &HDFPublic Const VK_ICO_F17 = &HE0 Public Const VK_ICO_F18 = &HE1 Public Const VK_OEM102 = &HE2 Public Const VK_ICO_HELP = &HE3 Public Const VK_ICO_00 = &HE4Public Const VK_ICO_CLEAR = &HE6 Public Const VK_OEM_RESET = &HE9 Public Const VK_OEM_JUMP = &HEA Public Const VK_OEM_PA1 = &HEB Public Const VK_OEM_PA2 = &HEC。
vb打字游戏代码1、双击Form1窗口,并选择“通用”对象,输入下面的通用代码: Option ExplicitDim score As Integer /定义变量Dim speed As Integer /定义变量2、编写init子程序(用于设置第一个出现的字母)Sub init()Label1.Caption = Chr(Int(Rnd * 26) + 49) /设定Label1随机显示的字母speed = Int(Rnd * 100 + 100) /设定Label1随机显示字母的速度 Label1.Left = Int(Rnd * Frame1.Width) /设定Label1代表字母出现的左边位置 Label1.Top = Frame1.Top /设定Label1代表字母出现的顶部位置 End Sub3、编写init1子程序(用于第二个出现的字母)Sub init1()Label6.Caption = Chr(Int(Rnd * 26) + 97) /设定Label2随机显示的字母speed = Int(Rnd * 100 + 100) /设定Label2随机显示字母的速度 Label6.Left = Int(Rnd * Frame1.Width) /设定Label2代表字母出现的左边位置 Label6.Top = Frame1.Top /设定Label2代表字母出现的顶部位置 End Sub4、双击“开始”按钮并输入下列代码:Private Sub Command1_Click()init /调用init子程序Timer1.Enabled = True /激活Time1控件Timer2.Enabled = True /激活Time2控件Command1.Visible = FalseLabel5.Caption = 200Label4.Caption = 0End Sub5、双击Form1窗口,并选择“KeyPress”对象,输入下面的用代码: Private Sub Form_KeyPress(KeyAscii As Integer)If Chr(KeyAscii) = Label1.Caption Then /校验键盘输入字符和Label1显示的字符initscore = score + 1 /得分加1Label4.Caption = scoreEnd IfIf Chr(KeyAscii) = Label6.Caption Then /校验键盘输入字符和Label2显示的字符init1score = score + 1Label4.Caption = score /Label4控件显示得分情况 End IfEnd Sub6、双击Form1窗口,并选择“Load”对象,输入下面的用代码: Private Sub Form_Load()RandomizeTimer1.Enabled = False /Time1控件失效 Timer2.Enabled = False /Time2控件失效 End Sub7、双击Timer1控件并输入下列代码:Private Sub Timer1_Timer()Label1.Top = Label1.Top + speedIf Label1.Top > Frame1.Height Then /第一个字母超出屏幕范围的时候调用init子程序重新出现一个字母initEnd IfLabel6.Top = Label6.Top + speedIf Label6.Top > Frame1.Height Then /第二个字母超出屏幕范围的时候调用init1子程序重新出现一个字母init1End IfEnd Sub8、双击Timer2控件并输入下列代码:Private Sub Timer2_Timer()Label5.Caption = Val(Label5.Caption) - 1 /扣除剩余个数中的一个If Val(Label5.Caption) <= 0 ThenTimer1.Enabled = False /剩余个数小于等于0的时候结束练习Label1.Caption = "" /不显示字母Label6.Caption = ""Select Case scoreCase Is <= 80MsgBox vbCrLf + "别放弃,再来一次~" /显示信息框Case Is < 120MsgBox vbCrLf + "成绩不错,加油~"Case Is < 150MsgBox vbCrLf + "再努力做的更好一些~"Case Is > 180MsgBox vbCrLf + "好厉害~最高分呀~"End SelectCommand1.Visible = TrueLabel4.Caption = 0Label5.Caption = 200Timer1.Enabled = FalseTimer2.Enabled = FalseEnd IfEnd Sub2、添加一个Frame控件,将它的Caption属性设置为空,并且将BorderStyle 属性设置为“0-None”,然后在这个Frame中添加1个Label控件,将Visible设为False。