본문 바로가기

IT

[VB] VIsta, 윈도우 7 등에서 Sendkeys 에서 70 사용권한이 없습니다 에러 해결방안

반응형

 Vista 부터 지원하게 된 '사용자 계정 콘트롤(UAC)' 이 문제가 되는 경우중에 하나이다.


 아마도 Sendkeys 라는 펑션이 사용자가 예측할 수 없는 기능을 수행하는 (사용자는 A키를 눌렀는데 B키가 반응하게도 할 수 있으니까..) 펑션이기때문에 UAC에서 Admin권한을 획득해야 사용가능한 것 같다.


 해결 방안은 첫번째로 '사용자 계정 콘트롤'을 사용하지 않도록 하는 방법이 있다. 필수적으로 리붓해야 원하는 대로 사용이 가능할 것이다.


 두번째로 웹서핑으로 검색한 결과이다.


 자유로운영혼님께서 작성한 블로그글을 링크한다.

 http://blog.daum.net/-freeman/4


 - 두번째 해결 방법 -

그래서 이래저래 뒤져본봐. 해결방법은 나온다. 기존에 사용되고 있는 다른 API를 사용하여 처리하는 방법이 잇다.

 

아래처럼 모듈을 하나 만들고

 

Option Explicit

Private Const KEYEVENTF_KEYUP = &H2
Private Const INPUT_KEYBOARD = 1

Private Type KEYBDINPUT
    wVk As Integer
    wScan As Integer
    dwFlags As Long
    time As Long
    dwExtraInfo As Long
End Type

Private Type GENERALINPUT
    dwType As Long
    xi(0 To 23) As Byte
End Type

Private Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As GENERALINPUT, ByVal cbSize As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)

Public Function SendKeysA(ByVal vKey As Integer, Optional booDown As Boolean = False)

    Dim GInput(0) As GENERALINPUT
    Dim KInput As KEYBDINPUT
   
    KInput.wVk = vKey
   
    If Not booDown Then
        KInput.dwFlags = KEYEVENTF_KEYUP
    End If
   
    GInput(0).dwType = INPUT_KEYBOARD
    CopyMemory GInput(0).xi(0), KInput, Len(KInput)
    Call SendInput(1, GInput(0), Len(GInput(0)))
       
End Function

 

아래와 같은 폼에 코딩을 한다.

 

Option Explicit

Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyReturn Then
        SendKeysA vbKeyTab, True
        KeyAscii = 0
    End If
End Sub

 

그리고 비스타에서 테스트를 해보면 SendKeys에서 발생되던 오류가 없어지고 기존처럼 잘 동작하는게 보일것이다..

 


반응형