xdotool 클릭과 함께 작동하는 --window 옵션을 얻을 수 없습니다

xdotool 클릭과 함께 작동하는 --window 옵션을 얻을 수 없습니다

저는 창문이 뒤에 있어도 작동하는 비디오 게임(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.

관련 정보