SendKeys() permission denied error in Visual Basic
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 everythin开发者_C百科g 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.
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.
Take a look at what Karl Peterson worked up as a fix for this under Vista:
SendInput
Replacement for VB6 SendKeys is WScript.Shell SendKeys, like this:
Set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys "1{+}"
See MSDN for help.
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
On Windows 7:
- Open the Control Panel
- Change user account control setting
- Change to NEVER NOTIFY
- Restart the computer
Delete "msvbvm60.dll" File From The Application
Follow The Following Step
- Right Click On The Application .Exe File And Click On Property
- Click On Compatibility Tab
- Click On Run This Program in Compatibility Mode And Chose Windows Xp SP2 From It.
- Click On Run This Program As Administrator
- Click On Apply Than Ok.
- Delete The "msvbvm60.dll" From The Application Folder.
All Done, Now Your Application Start Running Without Any Error Like Access Denied
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
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
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.
精彩评论