Cara mendapatkan id jendela dari Stack xdotool Window

12

Saya perlu id jendela yang aktif atau fokus. Saya mencoba menggunakan xdotoolperintah. Ada perintah:

xdotool getactivewindow

hasilnya disimpan ke tumpukan jendela. Saya ingin mendapatkan widnow id dari tumpukan jendela ini. Perintah

xdotool getactivewindow getwindowpid

tidak memuaskan saya. Saya tidak ingin mendapatkan id jendela dengan proses id.

Mariusz
sumber

Jawaban:

11

Saya pikir xdotool getactivewindowapa yang Anda inginkan - apakah Anda mencobanya?

Ia mencetak id jendela (dari tumpukan jendela) jika tidak ada lagi sub perintah xdotool pada baris perintah.

Sebagai xdotool getactivewindow getwindowpidcontoh, getactivewindowletakkan id di tumpukan jendela, dan getwindowpidgunakan id ini untuk menanyakan PID. Perhatikan bahwa menjalankan perintah itu di terminal akan selalu mengembalikan ID dari jendela terminal, karena itu aktif. Untuk mendapatkan ID dari jendela lain, coba sleep 2s && xdotool getactivewindowdan pilih jendela yang diinginkan dalam rentang waktu dua detik.


Ada komplikasi saat menggunakan xdotooldengan alat lain untuk penanganan jendela:

Sementara xdotooloutput menggunakan angka desimal untuk windwo id, sebagian besar alat lain menggunakan angka heksadesimal untuk output (mereka mendukung keduanya untuk input biasanya).

Misalnya, jika Anda menemukan jendela dengan xdotool getactivewindow, Anda tidak akan menemukan hasil dalam output xwininfo -root -tree, yang mencantumkan semua jendela. Itu perlu dikonversi ke angka heksadesimal terlebih dahulu:

$ xdotool getactivewindow                              
69206716
$ printf 0x%x 69206716                  
0x42002bc
$ xwininfo -root -tree | grep 0x42002bc
           0x42002bc (has no name): ("konsole" "Konsole")  1154x781+0+0  +1289+498


Mengonversi desimal ke heksadesimal:

printf 0x%x 69206716

Mengubah heksadesimal menjadi desimal:

printf %i 0x42002bc
Volker Siegel
sumber
Saya mencoba xdotool getactivewindowperintah dan masalahnya adalah tidak mencetak hasil di terminal. Ini menyimpan hasil ke tumpukan jendela. Perintah ini mencetak beberapa nomor tetapi ini bukan id jendela (mis. 35651588)
Mariusz
Mengapa menurut Anda 35651588 bukan id jendela?
Volker Siegel
Ya, saya pikir 35651588 bukan id jendela. Anda dapat melihat id windows dengan perintah xwininfo, mis. xwininfo -root -tree- perintah ini mencetak semua jendela dan windows memiliki jenis penomoran lain.
Mariusz
1
xwininfomenunjukkan id jendela sebagai angka heksadesimal, dan xdotool menunjukkan angka desimal, tetapi sama saja.
Volker Siegel
kamu benar. 35651588 = 0x2200004. xwininfo -root -tree | grep 2200004 0x2200004 "user@host:~": ("gnome-terminal" "Gnome-terminal") 1680x974+0+26 +0+51
Mariusz
1

Perintah ini bekerja untuk saya

xdotool key --window "$(xdotool getactivewindow)" F5

xdotool versi 3.20160805.1

Ahmed Habiba
sumber
xdotool getactivewindow key F5harus menghasilkan hasil yang sama
user3804598