TouchInjection C# API 사용중 문제 해결방법

윈도우 8에서 터치 이벤트를 만들기 위해 Touch Injection API 를 사용하던 도중 발생한 문제에 대한 해결 방법입니다.

Touch Injection 은 Windows 8 부터 지원되는 Windows API 이며 User32.dll 에서 Import 하실수 있습니다.

원래는 C++ 만 지원하는 API 이나 C# 에서도 지원이 가능하게 끔 만들어진 라이브러리가 있습니다.

https://code.msdn.microsoft.com/TouchInjection-on-Windows-885150d2#content

이 라이브러리를 사용하면 C# 에서도 터치 이벤트를 만들어낼수 있습니다.

아래는 제가 이 라이브러리를 사용하면서 발생했던 문제에 대한 해결 방법입니다.

문제사항 해결방법
InitializeTouchInjection() 에 Parameter를 넣으면 터치이벤트가 아예 동작하지 않음 InitializeTouchInjection() 에서 Parameter를 모두 제거해서 해결
양손 적용시 터치가 한군데에서만 연속적으로 클릭되던 문제 각 손이 각각 업데이트 되지만 업데이트는 2개 모두 하던 방식에서 각 손만 임시 contact를 만들어 각각 업데이트 하도록 해서 Injection 시키도록 하여 해결
터치인젝션으로 터치클릭 & 무브가 안되는 문제 터치클릭을 위해서 UPDATE / INRANGE / INCONTACT 옵션을 사용했는데 문제는 이 이벤트를 발생시키기 전에 DOWN / INRANGE / INCONTACT 이벤트를 발생시켜야 이 이벤트가 정상적으로 동작하여서 터치가 UP된 후 다시 터치클릭 & 무브 하려할때 해당 이벤트가 발생되지 않았으면 발생시키도록 수정
터치가 한쪽밖에 안됨 기존에 터치가 한군데에서만 연속적으로 클릭되던 문제의 원인이 LeftHand 신호를 받지 않았기 때문에 발생했던 문제였기 때문에 임시로 해결했던 contacttemp 를 만들어 각각 업데이트 하도록 Injection 시키던걸 양손 모두 한꺼번에 업데이트 하도록 변경하여서 수정
두 손 터치가 제대로 되지 않는 문제 스택오버플로우에 따르면 TOUCH_FEEDBACK_DEFAULT 는 윈도우의 Pen and Touch 설정에 영향을 받기 때문에 여러가지 문제가 생길수도 있어서 TOUCH_FEEDBACK_INDIRECT 를 통해 InitializeTouchInjection()을 초기화해서 해결 http://stackoverflow.com/questions/20875283/why-is-only-one-touch-being-injected-when-using-touch-injection-api-with-win8
두 손 터치가 인식은 되지만 터치클릭이 되지 않는 문제 Touch Down and Move 하기 전 이전 포인트 플래그가 터치가 올라갔을때 이면 Touch Down 플래그를 등록하는데 등록한 후 한번 Move 를 진행하고 그 다음번에 Touch Down and Move 를 위한 플래그로 변경시키는 방식에서 애초에 이전 플래그가 터치가 올라갔을때 이면 Touch Down 플래그를 등록한 후 바로 TouchInjection()을 호출하여 처리한 후 Touch Down and Move 를 위한 플래그를 넣고 Move 하고 Injection 하도록 하여서 해결

Leave a Reply

Your email address will not be published. Required fields are marked *