উত্তর:
xdotool
পয়েন্টার অবস্থান ( xdotool getmouselocation
) এবং সাম্প্রতিক সংস্করণগুলি (2.20110530.1 থেকে) উন্মুক্ত করে যা সেই স্থানে কোন উইন্ডোটি রয়েছে তা নির্দেশ করে । কোনটিই xwininfo
, wmctrl
অথবা পুরোনো সংস্করণগুলি xdotool
প্রদর্শিত একটি উপায় একটি পর্দা অবস্থান যেখানে এটি দৃশ্যমান দ্বারা একটি উইন্ডো মেলে আছে।
অন্তর্নিহিত এক্স লাইব্রেরি কলটি XQueryPointer
(কোনও QueryPointer
বার্তার সাথে সম্পর্কিত)। এই কলটির চারপাশে এখানে একটি সাধারণ পাইথন র্যাপার স্ক্রিপ্ট রয়েছে (ব্যবহার করে ctypes
)। চেক করার সময় ত্রুটি মূলত বাদ পড়েছে। ধরে নিন আপনি পর্দা 0 ব্যবহার করছেন (যদি আপনি না জানতেন যে ডিসপ্লেতে একাধিক স্ক্রিন থাকতে পারে তবে এটিকে এড়িয়ে যান)।
#! /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
ব্যবহারের উদাহরণ:
xwininfo -tree -id $(XQueryPointer)
$(XQueryPointer)
জন্য 0
, এবং xwininfo -root
এই শর্তটি আহ্বান করা এই
root_id.value
যদি ছাপার চেষ্টা করুন 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
কমান্ড আউটপুট এই ধরনের দেয়, কিন্তু আপনি উইন্ডো আপনি উপর তথ্য চান তার উপর ক্লিক করতে হবে না:
% xwininfo
xwininfo: Please select the window about which you
would like information by clicking the
mouse in that window.
xwininfo: Window id: 0xa0000d "flask"
...
তাই করা: xwininfo | grep 'Window id:'
আপনাকে আইডিটি বিশ্লেষণ করতে এমন কিছু দিতে পারে।
xwinfo |grep window id:' &
এবং এটিকে অনুসরণ করে অ-ইন্টারেক্টিভ করা যেতে পারে xdotool click 1
... তবে এটি মাউসটি আঁকড়ে ধরার click
আগেই অগ্রভাগের মৃত্যুর ঝুঁকি চালায় xdotool
। আমি রাথিন নামমাত্র `ঘুম এন ব্যবহার করতাম না, সুতরাং যদিও এই উত্তরটি অন ট্র্যাক, আমি আরও কিছু ইনলাইন রূপান্তরিত হয়েছে কিনা তা দেখার জন্য আমি একটি উইলইলে অপেক্ষা করব ...
এটি ব্যবহার করে দেখুন, এটি কেবল এক্সডটুল ব্যবহার করে তবে এর সংস্করণটি কমপক্ষে "2.20110530.1"
xdotool getmouselocation --shell | grep WINDOW
উইন্ডো আইডি সরাসরি পেতে আপনি এটি ব্যবহার করতে পারেন:
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 getactivewindow
এবং আপনি ফলাফলটি দেখতে পাবেন (int) উইন্ডোটি কোনও মনিটরের উপরে থাকতে পারে। X11 পয়েন্টারটি যেখানে ক্লিকের জন্য অপেক্ষা করছে সেখানে কেবল পড়ুন :) এবং এটি কোনও দূরবর্তী উইন্ডো, কোনও ভিএনসিএসভার বা কিউব ডেস্কটপ এনভায়রনমেন্টের 3 য় ডেস্কটপ হোক if শুধু কাজ করে।
আপনি আরও ভাল পরীক্ষার জন্য ঘুম ব্যবহার করে এটি খেলতে পারেন sleep 3; xdotool click 1+2; xdotool getactivewindow
।
আমি দেখতে পেয়েছি যে getwindowsfocus
তুলনায় একই মান প্রদান getactivewindow
।
আপনি যদি ক্লিকগুলি ম্যানুয়ালি করেন তবে আপনি প্রাসঙ্গিক মেনুটি দেখতে পাবেন তবে 1 + 2 ক্লিক করে বর্তমান মাউসের অবস্থানে ক্লিক করে এবং পছন্দসই আইডি পেয়ে উভয় ক্লিক ফায়ার করতে পারেন।
চেষ্টা করে দেখুন :)
আপনার যদি পাইথন-এক্স্লিবের অ্যাক্সেস থাকে তবে এখানে গিলসের জবাবের তুলনায় একটি সংক্ষিপ্ত এবং আরও অজগর রয়েছে:
from Xlib.display import Display
display = Display()
window = display.screen().root
result = window.query_pointer()
print(result.child.id)
আর্কউইকির এটির একটি ভাল উত্তর রয়েছে:
activeWinLine=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)")
activeWinId=${activeWinLine:40}
sed
আপনি ব্যবহার করে এটি একক লাইনে এটি করতে পারেন, এটি সম্ভবত এটি সবচেয়ে পাঠযোগ্য উপায়:
activeWin="$(xprop -root | sed -n 's/^_NET_ACTIVE_WINDOW(WINDOW): window id # //p')"
নোটটি xdotool
আমার ডেবিয়ান মিনিমাম এক্স 11 এ অনুপস্থিত ছিল যখন xprop
অন্তর্ভুক্ত ছিল (একইভাবে sed
অবশ্যই)।
আপনি যদি কাঁটাচামচা করতে না চান sed
বা grep
আপনি এটি সম্পূর্ণরূপে পাঠ্য রূপান্তর করতে না পারেন bash
যা কিছুটা xprop
পরিবর্তনের আউটপুট কিছুটা হলেও সম্ভবত আরও কিছুটা নিরাপদ :
activeWin="$(xprop -root)"
activeWin="${activeWin#*_NET_ACTIVE_WINDOW(WINDOW):}'
activeWin="${activeWin%%?_NET_*}'
activeWin="${activeWin##* }'
যাইহোক, এত সহজ কাজ সংরক্ষণাগারভুক্ত করার এখনও একটি অদ্ভুত উপায়।
xprop -root 2>/dev/null | sed -n '/^_NET_ACTIVE_WINDOW/ s/.* // p'
xdotool getwindowsfocus
চারপাশে কনসোল এবং চলমান মাউস থেকে চলমান পরীক্ষা করতে পারেন । আপনি মাউস ক্লিক না করা বা কীবোর্ড (Alt + ট্যাব ইত্যাদি) ব্যবহার না করা অবধি মান সমান হবে
xdotool click 1
পদ্ধতিতে মন্তব্যে উল্লেখ ব্রুস Ediger এর উত্তর .. নন-জিরো ডেস্কটপ আইডি বৈধ এই পর্যন্ত যে এটা মাধ্যমে উপযুক্ত ইমেজ ফেরৎimport -window $nonzeroID screen.png
.... আছে কি পাইথন স্ক্রিপ্টের জন্য কিছু সহজ খামচি ফিরে যাওয়ার যে ডেস্কটপের জন্য মান ?