Yanıtlar:
xdotool
işaretçi konumunu ( xdotool getmouselocation
) gösterir ve son sürümler (2.20110530.1'den beri) o pencerede hangi pencerenin olduğunu belirtir . Hiçbiri xwininfo
, wmctrl
veya eski sürümleri xdotool
görünür görünür olan bir ekran konumuna göre bir pencere eşleştirmek için bir yol olması.
Temel X kütüphane çağrısı XQueryPointer
(bir QueryPointer
mesaja karşılık gelir ). İşte bu çağrı etrafında basit bir Python sarmalayıcı komut dosyası (kullanarak ctypes
). Hata denetimi büyük ölçüde atlandı. Ekran 0'ı kullandığınızı varsayar (ekranların birden fazla ekrana sahip olabileceğini bilmiyorsanız, bunu dikkate almayın).
#! /usr/bin/env python
import sys
from ctypes import *
Xlib = CDLL("libX11.so.6")
display = Xlib.XOpenDisplay(None)
if display == 0: sys.exit(2)
w = Xlib.XRootWindow(display, c_int(0))
(root_id, child_id) = (c_uint32(), c_uint32())
(root_x, root_y, win_x, win_y) = (c_int(), c_int(), c_int(), c_int())
mask = c_uint()
ret = Xlib.XQueryPointer(display, c_uint32(w), byref(root_id), byref(child_id),
byref(root_x), byref(root_y),
byref(win_x), byref(win_y), byref(mask))
if ret == 0: sys.exit(1)
print child_id.value
Kullanım örneği:
xwininfo -tree -id $(XQueryPointer)
$(XQueryPointer)
etmek 0
ve çağırmak xwininfo -root
bu
root_id.value
eğer yazdırmayı deneyin child_id.value == 0
.
if child_id.value == 0: print root_id.value
else: print child_id.value
sed /x[0-9]\\++/q\;d <(xwininfo -tree -id $(XQueryPointer))
xwininfo
Komut çıktısı bu tür verir, ama sen hakkında bilgi istediğiniz pencereyi tıklayın zorunda:
% xwininfo
xwininfo: Please select the window about which you
would like information by clicking the
mouse in that window.
xwininfo: Window id: 0xa0000d "flask"
...
Bunu yapmak: xwininfo | grep 'Window id:'
size kimliğini ayrıştırabileceğiniz bir şey verebilir.
xwinfo |grep window id:' &
ve onu takip ederek etkileşimli olmayan hale getirilebilir xdotool click 1
... ancak bu , fareyi click
yakalamadan önce ön planın yürütülmesi riskini taşır xdotool
. Nominal bir `` uyku n '' kullanmayacağım, bu yüzden bu cevap yolda olsa da, daha fazla satır içi bir şey olup olmadığını görmek için bir süre bekleyeceğim ...
bunu deneyin, sadece xdotool kullanır, ancak sürümü en az "2.20110530.1"
xdotool getmouselocation --shell | grep WINDOW
pencere kimliğini doğrudan almak için bunu kullanabilirsiniz:
sedGetValue='s/.*=\(.*\)/\1/'
windowId=`xdotool getmouselocation --shell 2>/dev/null |grep WINDOW |sed "$sedGetValue"`
echo $windowId
xdotool getmouselocation --shell | grep WINDOW | awk -F "=" '{print $2}'
xdotool bunu yapmak için yeterince iyidir.
Çalıştırın xdotool getactivewindow
ve sonucu göreceksiniz (int) Pencere HERHANGİ bir monitörün üzerinde olabilir. Sadece bir tıklama için bekleyen x11 işaretçisinin bulunduğu yeri okuyun ve uzak bir pencere, bir vncserver veya küp masaüstü ortamının 3. masaüstü olsun. Sadece çalışıyor.
Daha iyi testler için uyku modunu kullanarak oynayabilirsiniz sleep 3; xdotool click 1+2; xdotool getactivewindow
.
Gördüğüm kadarıyla getwindowsfocus
aynı değeri döndürüyor getactivewindow
.
Tıklamaları manuel olarak yaparsanız, bağlam menüsünü görürsünüz, ancak 1 + 2'yi tıklamak, geçerli fare konumunu tıklayıp istediğiniz kimliği almak için her iki tıklamayı da tetikler.
Dene :)
Python-xlib'e erişiminiz varsa , Gilles'in cevabına daha kısa ve daha pythonic eşdeğeri:
from Xlib.display import Display
display = Display()
window = display.screen().root
result = window.query_pointer()
print(result.child.id)
Peter.O'nun cevabı ile oynadım ve geldim:
xdotool click 1|xwininfo|grep 'Window id:'
ArchWiki'nin buna iyi bir cevabı var:
activeWinLine=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)")
activeWinId=${activeWinLine:40}
sed
Bunu kullanarak , bunu yapmanın muhtemelen en okunabilir yolu olan tek bir satırda yapabilirsiniz:
activeWin="$(xprop -root | sed -n 's/^_NET_ACTIVE_WINDOW(WINDOW): window id # //p')"
Not dahil edildi xdotool
benim Debian minimal X11 eksik olduğunu unutmayın xprop
(aynı şekilde sed
tabii ki).
Çatallamak istemiyorsanız sed
veya grep
metin dönüşümünü tamamen yapamıyorsanız, değişikliklerin biraz bash
çıkması durumunda belki biraz daha güvenlidir xprop
:
activeWin="$(xprop -root)"
activeWin="${activeWin#*_NET_ACTIVE_WINDOW(WINDOW):}'
activeWin="${activeWin%%?_NET_*}'
activeWin="${activeWin##* }'
Her neyse, böyle basit bir görevi arşivlemenin garip bir yolu var.
xprop -root 2>/dev/null | sed -n '/^_NET_ACTIVE_WINDOW/ s/.* // p'
xdotool getwindowsfocus
Bir konsoldan koşmayı ve fareyi hareket ettirmeyi kontrol edebilirsiniz . Fare tıklayana veya klavyeyi etkileşene kadar (alt + sekme, vb.) Değer aynı olacaktır
xdotool click 1
yorumlaması belirtilen yönteme Bruce Ediger en çok üzerinden uygun görüntüyü döndürür olarak cevap .. sıfır olmayan masaüstü kimliği geçerli ermeyecekse olduğunuimport -window $nonzeroID screen.png
dönmek için piton komut dosyası için bazı basit çimdik .... var mı o masaüstüne için değer ?