2010-02-21 37 views
7

Estoy tratando de utilizar el comando SendKeys() en otra ventana con mi aplicación VB6.VB6 SendKeys() permiso denegado error

Lo que quería era hacer clic en un botón, y luego tener 10 segundos para ir a la otra ventana antes de que la aplicación envíe algunas claves a esa ventana. Tengo todo lo solucionaron pero por alguna razón cuando llamo a algo como esto:

SendKeys ("A") 

consigo este error:

Run-time error '70': 

Permission denied 

¿Alguien sabe una forma de evitar esto? Gracias.

+0

Si está en Vista esto podría deberse por control de cuenta de usuario (UAC). Puede solucionarlo desactivando el UAC. – bernie

Respuesta

8

Tome un vistazo a lo que Karl Peterson trató como una solución para este bajo Vista:

SendInput

+0

+1 me ganó. Creo que esto debería solucionar el problema – MarkJ

+0

+1, esto es lo que iba a sugerir. –

2

En Windows 7:

  • Abra la
  • de cuentas de usuario Panel de control configuración de control
  • Cambiar a NUNCA NOTIFICAR
  • Reiniciar el equipo
2

Borrar "msvbvm60.dll" Archivo de la aplicación

seguir el siguiente paso

  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.

todo hecho, ahora su aplicación empiezan a correr sin ningún tipo de error como acceso denegado

+0

Tu respuesta me salvó el día. –

3

repuesto para VB6 SendKeys es WScript.Shell SendKeys, así:

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

Ver MSDN en busca de ayuda.

1

Usted puede utilizar este código en el módulo

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 

en cada formulario Nivel

If KeyCode 
0

utilizar esta API:

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

y

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

cuando el código de clave es 32 para espacio, 35 para keyend, 8 para vbKeyBack, etc.

+0

¡Bienvenido a SO! Intente proporcionar más explicaciones a sus respuestas junto con un mejor formato. Consulte [Cómo responder a la página] (http://stackoverflow.com/help/how-to-answer) para obtener ayuda para mejorar su respuesta. – Madness

2

En un complemento del módulo público:

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 

Esto se "sobrescribir" Enviar teclas de función

2

Para Windows 7: Cambie la configuración de UAC para que nunca se notifique.

Para Windows 8 y 10:
Añadir este método a cualquier módulo:

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 

Ha funcionado bien para mí en Windows 10.