2013-08-15 15 views
5

실제로 스택 오버플로에 대한 질문을 한 번도 한 적이 없지만 모든 프로그래밍 관련 질문에 대한 답을 찾았습니다. 슬프게도 오늘은 그 시절이 아닙니다.초점이 맞지 않은 채로 입력 허용

인터넷 검색을 하루 종일 보냈고 win32 API를 탐색하고 모든 것을 시도했지만 나는 찾고있는 답을 찾을 수 없습니다.

다음과 같은 상황이 있습니다. 내가 만든 Unity 프로젝트가 있습니다. 조이스틱에서 입력을 사용합니다.이 프로젝트의 다른 구성 요소가 단일체 외부에 있지만, 관련이 없습니다. 내 문제의 근본 원인은 다음과 같습니다. 응용 프로그램이 초점이 맞지 않을 때 입력을 계속 받아들이게하려면 어떻게합니까? 나는 먼저이 방법이 증명 때문에 악화했다 해답을 찾기 위해 노력하고 시작했을 때

내가 국경 지대 2 그것을 할 수 있기 때문에 그것을 할 수 있다는 사실을 알고있다 (I 어제 그것을 발견, 나는 ' 그것을 찾지 못함).

적어도 마우스 또는 키보드에서이를 수행하는 방법을 알고 있다면 조이스틱에 적용하는 방법을 알아 내는데 도움이 될 것입니다.

몇 가지 유용한 정보 : 저는 열렬하고 경험 많은 프로그래머이며 C/C++, C#, Java 및 여러 스크립팅 언어를 수년 동안 코딩 해 왔습니다.

  • SetFocus + SetActive을 사용 : 그것은

    내가 시도 /했던 것들 ... 내가 잠 해요 동안, 내 여가 시간에, 내 직업에 대해, 취미로 을 할 것입니다 내가 입력을 읽고 싶은 다른 윈도우의 무시 목록에 WM_KILLFOCUS를 추가 창 잃고 초점
  • user32 & 통과 null에서 배경
  • 은를 사용하는 동안응용 프로그램의 inputstream을 무시 읽기 입력
  • 에 다른 창을 속여 (그러나 이것은 내가 통해 스트림을 조이스틱 입력을 보내는 방법을 알아낼 수없는 쓸모없는 느낌이었고, 또한 그것은 아직 해결되지 않았기 때문에 다른 응용 프로그램에 초점이 맞지 않으면 문제가 발생했습니다 (예 : ). 메모장을 엽니 다.) 입력이 중지됩니다.

  • Unity 독립 실행 형 게임/프로젝트/응용 프로그램이 백그라운드에서 입력을 받아들이도록하는 방법을 찾았지만 아무런 결과도 얻지 못했습니다.

+0

아, 한 가지 더 : 저는 실제로이 작업을 수행하기 위해 제 3 자 응용 프로그램을 사용하고 싶지 않습니다. 이것은 내 시련을 다소 훼손시킬 수 있습니다. – Destects

+0

[Windows API를 사용하여 키 스트로크를 창에 보내지 않고도 어떻게 보낼 수 있습니까?] (http://stackoverflow.com/questions/1220820/how-do-i-send-key-strokes-to) -a-window-without-being-to-activate-it-using-window) 비록 그것이 당신이 바라는 해답이 아닐지라도 :( –

+0

Nope :/... 이전에 보았지만 언급 한 바와 같이 어떤면에서는 실제로 가능한 일입니다. 그렇지 않으면 내 예제가 존재하지 않습니다 ... – Destects

답변

2

유니티 관련 솔루션이 있다면 나도 몰라,하지만 당신은 상관없이 앱이 초점 여부의 마우스/조이스틱/HID 하드웨어에서 직접 이벤트를 수신하기 위해 RawInput API를 사용할 수 있습니다.

+0

RawInput API를 조사해 보았습니다. 이전에이 API를 사용하려고했지만 어젯밤에 다시 입력을 시도하는 방법을 알 수 없습니다. 유니티 애플 리케이션과 그것을 제대로 받았다 .InterInput을 사용하여, 내가 조이스틱에서받은 일체를 화합하려고했지만, 화합하지 않았다. 내가 입력을 가져 와서 전달하는 서비스가 UIPI에 의해 차단 되었습니까? 어쩌면 새로운 날입니다. 나는 어제보다 더 운이 좋을거야. – Destects

+0

실제 백그라운드 서비스를 참조하는 경우 자체 데스크톱 세션에서 실행되며 다른 바탕 화면 세션에 창 메시지를 보낼 수 없습니다. 하지만 왜 입력을 필요로하는 앱이 아닌 별도의 서비스에서 입력을 캡처하려고합니까? –

+0

'백그라운드에서 실행 '을 활성화 했습니까? '편집 -> 프로젝트 설정 -> 플레이어 '에서 찾았습니다. – Jerdak

0

@RemyLebeau가 제공 한 대답은 입력을 추적하는 적절한 방법이라고 생각합니다. 그러나 해킹을하는 경우 GetForegroundWindow, GetWindowThreadProcessId, AttachThreadInput을 사용하여 활성 UI 스레드에 연결할 수 있습니다. 그런 다음 입력 상태 (예 : GetKeyState, GetKeyboardState 또는 GetKeyboardState)를 '가져오고'포커스를 추적하여 스레드를 전환하여 새 스레드에 분리/연결해야합니다. 이 아닌 다른 스레드에 게시 된 입력 메시지에 대해서만 대기 (예 : GetMessage) 할 수 있습니다.

+0

나는 키보드와 마우스 입력에 유용하게 사용할 수있는 것으로 보였지만, 말했듯이 포어 그라운드 윈도우를 추적해야하고, 윈도우가 활성화되어 있지 않으면 입력을 잃을 수 있습니다. 시스템 스레드에 연결하지 마십시오 – Destects

+0

[오프 주제] 사용자가 앱을 사용하지 않는 동안 왜 조이스틱 입력을 훔쳐 가고 싶습니까? [/ off-topic] – avo

+0

예를 들어, 외부 인터페이스 인 경우 외부 인터페이스에 포커스가있는 동안 앱을 제어 할 수 있기를 원합니다. – Destects

관련 문제