성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Roll A Lisp In C - Reading ; https...
[정성태] Java - How to use the Foreign Funct...
[정성태] 제가 큰 실수를 했군요. ^^; Delegate를 통한 Bein...
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>OpenTabletDriver의 버튼에 더블 클릭을 매핑 및 게임에서의 지원 방법</h1> <p> OpenTabletDriver에,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > (WACOM도 지원하는) Tablet 공통 디바이스 드라이버 - OpenTabletDriver ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/12632'>https://www.sysnet.pe.kr/2/0/12632</a> OpenTabletDriver를 (관리자 권한으로 실행하지 않고도) 관리자 권한의 프로그램에서 동작하게 만드는 방법 ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/12635'>https://www.sysnet.pe.kr/2/0/12635</a> </pre> <br /> 버튼을 더블 클릭으로 연결하는 것은, 아쉽게도 구조적인 문제로 지원이 되지 않습니다. 그래도 혹시나 나중에 이와 관련해 찾아보실 분들을 위해 기록을 남깁니다. ^^<br /> <br /> 우선, OpenTabletDriver의 이런 설정들은 기본적으로 Plugin 개념으로 지원이 됩니다. 따라서 소스 코드를 다운로드했을 때 "OpenTabletDriver.Plugin"을 열면 "Platform\Pointer\MouseButton.cs" 경로에 있는 파일에 버튼을 위한 선택 항목을 enum을 통해 추가해야 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > namespace OpenTabletDriver.Plugin.Platform.Pointer { public enum MouseButton { None = 0, Left = 1, Middle = 2, Right = 3, Backward = 4, Forward = 5, <span style='color: blue; font-weight: bold'>LDoubleClick = 6,</span> } } </pre> <br /> 당연히 현재는 해당 상수에 매핑된 핸들러가 없어서 동작하지 않습니다. 따라서, OpenTabletDriver 프로젝트의 "Interop\Input\WindowsVirtualMouse.cs" 파일에서 MouseDown과 MouseUp의 코드에 각각 LDoubleClick 상수에 대한 처리를 추가해야 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > public void MouseDown(MouseButton button) { switch (button) { case MouseButton.Left: MouseEvent(MOUSEEVENTF.LEFTDOWN); return; case MouseButton.Middle: MouseEvent(MOUSEEVENTF.MIDDLEDOWN); return; case MouseButton.Right: MouseEvent(MOUSEEVENTF.RIGHTDOWN); return; case MouseButton.Backward: MouseEvent(MOUSEEVENTF.XDOWN, (uint)XBUTTON.XBUTTON1); return; case MouseButton.Forward: MouseEvent(MOUSEEVENTF.XDOWN, (uint)XBUTTON.XBUTTON2); return; <span style='color: blue; font-weight: bold'>case MouseButton.LDoubleClick: return;</span> } } public void MouseUp(MouseButton button) { switch (button) { case MouseButton.Left: MouseEvent(MOUSEEVENTF.LEFTUP); return; case MouseButton.Middle: MouseEvent(MOUSEEVENTF.MIDDLEUP); return; case MouseButton.Right: MouseEvent(MOUSEEVENTF.RIGHTUP); return; case MouseButton.Backward: MouseEvent(MOUSEEVENTF.XUP, (uint)XBUTTON.XBUTTON1); return; case MouseButton.Forward: MouseEvent(MOUSEEVENTF.XUP, (uint)XBUTTON.XBUTTON2); return; <span style='color: blue; font-weight: bold'>case MouseButton.LDoubleClick: return;</span> } } </pre> <br /> 보는 바와 같이 MouseButton의 처리가 Down과 Up에 대한 핸들러를 나눠서 처리하는 구조입니다. 바로 이 문제 때문에 부드러운 Double Click 처리가 안 되는 것입니다. 억지로 하려면, Down과 Up에 대해 각각 한 번의 Click 이벤트를 추가하는 식으로 구현해야 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > public void MouseDown(MouseButton button) { switch (button) { // ...[생략]... <span style='color: blue; font-weight: bold'>case MouseButton.LDoubleClick: MouseEvent(MOUSEEVENTF.LEFTDOWN); MouseEvent(MOUSEEVENTF.LEFTUP); return;</span> } } public void MouseUp(MouseButton button) { switch (button) { // ...[생략]... <span style='color: blue; font-weight: bold'>case MouseButton.LDoubleClick: MouseEvent(MOUSEEVENTF.LEFTDOWN); MouseEvent(MOUSEEVENTF.LEFTUP); return;</span> } } </pre> <br /> 정말 억지스럽죠? ^^; (아니면, 그냥 MouseDown 또는 Up에 LEFTDOWN/UP을 2번 연속 처리하는 것이 더 부드러울 것입니다.)<br /> <br /> 그리고 위의 소스 코드를 보며 한 가지 더 문제가 나오는데요. 바로 (마우스/키보드 매크로를 막는) 보안 프로그램이 적용된 게임에서는 동작하지 않을 것이라는 점입니다. 물론 태블릿으로 게임하는 경우는 거의 없겠지만. ^^<br /> <br /> 만약 이 문제를 해결하고 싶다면, 위의 MouseDown/Up 이벤트의 MouseEvent 코드를 이전에 만들었던 라즈베리 파이 등의 가상 마우스와,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Raspberry Pi Zero(OTG)를 다른 컴퓨터에 연결해 가상 마우스로 쓰는 방법 (절대 좌표) ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/11364'>https://www.sysnet.pe.kr/2/0/11364</a> </pre> <br /> 연동해야만 합니다. ^^ 결국, 이렇게나 복잡하게 확장해야 한다면 일반인들 입장에서는 도저히 쓸 수 없는 태블릿 드라이버라고 봐야 합니다. ^^;<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1748
(왼쪽의 숫자를 입력해야 합니다.)