我有一个用C ++编写的Windows服务,需要访问剪贴板并从中读取数据/粘贴数据。我只考虑文本数据。
从MSDN的文档中,我可以使用OpenClipboard
,EmptyClipboard
和SetClipboardData
来实现我想要的目标。
我必须将NULL
传递给OpenClipboard
,因为我没有任何UI,因此没有窗口句柄。但是,这意味着 -
如果应用程序在hwnd设置为NULL的情况下调用OpenClipboard,则EmptyClipboard会将剪贴板所有者设置为NULL;这会导致SetClipboardData失败。
这意味着我无法在剪贴板上设置数据。
解决这个问题的正确方法是什么?是否可以不使用任何窗户?
答案 0 :(得分:2)
您肯定可以从非GUI应用程序访问剪贴板。 Windows甚至还包括一个命令行应用程序(clip.exe)来执行此操作 但是,在你花太多时间在这之前...... 剪贴板不在同一系统上的用户之间共享。假设您有两个用户登录。您无法从一个会话复制数据,切换用户(从锁定屏幕)并粘贴相同的数据。 因此,假设您的服务将像另一个用户会话一样行动,您的应用程序将只能看到之前在该服务的同一实例中复制的数据。