什么代码的作用:我有一个代码可以在屏幕上移动鼠标,打印屏幕并将其粘贴到 Excel 中。
Problem:由于某种原因,我的代码总是(绝对没有例外)在每次运行后关闭 NUMLOCK 键。
到目前为止我尝试过的:我四处搜寻,发现了 SendKeys (NUMLOCK),理论上它是有效的(尽管这对用户来说似乎是一个很大的问题)。
我想做的事:我想在每次宏运行后打开数字锁定,
Obs1:我不知道是什么导致宏首先将其关闭。修复导致此问题的任何原因将是理想的选择,但由于我不知道问题是什么,所以我首先想让我的代码正常运行。一旦找到打开 NUMLOCK 键的方法,我就会着手解决这个问题。
问题:我可以使用 SendKeys 执行此操作吗?我使用得当吗?有没有更好的办法?
Obs2:由于这是一个更大的代码,一旦解决了这个问题,我将发布另一个包含整个代码的问题,并讨论导致问题的原因。
Code我正在尝试起诉以打开数字锁定:
Application.Sendkeys (NUMLOCK)
还尝试过:
Application.Sendkeys ("NUMLOCK")
and
Application.Sendkeys {NUMLOCK}
您可以通过几个 Windows API 调用直接设置键状态。移植自keybd_event 函数的 MSDN 页面:
#If VBA7 Then
Private Declare PtrSafe Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, _
ByVal dwFlags As LongPtr, ByVal dwExtraInfo As LongPtr)
Private Declare PtrSafe Function GetKeyboardState Lib "user32.dll" (ByVal lpKeyState As LongPtr) As Boolean
#Else
Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, _
ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetKeyboardState Lib "user32.dll" (ByVal lpKeyState As Long) As Boolean
#End If
Private Const KEYEVENTF_EXTENDEDKEY As Long = &H1
Private Const KEYEVENTF_KEYUP As Long = &H2
Private Const VK_NUMLOCK As Byte = &H90
Private Const NumLockScanCode As Byte = &H45
Private Sub ToggleNumlock(enabled As Boolean)
Dim keystate(255) As Byte
'Test current keyboard state.
GetKeyboardState (VarPtr(keystate(0)))
If (Not keystate(VK_NUMLOCK) And enabled) Or (keystate(VK_NUMLOCK) And Not enabled) Then
'Send a keydown
keybd_event VK_NUMLOCK, NumLockScanCode, KEYEVENTF_EXTENDEDKEY, 0&
'Send a keyup
keybd_event VK_NUMLOCK, NumLockScanCode, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0&
End If
End Sub
像这样称呼它:
Sub Example()
'Turn Numlock off.
ToggleNumlock False
'Turn Numlock on.
ToggleNumlock True
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)