के साथ ग्लोबल हॉटकी मेरा लक्ष्य एक प्रोग्राम है जो पृष्ठभूमि में सोता है लेकिन उपयोगकर्ता द्वारा कुछ "हॉटकी" के माध्यम से सक्रिय किया जा सकता है। Xlib मैनुअल और Xlib O'reilly मैनुअल के आसपास खुदाई से, मैं इकट्ठा करता हूं कि इसका सही तरीका XGrabKey के साथ है। हालांकि प्रक्रिया की मेरी समझ गलत है क्योंकि अवधारणा का एक सरल सबूत काम नहीं करता है।एक्स 11/एक्सलिब
मेरे समझ है कि अगर मैं grab_window के रूप में जड़ खिड़की के साथ XGrabKey कहते हैं, और owner_events झूठी है, तो जब भी अपने हॉटकी दबाया जाता है घटना केवल जड़ खिड़की के पास भेजा जाएगा है। यदि मैं रूट विंडो से कीप्रेस घटनाओं का चयन करता हूं, और उसके बाद एक्स घटनाओं को सुनता हूं, तो हॉटकी दबाए जाने पर मुझे एक महत्वपूर्ण प्रेस ईवेंट प्राप्त करना चाहिए। मैंने नीचे एक न्यूनतम उदाहरण चिपकाया है।
मुझे उम्मीद है कि जब प्रोग्राम चलाया जाता है, चाहे खिड़की पर ध्यान केंद्रित न हो, यदि Ctrl + Shift + K दबाया जाता है, तो मेरे प्रोग्राम को "हॉट कुंजी दबाया जाना चाहिए"! कंसोल में, और फिर समाप्त करें।
इसके अलावा, यह मेरी समझ है कि यदि XGrabKey विफल रहता है, तो डिफ़ॉल्ट त्रुटि हैंडलर एक संदेश प्रदर्शित करेगा, और चूंकि यह नहीं लगता कि कॉल सफल हो गया है।
जाहिर है, मेरी समझ किसी भी तरह से त्रुटिपूर्ण है। क्या कोई मुझे सही दिशा दिखा सकता है?
#include <iostream>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
using namespace std;
int main()
{
Display* dpy = XOpenDisplay(0);
Window root = DefaultRootWindow(dpy);
XEvent ev;
unsigned int modifiers = ControlMask | ShiftMask;
int keycode = XKeysymToKeycode(dpy,XK_Y);
Window grab_window = root;
Bool owner_events = False;
int pointer_mode = GrabModeAsync;
int keyboard_mode = GrabModeAsync;
XGrabKey(dpy, keycode, modifiers, grab_window, owner_events, pointer_mode,
keyboard_mode);
XSelectInput(dpy, root, KeyPressMask);
while(true)
{
bool shouldQuit = false;
XNextEvent(dpy, &ev);
switch(ev.type)
{
case KeyPress:
cout << "Hot key pressed!" << endl;
XUngrabKey(dpy,keycode,modifiers,grab_window);
shouldQuit = true;
default:
break;
}
if(shouldQuit)
break;
}
XCloseDisplay(dpy);
return 0;
}
अपने कोड में आप का उपयोग 'XK_Y', आप कर सकते हैं इसके बजाय 'XK_K' कहना चाहते हैं? –