2010-02-21 11 views
7

Próbuję użyć polecenia SendKeys() do innego okna z moją aplikacją VB6.Błąd odmowy uprawnień do funkcji SendBeys w programie VB6

Chciałem kliknąć przycisk, a następnie 10 sekund, aby przejść do drugiego okna, zanim aplikacja wyśle ​​klucze do tego okna. Dostałem wszystko sortowane, ale z jakiegoś powodu, gdy zgłoszę coś takiego:

SendKeys ("A") 

otrzymuję ten błąd:

Run-time error '70': 

Permission denied 

Czy ktoś zna sposób na obejście tego? Dzięki.

+0

Jeśli jesteś na Vista to może być spowodowane według kontroli konta użytkownika (UAC). Możesz obejść, wyłączając UAC. – bernie

Odpowiedz

8

Spójrz na to, co Karl Peterson pracował jako rozwiązanie tego pod Vista:

SendInput

+0

+1 bicie mnie do tego. Myślę, że to powinno rozwiązać problem. – MarkJ

+0

+1, właśnie to zamierzałem zasugerować. –

2

W systemie Windows 7:

  • Otworzyć
  • konta Zmień Panel użytkownika ustawienie kontroli
  • Zmiana na NIGDY NIE POWIADAMY
  • Uruchom ponownie komputer
2

Delete „msvbvm60.dll” Plik z zastosowania

Wykonaj następującą czynność

  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.

Wszystko Gotowe Teraz Twój Zastosowanie zaczną bezbłędnie jak dostęp Odmowa

+0

Twoja odpowiedź uratowała mój dzień. –

3

Zamiennik dla VB6 SendKeys jest WScript.Shell SendKeys, tak:

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

Zobacz MSDN o pomoc.

1

Można użyć tego kodu w 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 

na każdym poziomie Form

If KeyCode 
0

Korzystanie z tego API:

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

i

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

, gdy kod klucza wynosi 32 w przypadku spacji, 35 w przypadku klucza, 8 w przypadku vbKeyBack itp.

+0

Witamy w SO! Spróbuj podać więcej wyjaśnień odpowiedzi wraz z lepszym formatowaniem. Zobacz [Jak odpowiedzieć na stronę] (http://stackoverflow.com/help/how-to-answer), aby uzyskać pomoc w poprawie odpowiedzi. – Madness

2

W dodatku Moduł publiczny:

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 

To będzie "zastąpić" SendKeys Funkcja

2

W przypadku systemu Windows 7: Zmień ustawienia funkcji Kontrola konta użytkownika, aby nigdy nie powiadamiać.

dla Windows 8 i 10:
Dodaj tę metodę do każdego modułu:

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 

To działało w porządku dla mnie w oknach 10.

Powiązane problemy