我有一个用 C++ 编写的 Windows 服务,它需要访问剪贴板并从中读取数据/将数据粘贴到其中。我只考虑文本数据。
来自 MSDN的文档,我可以使用 OpenClipboard
、EmptyClipboard
和 SetClipboardData
来实现我想要的。
我必须将 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/