2015년 6월 19일 금요일

VB6 : "sendkeys" 가 사용권한이 없다며 오류가 날때.

아...
예전 프로그램 중 하나가 특정 컴퓨터에서 오류를 발생시키며 종료가 안된다.

왜 그런가... 찾아보니, "sendkeys" 를 이용해서 "F4" 키를 보내 다른 프로그램을 종료를 시켜야 하는데, 이게 권한 문제로 막혀버리는 문제가 있었다.
즉, '사용자 계정 콘트롤(UAC)' 문제.

이럴경우 "관리자권한" 으로 프로그램을 실행시키면 대개는 해결이 된다.

문제는... 이 프로그램은 "관리자권한" 으로 실행 시켜도 소용이 없다는것...
더 큰 문제는 다른 컴퓨터는 되는데, 단 1대의 컴퓨터에서만 안된다는것...

물론 '사용자 계정 콘트롤(UAC)'을 사용하지 않게 하면 간단히 해결되겠으나, 그럴수도 없다.

결국 꼼수.
문제가 있는 소스에다 아래 함수를 추가 한다.

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

즉, 원래 Sendkeys 라는 API 를 같은 소스내에 Sendkeys 라는 Sub Function 만들어 대체하게 만들어 버림.

이렇게하니 좀 불안하긴 하지만, 어쨌든 잘 돌아 간다.