내 응용 프로그램의 Windows 버전에서는 WM_INPUT을 사용하고 마우스 장치를 직접 등록하여 가장 정확한 동작을 얻습니다. X11에서 어떻게해야합니까?X11에서 생 마우스 입력을 캡처하는 방법은 무엇입니까?
답변
사용하는 프레임 워크에 따라 여러 가지 방법이 있습니다.
X11을 프로그래밍하는 가장 기본적인 방법 인 "Xlib"로이 작업을 수행하려는 경우 Xlib manual을 살펴보고 XInput에 특히주의해야합니다. XI2 (XInput 버전 2)
을 사용하면 더 정교한 정보를 검색 할 수 있습니다. Qt을보십시오. 그것은 내가 본 최고의 GUI API 중 하나입니다.
추가 정보가 필요하면 알려주십시오.
다음은 Linux에서 원시 마우스 움직임을 얻기위한 참조, 조언 및 두 가지 접근 방식을 제공하는 11 개의 링크입니다. Link #2 (Python)은 마우스 장치를 읽는 전통적인 방법을 보여 주며 #1 (C), #3 (Python) 및 #4 (C)은 이벤트 방식을 보여줍니다. ps/2 프로토콜은 link #5에 있습니다. Link #6은 명령 줄 예입니다.
두 접근법 각각은 x 및 y 방향으로 델타 스트림을 장치 드라이버 파일에서 가져옴으로써 X (Xlib)를 바이 패스합니다. 델타 대신에, Xlib은 창 (또는 화면) 위치를 제공하기 때문에 특정 방향으로 계속 읽기를 원한다면 포인터를 창 가장자리에서 계속 움직여야합니다. [X로 많은 프로그램에서 사용되는 "중심으로 뒤틀기"해킹에 대한 빠른 토론은 link #8을 참조하십시오.] 그러나 새로운 XInput 2.0 확장 (link #10)은 델타 가져 오기를위한 X API를 제공합니다 (최소한 -lX11 및 -lXi).
두 장치의 접근 방식 중 하나의 본질은 이것이다 :
1 : "는/dev/입/Mouse0"행 장치 또는 (그것은 당신의 배포판의 이름에 따라도에 비슷한처럼 뭔가를 읽고 오픈/dev/input/event4)를 사용하는 것이 좋습니다.
2 : 읽어보십시오. 이렇게 많은 바이트가 마우스 움직임을 나타냅니다. 예를 들어 위와 같이 mouse [n]을 여는 것과 같이 ps/2 원시 프로토콜 방법의 경우 기본적으로 x, y 동작을 신경 쓰면 모든 3 바이트 시퀀스의 두 번째 및 세 번째 바이트 만 필요합니다. 두 번째 바이트는 X를 나타내며 세 번째 바이트는 Y를 나타냅니다. 두 바이트의 각각은 단일 int8_t (부호가있는 8 비트) 수량입니다. 긍정적 인 X는 오른쪽에있는 것처럼 보입니다. 문제 없습니다. 그러나 긍정적 인 Y는 (대부분의 수학 교과서 에서처럼) 상향 인 것처럼 보입니다. 반면에 긍정적 인 Y는 일반적으로 화면 왼쪽 위 모서리에서 아래쪽으로가는 것으로 간주됩니다 (대칭 왼쪽 데카르트 좌표계).
기타 참고 사항 : X를 실행중인 경우 fopen/getc 대신 open/read를 사용할 수 있습니다 (link #7 및 다른 링크의 코드 참조). 처음 3 개의 버튼에 대해 마우스 버튼 상태를 원하거나 x 또는 y의 부호를 확인하려면 첫 번째 바이트도 확인하십시오. [오버 플로우는 일반적인 "스트림"사용에서의 문제이지만 의심 할 여지가 있습니다.] 리눅스 명령 줄에서 실험하면 빠른 "cat"에서 "less"로, 대부분의 동작 1 단위입니다 (^ A^@ 및 <FF>). 이것은 마우스 구성 방법과 마우스 사용 능력에 달려 있습니다. Link #5은 간단한 프로토콜을 다루며 단추 4와 5 및 마우스 휠에 대한 Microsoft intellimouse 표준 확장을 다루고 있습니다.Link #11은 ps/2 마우스 또는 키보드 용 컨트롤러 칩/로직 구성을 포함합니다. 이 인터페이스로 마우스를 구성하는 방법을 설명합니다. 창 작업을 자동화하는 데 도움이되는 마우스 클릭을 시뮬레이트하는 도구 (link #9, xdotool)가 있습니다. 마지막으로이 장치에서 직접 읽으려면 root 권한이 필요합니다 (배포판에 따라 다름).
- 1. 파이썬 데몬으로 키 입력을 캡처하는 방법은 무엇입니까?
- 2. Linux에서 원시 HID 입력을 캡처하는 방법은 무엇입니까?
- 3. 루비에서 키 입력을 캡처하는 방법은 무엇입니까?
- 4. 패널에서 마우스 휠을 캡처하는 방법은 무엇입니까?
- 5. 화면 캡처에서 마우스 커서를 캡처하는 방법은 무엇입니까?
- 6. Perl에서 STDIN으로 SCIM을 통해 중국어 입력을 캡처하는 방법은 무엇입니까?
- 7. Silverlight 응용 프로그램에서 키 입력을 캡처하는 방법은 무엇입니까?
- 8. JavaScript에서 마우스 오른쪽 버튼 클릭 이벤트를 캡처하는 방법은 무엇입니까?
- 9. JFrame/Swing에서 모든 마우스 이벤트를 캡처하는 방법은 무엇입니까?
- 10. X11에서 프레임없이 GUI를 만드는 방법은 무엇입니까?
- 11. 백 스페이스를 캡처하는 방법은 무엇입니까?
- 12. rich : modalpanel에서 입력 된 입력을 캡처하는 방법?
- 13. 마우스가 아닌 마우스 입력을 사용하십시오.
- 14. 웹캠에서 비디오를 캡처하는 방법은 무엇입니까?
- 15. ListView에서 이벤트를 캡처하는 방법은 무엇입니까?
- 16. X에서 키를 캡처하는 방법은 무엇입니까?
- 17. SWF 패킷을 캡처하는 방법은 무엇입니까?
- 18. Google지도로 페이지를 캡처하는 방법은 무엇입니까?
- 19. Webclient에서 오류를 캡처하는 방법은 무엇입니까?
- 20. 키보드 이벤트를 캡처하는 방법은 무엇입니까?
- 21. X11에서 WM_DELETE_WINDOW를 가로채는가?
- 22. 마우스로 화면 이미지를 캡처하는 방법
- 23. X11에서 팝업 그리기
- 24. 비밀번호 입력을 자동화하는 방법은 무엇입니까?
- 25. 오른쪽 클릭 컨텍스트 메뉴에서 붙여 넣기 이벤트를 캡처하는 방법은 무엇입니까?
- 26. Java에서 여러 개의 마우스 입력을 처리하려면 어떻게해야합니까?
- 27. 키보드, 마우스 입력을 무시하고 SendInput을 전달하십시오.
- 28. JSpinner의 키보드 및 마우스 입력을 비활성화하려면 어떻게합니까?
- 29. 카메라 입력을 마우스 (동작 추적)로 사용
- 30. Java에서 <tab> 키 입력을 캡처하는 가장 좋은 방법은 무엇입니까?