2014-06-20 3 views
2

고객 용 응용 프로그램을 작성 중이며 문제가 발생했습니다.Windows 응용 프로그램에 포커스가 필요합니다.

응용 프로그램이 휴대 전화와 대화하고 통화 처리를합니다. 그것이하는 일 중 하나는 "응답 전화"버튼을 보여주는 것입니다. 마우스로 이것을 클릭하면 잘 동작합니다.

하지만 고객이 키보드 단축키를 사용하려고하는데 문제가 있습니다. 응용 프로그램의 창에 포커스가 있으면 포커스를 얻을 수 있습니다. 그러나 Windows 포커스 훔치기 방지 기능을 사용하면 사용자가 다른 응용 프로그램에있는 경우 포커스를 얻을 수 없습니다.

여기에서 초점을 도용하는 장단점을 논의하지 마십시오. 나는 그것들을 이미 알고 있으며 그것들을 내 고객에게 주었다. 틀린가, 그렇지 않든, 그들은 여전히 ​​이것을하고 싶어하고, 그들은 법안을 지불하고 있으므로 결정하게됩니다.

여러 가지 해결 방법이 있지만 더 이상 작동하지 않는 것 같습니다. 예를 들어 HKEY_CURRENT_USER \ Control Panel \ Desktop \ ForegroundFlashCount를 3으로 설정하고 ... \ ForegroundLockTimeout을 0으로 설정합니다.

내 옵션은 무엇입니까? 불가능한가요? 아니면 바이러스 검사기가 싫어할 키보드 후크 응용 프로그램을 만들어야합니까?

이것은 Qt/C++ 응용 프로그램입니다. 그러나이 작업을 수행 할 수있는 C# 예제 코드가 있다면 잘됩니다.

도와 주시면 감사하겠습니다.

+0

다음 해결책을 확인하십시오. http://stackoverflow.com/questions/17403511/qwidget-on-mac-os-x-not-focusing-in-qt-5-x –

+3

특정 바로 가기가 필요하면 , 초점을 훔치기 그대로 그대로 두는 것이 좋습니다. 단일 시스템의 바로 가기를 등록하십시오. Qt는이 기능을 제공하지 않지만'QxtGlobalShortcut' 또는 WinAPI 기반 솔루션을 사용할 수 있습니다. –

+0

포커스를 응용 프로그램으로 다시 이동 하시겠습니까? 아니면 바로 가기를 잡으시겠습니까? 그리고 예, 그것은 소름 끼치는 생각입니다. 그러나 고객이 주장한다면, 당신은 무엇을 할 수 있습니까? –

답변

2

나는이 날짜가 어땠는지 알지 못하지만, RegisterHotKey을 시도해 볼 수 있습니다.

이 기능을 사용하면 응용 프로그램에 포커스가있을 때뿐만 아니라 시스템 전체에서 키보드 이벤트를들을 수 있습니다. 당신은 윈도우 핸들을 제공 할 필요가 없다. 당신이 그 인수를 null로 남겨두면 이벤트는 당신의 스레드에 여전히 게시된다.

관련 문제