SendKeys函数执行中,使Num Lock控制灯闪烁的问题!

ragweed_wg 2003-02-18 03:50:37
为什么在VB简单的调用SendKeys会使键盘的Num Lock控制灯闪烁,如何才能避免这种闪烁的情况?
...全文
240 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ragweed_wg 2003-02-18
  • 打赏
  • 举报
回复
成功了,谢谢,很好用.
minajo21 2003-02-18
  • 打赏
  • 举报
回复
Const MIN_SEARCH_LENGTH As Integer = 1

Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Private Declare Function SetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Const VK_NUMLOCK = &H90
Const VK_SCROLL = &H91
Const VK_CAPITAL = &H14
Private Declare Sub GetKeyboardStateByString Lib "user32" Alias "GetKeyboardState" (ByVal pbKeyState As String)
Private Declare Sub SetKeyboardStateByString Lib "user32" Alias "SetKeyboardState" (ByVal lppbKeyState As String)

Dim NumLockKey As String * 256

NumLockKey = Space$(256)
Call GetKeyboardStateByString(NumLockKey)
Mid$(NumLockKey, VK_NUMLOCK + 1, 1) = 1
call SetKeyboardStateByString(NumLockKey)
SendKeys "{NUMLOCK}", True
ragweed_wg 2003-02-18
  • 打赏
  • 举报
回复
怎样自动将Num Lock设置在小键盘数字有效上呢?我希望能自动锁定在Num Lock灯亮的情况下,谢谢.
minajo21 2003-02-18
  • 打赏
  • 举报
回复

在模块中填加:
Option Explicit

Private Declare Function CallNextHookEx Lib "user32" _
(ByVal hHook As Long, _
ByVal nCode As Long, _
ByVal wParam As Long, _
lParam As Any) As Long

Private Declare Function SetWindowsHookEx Lib "user32" _
Alias "SetWindowsHookExA" _
(ByVal idHook As Long, _
ByVal lpfn As Long, _
ByVal hmod As Long, _
ByVal dwThreadId As Long) As Long

Private Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long

Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" _
(Destination As Any, _
Source As Any, _
ByVal Length As Long)

Private Type PKBDLLHOOKSTRUCT
vkCode As Long
scanCode As Long
flags As Long
time As Long
dwExtraInfo As Long
End Type

Private Const WM_KEYDOWN = &H100
Private Const WM_SYSKEYDOWN = &H104
Private Const WM_KEYUP = &H101
Private Const WM_SYSKEYUP = &H105

Private Const NUM_LOCK = 144

Private Const HC_ACTION = 0
Private Const WH_KEYBOARD_LL = 13

Private lngHook As Long

'to hold Keyboard by heading off windows messages
Private Function LowLevelKeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim blnHook As Boolean
Dim p As PKBDLLHOOKSTRUCT

If nCode = HC_ACTION Then
Select Case wParam
Case WM_KEYDOWN, WM_SYSKEYDOWN, WM_KEYUP, WM_SYSKEYUP
Call CopyMemory(p, ByVal lParam, Len(p))
If p.vkCode = NUM_LOCK Then
blnHook = True
End If
Case Else
'do nothing
End Select
End If

If blnHook Then
LowLevelKeyboardProc = 1
Else
Call CallNextHookEx(WH_KEYBOARD_LL, nCode, wParam, lParam)
End If
End Function

Public Sub KeyboardHook()
lngHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, App.hInstance, 0)
End Sub

Public Sub UnKeyboardHook()
Call UnhookWindowsHookEx(lngHook)
End Sub

外面直接调KeyboardHook、UnKeyboardHook这两个函数就行了

祝你好运!!
ragweed_wg 2003-02-18
  • 打赏
  • 举报
回复
呵呵_请赐源码!感谢!
minajo21 2003-02-18
  • 打赏
  • 举报
回复
是让Num Lock键一直开着,我没说明白

我原来也碰到过,客户总说小键盘总是莫名其妙的关了,我搞了半天也没查处什么原因,后来用我说的方法才搞定。
ragweed_wg 2003-02-18
  • 打赏
  • 举报
回复
不能屏蔽Num Lock键,因为客户要用的就是通过小键盘来输入金额.
minajo21 2003-02-18
  • 打赏
  • 举报
回复
我也遇到过,我的方法是屏蔽Num Lock键
有代码要不要?

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧