Yanıtlar:
xdotooliş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, wmctrlveya eski sürümleri xdotoolgö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 QueryPointermesaja 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 0ve çağırmak xwininfo -rootbu
root_id.valueeğ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))
xwininfoKomut çı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 clickyakalamadan ö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 getactivewindowve 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 getwindowsfocusaynı 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}
sedBunu 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 xdotoolbenim Debian minimal X11 eksik olduğunu unutmayın xprop(aynı şekilde sedtabii ki).
Çatallamak istemiyorsanız sedveya grepmetin 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 getwindowsfocusBir 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 1yorumlaması 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.pngdönmek için piton komut dosyası için bazı basit çimdik .... var mı o masaüstüne için değer ?