c++ - Windows - 从 C++ 服务访问剪贴板

标签 c++ windows windows-services clipboard

我有一个用 C++ 编写的 Windows 服务,它需要访问剪贴板并从中读取数据/将数据粘贴到其中。我只考虑文本数据。

来自 MSDN的文档,我可以使用 OpenClipboardEmptyClipboardSetClipboardData 来实现我想要的。

我必须将 NULL 传递给 OpenClipboard,因为我没有任何 UI,因此没有窗口句柄。然而,这意味着——

If an application calls OpenClipboard with hwnd set to NULL, EmptyClipboard sets the clipboard owner to NULL; this causes SetClipboardData to fail.

这意味着我无法在剪贴板上设置数据。

解决这个问题的正确方法是什么?不使用任何窗口是否可能?

最佳答案

您绝对可以从非 GUI 应用程序访问剪贴板。 Windows 甚至包含一个命令行应用程序 (clip.exe) 来执行此操作。
然而,在你花太多时间在这上面之前…… 剪贴板不在同一系统上的用户之间共享。假设您有两个用户登录。您不能从一个 session 复制数据、切换用户(从锁定屏幕)并粘贴相同的数据。 因此,您的服务可能会像另一个用户 session 一样运行,并且您的应用程序只能看到先前在同一服务实例中复制的数据。

关于c++ - Windows - 从 C++ 服务访问剪贴板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28718299/

相关文章:

c++ - 给定两个间隔列表,得到重叠间隔的数量

c - 检测 ETW 何时丢弃事件

python - 所有 python windows 服务都无法启动{error 1053}

c++ - 项目范围的附加库路径——MSVS2008

python - 使用 SWIG 为 Python 包装 C++。 'vector' 未声明

c++ - 使用静态 qmake 使用 QT Widget 插件

windows - 我可以将 IFileOperation 与虚拟文件 (IStream) 一起使用吗?

c# - SpecialFolder.MyDocuments 在控制台应用程序中提供正确的值,但在 Windows 服务中不提供

c# - Windows 服务 : The underlying provider failed on Open 上的间歇性错误

c++ - 从 IAudioClient::GetMixFormat 解释 WAVEFORMATEXTENSIBLE