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

方法一:X11 (Linux)
C语言:
立即学习“go语言免费学习笔记(深入)”;
以下C代码片段演示了如何使用X11库获取PRIMARY selection(通常是鼠标选中文本):
#include#include #include 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; }
Go语言:
【极品模板】出品的一款功能强大、安全性高、调用简单、扩展灵活的响应式多语言企业网站管理系统。 产品主要功能如下: 01、支持多语言扩展(独立内容表,可一键复制中文版数据) 02、支持一键修改后台路径; 03、杜绝常见弱口令,内置多种参数过滤、有效防范常见XSS; 04、支持文件分片上传功能,实现大文件轻松上传; 05、支持一键获取微信公众号文章(保存文章的图片到本地服务器); 06、支持一键
Go语言可以使用github.com/BurntSushi/xgb库(或其他X11绑定库)来实现类似的功能。 由于库的差异,代码结构会略有不同,但基本步骤保持一致:打开显示器,选择PRIMARY selection,转换到UTF8_STRING,获取数据,并释放资源。 需要自行安装该库: go get github.com/BurntSushi/xgb
方法二:跨平台方法 (推荐)
为了实现跨平台兼容性,建议使用操作系统提供的剪贴板API。这需要针对不同的操作系统编写不同的代码。 例如:
-
Windows: 使用
OpenClipboard,GetClipboardData,CloseClipboard等API函数。 -
macOS: 使用
NSPasteboard类。 -
Linux (更通用): 可以使用
xclip或xsel等命令行工具,通过Go语言的os/exec包调用。
这种方法虽然需要更多代码,但能够保证在不同操作系统上都能正常工作。 这是一种更健壮和可维护的方案。
总结:
直接从任何窗口获取选中文本是一个复杂的问题,需要深入了解操作系统和窗口管理器的底层机制。 本文提供的X11示例仅适用于X11系统。 为了创建真正跨平台的应用程序,建议使用操作系统提供的剪贴板API,以确保代码的可移植性和稳定性。 请根据你的目标操作系统选择合适的方法,并参考相应操作系统的API文档。









