2012-01-07 9 views
7

सभी,हम Xlib/C के साथ माउस क्लिक को अनुकरण कैसे करते हैं?

मुझे विश्वास नहीं है कि यह प्रश्न उत्तर देने के लिए कठिन है। मैं पिछले दो घंटों से गुगल रहा हूं और काम करने वाली कुछ भी नहीं ढूंढ सकता। मैं बस एक बाएं माउस बटन क्लिक 'प्रवेश' करने के लिए सी/एक्सओआर कोड खोजना चाहता हूं। मैं कोड की एक पंक्ति की अपेक्षा करता हूं लेकिन सी में लिखी गई एकमात्र चीजें लगभग दो दर्जन लाइनें लंबी हैं और वे वैसे भी काम नहीं करते हैं :(ऐसा लगता है कि यह विंडोज़ में किया जा सकता है, लेकिन मैं लिनक्स में हूं

सवाल का कारण यह है कि मैंने एक उपयोगिता लिखी है जो मुझे कीबोर्ड का उपयोग करके कई माउस के बीच अपने माउस पॉइंटर को स्थानांतरित करने देती है। केवल समस्या यह है कि यदि मैं उस स्थान पर जाता हूं जहां विंडो एबीसी होता था लेकिन एक और विंडो xyz उसी स्थान के शीर्ष पर लोड हो गया है, माउस पॉइंटर बस ठीक से xyz पर चलता है, लेकिन xyz पर ध्यान केंद्रित नहीं होता है - जब तक कि मैंने माउस पर क्लिक नहीं किया। इसलिए, मैं अपने 'क्लिक' को बनाना चाहता हूं कोड

जिस कोड को मैंने कोशिश नहीं की वह काम XSendEvent() पर आधारित था।

+0

+1 ** कारण ** सहित आप इसे करना चाहते हैं। –

+0

यदि आप माउस के लिए नहीं पहुंचना चाहते हैं तो आपको इस तरह की चीजों का समर्थन करने वाले विंडो प्रबंधक का उपयोग करने पर विचार करना चाहिए। मैं xmonad की सिफारिश कर सकते हैं, लेकिन कुछ भी हैं। –

उत्तर

2

क्यों नकली क्लिक ईवेंट बनाने की कोशिश करने के बजाय विंडो को सीधे उठाएं/ध्यान केंद्रित न करें? यह बहुत अधिक विश्वसनीय और सभी खिड़की प्रबंधकों के साथ काम करना चाहिए, यहां तक ​​कि गैर-क्लिक-टू-फोकस वाले भी।

+0

आर: स्क्रीन के बीच स्थानांतरित करने में सक्षम होने के लिए व्यायाम का पूरा बिंदु w.o. माउस को छूने के लिए, इसलिए यदि मैं केबी के माध्यम से पॉइंटर को स्थानांतरित कर सकता हूं, लेकिन माउस को बाईं ओर क्लिक करने के लिए पहुंचना है, तो पूरी चीज थोड़ा व्यर्थ हो जाती है। बेशक एक ही स्क्रीन पर खिड़कियों के बीच चलते समय कोई समस्या नहीं है, लेकिन एक स्क्रीन से दूसरे स्क्रीन पर जाने की कोशिश करते समय, शॉर्टकट में कोई भी निर्मित नहीं है जिसे मैं पा सकता हूं। –

+0

माउस पॉइंटर को आप ले जा रहे हैं, लेकिन फिर क्लिक करने के बजाय raise/फोकस भेजें। –

+0

अच्छा विचार! ऐसा लगता है कि Alt + Esc यह करता है। अब मुझे यह जानने की जरूरत है कि इसे कैसे भेजा जाए। –

2

हां, मुझे समझने के लिए कम या ज्यादा आ गया है। वैसे भी यह लगता है इस तरह से है:

{ 
#include <X11/extensions/XTest.h> 
XTestFakeButtonEvent(display, 1, True, CurrentTime); 
XTestFakeButtonEvent(display, 1, False, CurrentTime); 
XFlush(display); 
} 

... और Makefile में LDFLAGS लाइन के लिए "-lXtst" जोड़ें।

एक्सलिब इतना खूनी मुश्किल प्रतीत होता है। मुझे अन्य पुस्तकालयों का उपयोग करने की सलाह मिली है, मेरी इच्छा है कि मुझे पता चले कि कैसे बदलना है।

धन्यवाद आर

2

xdotool ऐसा करने का आसान तरीका है। यह एक कमांड लाइन उपकरण है। आप इसे सरल स्क्रिप्ट में उपयोग कर सकते हैं। उदाहरण के लिए:

#!/bin/sh 
xdotool mousemove x y 
xdotool click 1 
+0

धन्यवाद, यह एक दिलचस्प कार्यक्रम है, यह मेरे 'movemouse' से बेहतर दिखता है, क्योंकि मेरा रॉक-डाउन सरल माउस चलने के लिए शायद बेहतर है। –

संबंधित मुद्दे