SendKeys() permission denied error in Visual Basic

2019-02-12 15:30发布

问题:

I am trying to use the SendKeys() command to another window with my VB6 app.

What I wanted is to click a button, and then have 10 seconds to go to the other window before the app sends some keys to that window. I got everything sorted but for some reason when I call something like this:

SendKeys ("A")

I get this error:

Run-time error '70':

Permission denied

Does anyone know a way around this? Thanks.

回答1:

Take a look at what Karl Peterson worked up as a fix for this under Vista:

SendInput



回答2:

For Windows 7: Change the UAC settings to never notify.

For Windows 8 and 10:
Add this method to any module:

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 

It's worked fine for me in windows 10.



回答3:

Replacement for VB6 SendKeys is WScript.Shell SendKeys, like this:

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

See MSDN for help.



回答4:

On Windows 7:

  • Open the Control Panel
  • Change user account control setting
  • Change to NEVER NOTIFY
  • Restart the computer


回答5:

Delete "msvbvm60.dll" File From The Application

Follow The Following Step

  1. Right Click On The Application .Exe File And Click On Property
  2. Click On Compatibility Tab
  3. Click On Run This Program in Compatibility Mode And Chose Windows Xp SP2 From It.
  4. Click On Run This Program As Administrator
  5. Click On Apply Than Ok.
  6. Delete The "msvbvm60.dll" From The Application Folder.

All Done, Now Your Application Start Running Without Any Error Like Access Denied



回答6:

In a public Module add:

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

This will "overwrite" SendKeys Function



回答7:

You can use this code in Module

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

On Each Form Level

If KeyCode


回答8:

the problem is about vb6 IDE and windows desktop context menu and you will do as described in here :

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

and main reference is here :

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



回答9:

Use this API:

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

and

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

when key code is 32 for space, 35 for keyend, 8 for vbKeyBack, etc.



标签: vb6 sendkeys