Ubuntu下模拟Ctrl+C实现自定义快捷键复制功能的问题求助
Ubuntu下模拟Ctrl+C实现自定义快捷键复制功能的问题求助
大家好,我现在想在Ubuntu上实现一个模拟复制信号的程序,需求是这样的:
- 注册一个快捷键比如
Ctrl+1 - 当用户在任意窗口选中文本后按下
Ctrl+1,程序能模拟Ctrl+C的系统复制信号,把选中的内容写入剪贴板
简单来说,就是程序运行时,我在屏幕任意窗口选一段文本,按Ctrl+1就能达到和直接按Ctrl+C一样的复制效果,文本自动进剪贴板。
现在程序能成功注册并识别Ctrl+1快捷键,但就是没法实现真正的Ctrl+C复制效果,我的代码如下:
#include <QTextStream> #include <QCoreApplication> #include <X11/Xlib.h> #include <X11/Intrinsic.h> #include <X11/extensions/XTest.h> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); Display* dpy = XOpenDisplay(nullptr); Window root = DefaultRootWindow(dpy); XEvent ev; // Register the shortcut unsigned int modifiers = ControlMask; // ctrl KeyCode keycode = XKeysymToKeycode(dpy, XK_1); // 1 if (XGrabKey(dpy, keycode, modifiers, root, True, GrabModeAsync, GrabModeAsync)) { qDebug() << "Hotkey registered!" << endl; } else { qDebug() << "Failed to register hotkey." << endl; return -1; } while (true) { XNextEvent(dpy, &ev); if (ev.type == KeyPress && ev.xkey.keycode == keycode) { qDebug() << "Hotkey pressed!"; // Simulate ctrl+c to copy Display *display = XOpenDisplay(nullptr); if(display == nullptr) { return -1; } KeyCode ctrlKey = XKeysymToKeycode(display, XK_Control_L); KeyCode cKey = XKeysymToKeycode(display, XK_C); XTestFakeKeyEvent(display, ctrlKey, True, 0); XTestFakeKeyEvent(display, cKey, True, 0); XTestFakeKeyEvent(display, cKey, False, 0); XTestFakeKeyEvent(display, ctrlKey, False, 0); qDebug() << "send ctrl+c"; XFlush(display); XCloseDisplay(display); } } return a.exec(); }
有没有大佬能给我一些建议呀?
(补充:之所以不直接用Ctrl+C是因为后续还有其他处理流程~~)
备注:内容来源于stack exchange,提问作者gazile
相关产品推荐
相关产品推荐

