本文探讨如何在C语言和Go语言中获取系统剪贴板中的选中文本,实现跨平台的Google翻译小工具。 需要注意的是,直接从任何窗口获取选中文本需要系统权限,并且方法依赖于操作系统。以下代码示例仅在X11系统(例如Linux)下有效。 Windows和macOS需要不同的API调用。

方法一:X11 (Linux)
C语言:
立即学习“go语言免费学习笔记(深入)”;
以下C代码片段演示了如何使用X11库获取PRIMARY selection(通常是鼠标选中文本):
<code class="c">#include <X11/Xlib.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
Display *display = XOpenDisplay(NULL);
if (display == NULL) {
fprintf(stderr, "无法打开显示器\n");
return 1;
}
Atom selection = XInternAtom(display, "PRIMARY", False);
Atom target = XInternAtom(display, "UTF8_STRING", False); // 或其他合适的文本类型
XEvent event;
XSelectionRequestEvent request;
XConvertSelection(display, selection, target, selection, DefaultRootWindow(display), CurrentTime);
while (1) {
XNextEvent(display, &event);
if (event.type == SelectionNotify) {
if (event.xselection.selection == selection && event.xselection.property != None) {
unsigned char *data;
int actual_format;
unsigned long nitems, bytes_after;
XGetWindowProperty(display, DefaultRootWindow(display), event.xselection.property, 0, 1024, False, AnyPropertyType, &actual_format, &nitems, &bytes_after, &event.xselection.property, &data);
if (data != NULL) {
printf("选中文本为: %s\n", (char*)data);
XFree(data);
}
break;
}
}
}
XCloseDisplay(display);
return 0;
}</code>Go语言:
Go语言可以使用github.com/BurntSushi/xgb库(或其他X11绑定库)来实现类似的功能。 由于库的差异,代码结构会略有不同,但基本步骤保持一致:打开显示器,选择PRIMARY selection,转换到UTF8_STRING,获取数据,并释放资源。 需要自行安装该库: go get github.com/BurntSushi/xgb
方法二:跨平台方法 (推荐)
为了实现跨平台兼容性,建议使用操作系统提供的剪贴板API。这需要针对不同的操作系统编写不同的代码。 例如:
OpenClipboard, GetClipboardData, CloseClipboard 等API函数。NSPasteboard类。xclip或xsel等命令行工具,通过Go语言的os/exec包调用。这种方法虽然需要更多代码,但能够保证在不同操作系统上都能正常工作。 这是一种更健壮和可维护的方案。
总结:
直接从任何窗口获取选中文本是一个复杂的问题,需要深入了解操作系统和窗口管理器的底层机制。 本文提供的X11示例仅适用于X11系统。 为了创建真正跨平台的应用程序,建议使用操作系统提供的剪贴板API,以确保代码的可移植性和稳定性。 请根据你的目标操作系统选择合适的方法,并参考相应操作系统的API文档。
以上就是C语言或Go语言如何获取系统剪贴板中的选中文本?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号