VB 用SendKeys 发送变量大写字母会变成小写字母的问题。
我想要的结果是,用SendKeys发送变量里的大写或者小写字母不会有任何改变。比如:发送A就是A,发送a就是a...
我想要的结果是,用SendKeys 发送变量里的大写或者小写字母不会有任何改变。比如:发送A就是A,发送a就是a
展开
4个回答
展开全部
sendkeys本身就是模拟按键,所以键盘上的一些当前状态也肯定会起作用的,比如大小写锁定键如果锁定,那么发送的字母按键就会出现大小写相反的情况,这本来是正常现象,因为我们实际在键盘上操作就是这么个结果的,如果你要强行改变这种情况,反而显得违反常理了。
如果你确实要这么做,那么你除了要解决大小写的问题,还要解决输入法的问题,因为如果输入法打开的话,你发送的字母按键也会自动激活输入法窗口的,这同样也是你不想要的结果对吧?要解决的方法有多种,一种是在运行sendkeys之前,先把键盘恢复到初始状态,这个可以通过API函数解决;还有一种是不用sendkeys,改用API函数keybd_event
如果你确实要这么做,那么你除了要解决大小写的问题,还要解决输入法的问题,因为如果输入法打开的话,你发送的字母按键也会自动激活输入法窗口的,这同样也是你不想要的结果对吧?要解决的方法有多种,一种是在运行sendkeys之前,先把键盘恢复到初始状态,这个可以通过API函数解决;还有一种是不用sendkeys,改用API函数keybd_event
追问
改用API函数keybd_event 发送怎么发送呢
展开全部
本来可以用API来实现此功能,如果你一定要用Sendkeys,又不想改变CapsLock状态,可以用下面代码实现:
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Function SendkeyEx(zfc As String)
Dim S As String, S1 As String, i As Long
If GetKeyState(&H14) And &H1 Then
For i = 1 To Len(zfc)
S1 = Mid(zfc, i, 1)
If S1 >= "A" And S1 <= "Z" Then
S = S & LCase(S1)
Else
S = S & UCase(S1)
End If
Next
Else
S = zfc
End If
Sendkeys S
End Function
Private Sub Command1_Click()
Text1.SetFocus
Dim S As String, i As Long
S = "Abdr1ertSdf888"
SendkeyEx S
End Sub
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Function SendkeyEx(zfc As String)
Dim S As String, S1 As String, i As Long
If GetKeyState(&H14) And &H1 Then
For i = 1 To Len(zfc)
S1 = Mid(zfc, i, 1)
If S1 >= "A" And S1 <= "Z" Then
S = S & LCase(S1)
Else
S = S & UCase(S1)
End If
Next
Else
S = zfc
End If
Sendkeys S
End Function
Private Sub Command1_Click()
Text1.SetFocus
Dim S As String, i As Long
S = "Abdr1ertSdf888"
SendkeyEx S
End Sub
更多追问追答
追问
如果不用sendkeys,用API怎么弄
追答
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Private Sub Command1_Click()
Text1.SetFocus
SendKeys "A"
SendKeys "b"
End Sub
一点都没改变 一个textbox 一个按钮
Text1.SetFocus
SendKeys "A"
SendKeys "b"
End Sub
一点都没改变 一个textbox 一个按钮
更多追问追答
追问
你按CAPS LOCK 试试看,比如一个A 和b,它就会反过来,A变成a,b变成B。我想让它没有任何改变。怎么弄
追答
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Private Sub Command1_Click()
Text1.SetFocus
Dim s As String
s = "Ab"
If GetKeyState(&H14) And &H1 Then
SendKeys "{CAPSLOCK}"
SendKeys s
SendKeys "{CAPSLOCK}"
Else
SendKeys s
End If
End Sub
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
难道我们用不一样的VB?无论我怎么按Caps Lock,无论当前键盘状态是大写还是小写,执行SendKeys "A"一定是发送大写A,不可能发送小写a。你的代码呢?我再测试一下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询