
저는 창문이 뒤에 있어도 작동하는 비디오 게임(Minecraft)에서 자동 클릭 장치(농사용)를 만들려고 합니다. 창 포커스를 성공적으로 잃은 후 게임 자동 일시 중지를 비활성화한 다음 다음을 사용해 보았습니다.
xdotool click --repeat 100000000000 --delay 1000 1 --window $(xdotool search --name --onlyvisible Minecraft)
아니면 단순히
xdotool click --repeat 100000000000 --delay 1000 1 --window WINDOW_ID
WINDOW_ID
수동으로 얻은 게임 창의 ID는 어디에 있습니까? 그러나 두 명령 모두 --window
옵션을 완전히 무시하고 다음과 같이 작동합니다.
xdotool click --repeat 100000000000 --delay 1000 1
즉, 현재 마우스가 가리키는 곳을 클릭합니다.
제가 뭔가 잘못하고 있는 걸까요, 아니면 제가 인식하지 못하는 기술적인 한계가 있는 걸까요?
답변1
문제가 실제로 xdotool에서 발생합니까?
입력한 명령에는 아무런 문제가 없습니다.
옵션이 --window
존재합니다 xdotool click
.
어쩌면 문제의 일부가 Minecraft에서 비롯되었을 수도 있습니다. 다른 소프트웨어를 사용해 보셨나요?
이것이 제가하는 것입니다. 그것은 나를 위해 작동합니다:
2개의 터미널을 엽니다. 그들에게 전화하자터미널 1그리고터미널 2.
(저는 St와 Guake를 사용하여 이 작업을 수행했지만 다른 터미널 에뮬레이터를 사용해 볼 수도 있습니다.)존재하다터미널 1, 달리기
xev | grep button
.
빈 창이 열리고 이벤트가 인식되는지 확인합니다.존재하다터미널 2, 을 실행한
sleep 5 && xdotool getwindowfocus
다음
에서 생성된 창을 빠르게(5초 미만) 클릭합니다xev
.
번호를 받고 전화하자창구ID.집중하다터미널 2다시 한 번 마우스 커서가
xev
창 밖에 있는지 확인하십시오.
그런 다음 명령을 실행하십시오xdotool click --window WINDOW_ID 1
.출력 보기터미널 1. 다음과 같은 결과를 얻을 수 있습니다:
state 0x0, button 1, same_screen YES state 0x100, button 1, same_screen YES
이는 xev
창에 초점이 맞춰지지 않았음에도 xdotool이 보낸 클릭 이벤트를 수신했음을 의미합니다.
또한 St(또는 임의의 터미널)에서 초점이 맞춰지지 않은 Guake에 클릭을 보내고 Guake 창 밖으로 마우스 커서를 이동하면 이제 Guake에 초점이 맞춰져 있다는 점을 제외하면 아무 일도 일어나지 않는다는 것을 알았습니다.
그러나 다른 방향으로는 작동하지 않습니다(guac에서 saint로, guac은 계속 집중합니다).
너는 어떤 다른 일을 할 수 있니
예를 들어 키보드 이벤트는 실제로 마우스 위치에 관심이 없지만 일부 마우스 이벤트(클릭 포함)는 중요합니다. 즉, "어딘가"를 클릭해야 합니다.
Xdotool 매뉴얼에는 다음과 xdotool click --window
같이 나와 있습니다
Uses the current mouse position when generating the event.
.
따라서 마우스 커서가 클릭하려는 창 밖에 있으면("Minecraft"라고 가정) Minecraft 창은 이벤트를 무시합니다.
내가 본 가장 간단한 해결책은 다음과 같습니다.
- 현재 마우스 위치를 저장합니다.
prev_pos=$(xdotool getmouselocation | awk -F "[: ]" '{print $2 " " $4}'
- 클릭하려는 창으로 이동합니다(예: 왼쪽 상단으로 이동).
xdotool mousemove $(xdotool getwindowgeometry $(xdotool search --name --onlyvisible Minecraft | tail -1) | awk -F "[, ]" 'NR==2{print $4 " " $5}'))
- 클릭(마우스가 올바른 위치에 있기 때문에 작동함):
xdotool click 1
- 이전 마우스 위치로 돌아가기:
xdotool mousemove $(echo $prev_pos)
그런데 클릭을 여러 번 반복하려면 다음을 수행해야 합니다.
- Minecraft 창에 머무르세요.
- 매초마다 창을 전환하면 options 대신 for 루프를 사용해야 합니다
--repeat 100000000 --delay 1000
.