sendkeys为什么无效?

无·法 2010-12-15 01:55:58
有个截图软件的系统热键是Ctrl+Shift+F,我想直接用sendkeys控制,用下面代码无效:
Private Sub Command1_Click()
SendKeys "^+F"
End Sub


然后拿任务管理器试了下也是无效:
Private Sub Command1_Click()
' SendKeys "^%{ESC}"
SendKeys "^%{DEL}"
End Sub
...全文
2109 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
无·法 2010-12-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lyserver 的回复:]

问题不出要SendKeys,而是窗口没有处于活动状态,代码修改如下:
VB code

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As……
[/Quote]直接测试不通过,不过在sendkeys前加个延时就好了。我的是xp+sp3
很奇怪,这个软件不需要窗口呈活动状态就可以按热键的。看样子sendkeys和直接按键盘差异还是很大很大的。
lyserver 2010-12-16
  • 打赏
  • 举报
回复
以上代码在我这儿是通过了的。
lyserver 2010-12-16
  • 打赏
  • 举报
回复
问题不出要SendKeys,而是窗口没有处于活动状态,代码修改如下:

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SetFocusAPI Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
Private Declare Function BringWindowToTop Lib "user32" (ByVal hwnd As Long) As Long

Sub main()
Dim hwndHyperSnap As Long

hwndHyperSnap = FindWindowEx(0, 0, "HyperSnap 6 Window Class", vbNullString)
If hwndHyperSnap <> 0 Then
BringWindowToTop hwndHyperSnap
SetFocusAPI hwndHyperSnap
SendKeys "^+F"
End If
End Sub
king06 2010-12-15
  • 打赏
  • 举报
回复
用QQ就可以试了... sendkeys可能作用不到系统
无·法 2010-12-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lyserver 的回复:]

把截图软件名称告诉我,我下班后下载一个试试。另外,如果SendKeys做不到,你可以尝试keybd_event函数。
[/Quote]hypersnap6
3q
lyserver 2010-12-15
  • 打赏
  • 举报
回复
把截图软件名称告诉我,我下班后下载一个试试。另外,如果SendKeys做不到,你可以尝试keybd_event函数。
  • 打赏
  • 举报
回复
哦,明白了
无·法 2010-12-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 patrickkong 的回复:]

msdn

Dim ReturnValue, I
ReturnValue = Shell("CALC.EXE", 1) ' Run Calculator.
AppActivate ReturnValue ' Activate the Calculator.
For I = 1 To 100 ' Set up counting loop.
SendKeys I &a……
[/Quote]这个很久以前就看过&跑过了。这个无需激活目标程序,因为它注册的是系统全局热键。

[Quote=引用 2 楼 king06 的回复:]

SendKeys "^+(F)"
[/Quote]
昨天就试过了,无效。

[Quote=引用 3 楼 lyserver 的回复:]

VB6的SendKeys有时有些问题,比如打开任务管理器,以下代码可以:
Sub main()
Dim WshShell As Object
Set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys "^+{ESC}"
End Sub
以下代码却不可以:
Sub main()
Se……
[/Quote]vbs的也试过了,无效。郁闷的了。
lyserver 2010-12-15
  • 打赏
  • 举报
回复
VB6的SendKeys有时有些问题,比如打开任务管理器,以下代码可以:
Sub main()
Dim WshShell As Object
Set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys "^+{ESC}"
End Sub
以下代码却不可以:
Sub main()
SendKeys "^+{ESC}"
End Sub
所以你最好使用WScript.Shell中的SendKeys。
king06 2010-12-15
  • 打赏
  • 举报
回复
SendKeys "^+(F)"
  • 打赏
  • 举报
回复
msdn

Dim ReturnValue, I
ReturnValue = Shell("CALC.EXE", 1) ' Run Calculator.
AppActivate
ReturnValue ' Activate the Calculator.
For I = 1 To 100 ' Set up counting loop.
SendKeys I & "{+}", True ' Send keystrokes to Calculator
Next I ' to add each value of I.
SendKeys "=", True ' Get grand total.
SendKeys "%{F4}", True ' Send ALT+F4 to close Calculator

7,785

社区成员

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

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