2012-12-20 2 views
6

작은 메뉴를 팝업해야하는 Windows 8의 Win + X에 대한 키 누르기 이벤트를 시뮬레이트하려하지만이 작업을 SendInput을 사용하여 수행 할 수 없습니다. 다른 조합의 키 (예 : Win + R, Win + E, Win + D)의 경우 작동하지만 Win + X는 작동하지 않습니다. 나는 Synergy +가 같은 문제를 가지고 있다는 것을 알아 챘지만 Windows 화면 키보드는 그렇지 않다. 온 스크린 키보드에서 사용하는 SendInput 매개 변수도 살펴 보았습니다. 그러나 응용 프로그램에서 정확히 동일한 매개 변수를 사용하더라도 여전히 메뉴가 표시되지 않습니다.프로그래밍 방식으로 Win + X, Alt-Tab 누르기

제 질문은 어떻게 작동합니까? 또는이 메뉴를 표시 할 다른 방법이 있습니까?

답변

3

최근에 우리 응용 프로그램에 대한 지원이 추가되었습니다. 우리는 경쟁자를 이기기에 다행입니다! 당신이 해결하고 싶은거야, 그래서

는 가장 많이 사용되는 차단 바로 가기 Alt 키 + 수있는 Windows 8의 새로운 UIPI 제한이 있습니다.

매니페스트에 바이너리를 uiAccess="true"으로 표시해야합니다. (이 작업 방법에 대한 자세한 내용은 google을 참조하십시오.)이 매니페스트는 Microsoft에서 승인 한 코드 서명 인증서로 서명하고 "안전한 위치"(system32 또는 프로그램 파일/프로그램 파일 (x86))에 설치하지 않으면 바이너리가 시작되는 것을 방지합니다. .

도우미에서 프로그램을 대여하는 경우 : 중간 무결성 프로세스에서 uiAccess 바이너리를 CreateProcess과 함께 시작할 수 없습니다 (매니페스트는 "높은"무결성을 요구함). 대신, ShellExecute "open"을 사용하여 쉘을 시작하여 쉘을 높이는 것이 가장 쉽습니다. CreateProcessAsUser을 사용하는 경우 SetTokenInformation을 사용하여 TokenUIAccess을 1로 설정해야합니다. 그렇지 않으면 시작이 실패합니다.

최종 조건 : uiAccess는 프로세스에서 수행 할 수있는 작업을 상당히 제한합니다. 일반 (중간 무결성) 프로세스에서 UI 입력을받을 수 없으므로 다른 응용 프로그램이 Windows와 상호 작용할 수 없습니다. UI를 별도의 프로세스로 분리하는 데있어 우수 사례를 따르지 않았다면이를 수행해야 할 좋은 이유가 될 것입니다. 또는, uiAccess를 필요로하는 작업은 작은 독립적 인 도우미 바이너리에 넣을 수 있으며 UI가 아닌 프로세스에서도 완전히 분리 할 수 ​​있습니다. 기본 앱은 높은 수준의 무결성 도우미 프로세스로 실행될 수 있습니다.이 프로세스에는 해당 작업 (예 : SendInput)을 수행하는 데 필요한 지침이 전송됩니다.

마지막으로 SendInput이 작동합니다.

+1

이제 경쟁자가 머리를.니다. :-) –

+0

나는 누군가가 이것 때문에 단지 프로그램을 바꿀 것 같지 않습니다 ...;) –

+1

uiAccess = true는 적은 권한으로 다른 프로그램에서 끌어다 놓을 수 없으므로주의하십시오. –