You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 10:00:27