Visual Basic中SendKeys()权限被拒绝错误

时间:2010-02-21 22:39:13

标签: vb6 sendkeys

我正在尝试使用我的VB6应用程序将SendKeys()命令用于另一个窗口。

我想要的是单击一个按钮,然后在应用程序将某些键发送到该窗口之前有10秒钟转到另一个窗口。我把所有东西都排序了,但出于某种原因我打电话的时候是这样的:

SendKeys ("A")

我收到此错误:

Run-time error '70':

Permission denied

有没有人知道解决这个问题的方法?感谢。

9 个答案:

答案 0 :(得分:8)

看看Karl Peterson在Vista下解决这个问题的方法:

SendInput

答案 1 :(得分:8)

对于Windows 7: 将UAC设置更改为永不通知。

对于Windows 8和10:
将此方法添加到任何模块:

Public Sub Sendkeys(text as variant, Optional wait As Boolean = False)
   Dim WshShell As Object
   Set WshShell = CreateObject("wscript.shell")
   WshShell.Sendkeys cstr(text), wait
   Set WshShell = Nothing
End Sub 

在Windows 10中它对我很好。

答案 2 :(得分:4)

VB6 SendKeys的替换是WScript.Shell SendKeys,如下所示:

Set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys "1{+}"

请参阅MSDN寻求帮助。

答案 3 :(得分:3)

在Windows 7上:

  • 打开“控制面板”
  • 更改用户帐户控制设置
  • 更改为NOVER NOTIFY
  • 重新启动计算机

答案 4 :(得分:2)

删除" msvbvm60.dll"来自应用程序的文件

按照以下步骤

  
      
  1. 右键单击应用程序.Exe文件并单击属性
  2.   
  3. 单击“兼容性选项卡”
  4.   
  5. 单击“在兼容模式下运行此程序并选择Windows”   Xp SP2 From It。
  6.   
  7. 单击“以管理员身份运行此程序”
  8.   
  9. 单击“应用而不是”。
  10.   
  11. 删除" msvbvm60.dll"来自应用程序文件夹。
  12.   

全部完成,现在您的应用程序开始运行,没有任何错误,如访问被拒绝

答案 5 :(得分:2)

在公共模块中添加:

Public Sub Sendkeys(text$, Optional wait As Boolean = False)
    Dim WshShell As Object
    Set WshShell = CreateObject("wscript.shell")
    WshShell.Sendkeys text, wait
    Set WshShell = Nothing
End Sub

这将“覆盖”SendKeys功能

答案 6 :(得分:1)

您可以在模块

中使用此代码
Public Sub SendKeyTab(CForm As Form)
On Error Resume Next
Dim G As Single
For G = 0 To CForm .Controls.Count - 1
    If CForm .Controls(G).TabIndex = CForm .ActiveControl.TabIndex + 1 Then CForm .Controls(G).SetFocus
Next
End Sub

在每个表单级别

If KeyCode

答案 7 :(得分:0)

问题是关于vb6 IDE和Windows桌面上下文菜单,您将按照此处的描述进行操作:

http://www.vbforums.com/showthread.php?747425-SendKeys-and-Windows-8

主要参考资料如下:

http://www.vbforums.com/showthread.php?745925-RESOLVED-How-to-trigger-the-desktop-context-menu

答案 8 :(得分:0)

使用此API:

Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

keybd_event keycode, 0, 0, 0  'KEY DOWN
keybd_event keycode, 0, KEYEVENTF_KEYUP, 0 'KEY UP

当密钥代码为32表示空格时,35表示keyend,8表示vbKeyBack等。