[visual-studio] Visual Studio가 자동 단축키 전에 주요 이벤트를 포착하는 이유는 무엇입니까?

나는 최근에 약간의 실험으로 Dvorak 키보드 레이아웃으로 전환했습니다. 전환의 가장 어려운 부분 중 하나는 바로 가기 키를 다루는 것입니다. 대부분의 핫키는 QWERTY를 염두에두고 설계되었으며, 설상가상으로 핫키는 극도로 근육 메모리에 묶여있는 것처럼 보입니다.

오히려 모든 핫 키를 재 학습보다, 나는 때 드보르작이 QWERTY로 다시 레이아웃을 변환 할 수있는 AutoHotkey에 스크립트를 작성했습니다 Ctrl, Alt또는 Win키를 다른 키와 함께 누르면됩니다. Visual Studio ’08을 제외하고 내가 시도한 모든 곳에서 아름답게 작동합니다. 자동 핫키가 번역하기 전에 키 입력이 잡힌 것 같습니다.

이 문제가 발생하는 이유는 무엇이며 어떻게 수정합니까?

다음은 내 스크립트의 발췌 (시작 부분)입니다.

; control + letter
^;::^z
^q::^x
^j::^c
^k::^v

업데이트 : 스크립트는 ahk, vs08 및 coderush가 새로 설치된 Win7에서 잘 작동합니다. 내가 문제를 겪고있는 기계는 비스타를 돌리고있다. 추가 진단 방법에 대한 의견이 있으십니까?

업데이트 2 : 스크립트는 비스타와 2010 베타 2에서 잘 작동합니다. 단지 vs 08 + 비스타 만있는 것 같습니다. 오늘 밤에 vs08을 새로 설치해 보겠습니다.



답변

아하! 나는 그것을 알아 냈다. ahk와 대상 앱이 동일한 권한 (또는 사용자)으로 실행되지 않는 경우 ahk는 키보드 이벤트를 제대로 가로 채거나 시뮬레이션하지 않습니다. 제 경우에는 ahk 스크립트가 현재 로그온 한 사용자로 실행되는 동안 Visual Studio가 관리자 (상승 된) 권한으로 실행되었습니다.

다음 중 하나가 문제를 해결했습니다.

  • 현재 사용자로 vs 및 ahk 실행
  • 스크립트 컴파일 및 관리자 권한으로 vs 및 컴파일 된 앱 실행


답변

OP가 찾은 솔루션에 몇 가지 포인트를 추가하고 싶습니다.

1) 문제는 AHK와 VS가 실행하지입니다 서로 다른 A의 실행되는 스크립트에 의해 생성 된 바로 가기 키는 그냥 – 권한 관리자가 아닌 모드가에서 실행중인 응용 프로그램에서 작동하지 않을 것입니다 관리자 모드가 있지만 문제가 없을 것입니다 경우 다른 방법.

2) 스크립트를 반드시 컴파일 할 필요가 없습니다. autohotkey.exe를 관리자 모드에서 실행하도록 설정하거나 (그게 제가하는 일입니다), 아니면 특정 스크립트에 대한 바로 가기를 만들고 항상 관리자 모드에서 실행되도록 설정하십시오. (btw, 지적하자면, AHK 스크립트의 컴파일 된 버전을 실행해도 성능이 향상되지는 않습니다. 코드는 여전히 해석되기 때문입니다. 이제 인터프리터가 생성 된 실행 파일에 포함되어 있기 때문입니다)


답변

이는 UAC (User Account Control)의 일부인 UIPI (User Interface Privilege Isolation) 라는 보안 기능 때문 입니다.

FAQ에 나열된 몇 가지 해결 방법이 있습니다.

UAC (사용자 계정 컨트롤)로 인해 발생하는 문제를 어떻게 해결합니까?

일반적인 해결 방법은 다음과 같습니다.

  • AutoHotkey 설정에서 컨텍스트 메뉴에 ‘UI 액세스로 실행’추가 옵션을 활성화합니다 . 이 옵션은 시작 메뉴에서 AutoHotkey Setup을 다시 실행하여 AutoHotkey를 다시 설치하지 않고 활성화 또는 비활성화 할 수 있습니다. 활성화되면 스크립트 파일을 마우스 오른쪽 버튼으로 클릭하고 Run with UI Access를 선택하여 시작 하거나 "AutoHotkeyU32_UIA.exe" "Your script.ahk"다음 과 같은 명령 줄을 사용합니다 (전체 경로 포함).
  • 관리자 권한으로 스크립트를 실행하십시오. 또한 이로 인해 스크립트에 의해 시작된 모든 프로그램이 관리자 권한으로 실행되고 사용자가 스크립트를 시작할 때 승인 프롬프트를 수락해야 할 수도 있습니다.
  • 로컬 보안 정책 “관리자 승인 모드에서 모든 관리자 실행”을 비활성화합니다 (권장하지 않음).
  • UAC를 완전히 비활성화하십시오. 이것은 권장되지 않으며 Windows 8 이상에서는 실행 가능하지 않습니다.

일반적으로이 문제를 해결하기 위해 스크립트를 관리자 권한으로 실행하지 않는 것이 좋습니다. 예기치 않거나 원하지 않는 부작용이있을 수 있기 때문입니다. 예를 들어 스크립트가 실행되는 모든 프로그램 Run은 관리자 권한으로 도 실행됩니다. 스크립트에는 Program Files와 같은 다양한 폴더에 대한 불필요한 쓰기 권한도 있습니다. 약간의 잘못된 코드 (어딘가에서 복사하여 붙여 넣은 악성 코드 또는 버그가있는 코드)는 이러한 방식으로 더 많은 피해를 줄 수 있습니다.

물론 마지막 두 가지 옵션도 권장하지 않습니다. 그러면 위에서 설명한대로 활성화하고 사용할 수있는 Run with UI Access 만 남습니다 .


답변

분명히 이것에 대한 해결 방법이 있습니다.

docs Program.htm # Installer_uiAccess에서 .
Lexikos의 포럼 스레드

발췌 :

EnableUIAccess

UAC가 활성화되어있는 동안에도 스크립트가 다음을 수행 할 수 있도록 AutoHotkey.exe를 수정합니다.

관리자 권한으로 스크립트를 실행하지 않고 관리 프로그램 창과 상호 작용합니다. SendPlay를 사용합니다. 한계가 있습니다. 이 스크립트를 사용하기 전에 게시물을 읽으십시오.

ahk 파일에 대한 다운로드 링크가 포럼에서 깨졌지만 Github에서 찾았습니다 : EnableUIAccess.ahk


답변