在锁定的 Windows 10 机器上的后台进程中将文本放入剪贴板

Posted

技术标签:

【中文标题】在锁定的 Windows 10 机器上的后台进程中将文本放入剪贴板【英文标题】:Put text to clipboard in the background process on locked Windows 10 machine 【发布时间】:2019-11-27 10:38:36 【问题描述】:

我正在构建一个进程(到目前为止,我已经在 .Net Framework 4.7.2 上尝试过 VBA、Python 和 C#),它需要将一些字符串放在锁定屏幕后面的 Windows 10 机器上的剪贴板上。 为了进行测试,我将其减少到只有两个命令(伪代码,因为使用了 3 种语言。问题末尾的详细信息):

SleepForFiveSec(); //to provide time for locking screen
// now locking machine
SetClipboardContent();

剪贴板对解锁会话有响应,但在机器锁定时变得不可用并返回“剪贴板锁定”错误(特定于语言)。

我已经在 google/*** 中针对提到的语言测试了几种与剪贴板相关的技术(总共大约 6 种),但到目前为止都没有。

机器在 Windows 10 Enterprise 上运行(在 3 台具有相同版本的不同机器上测试)。

代码示例:

C# 选项 1:

using System.Windows.Forms;
.....
[STAThread]
static void Main()

    System.Threading.Thread.Sleep(5000);
    Clipboard.SetText("test copy clip");


C# opt 2(检查什么是锁定剪贴板):

    [System.Runtime.InteropServices.DllImport("user32.dll")]
    static extern IntPtr GetOpenClipboardWindow();

    [System.Runtime.InteropServices.DllImport("user32.dll")]
    static extern int GetWindowText(int hwnd, StringBuilder text, int count);

    private static string getOpenClipboardWindowText()
    
        IntPtr hwnd = GetOpenClipboardWindow();
        StringBuilder sb = new StringBuilder(501);
        GetWindowText(hwnd.ToInt32(), sb, 500);
        return sb.ToString();
    

python opt.1:

import pyperclip
import time

time.sleep(5)
pyperclip.copy('text')

python opt.2:

import win32clipboard
import time

time.sleep(5)
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText('text')
win32clipboard.CloseClipboard()

VBA 选项 1:

Dim clipboard As MSForms.DataObject    
Set clipboard = New MSForms.DataObject   
clipboard.SetText "text for input"
clipboard.PutInClipboard

VBA 选项 2: Text To Clipboard in VBA Windows 10 Issue

【问题讨论】:

这可能是XY problem 的情况。你能提供更多关于你想要做什么的信息吗? @mjwills 我真正的问题是为应用程序编写一个脚本,它只支持在某个阶段从剪贴板输入才能正常工作。有一种解决方法,但比从剪贴板读取数据要麻烦得多(它不是“粘贴”,而是一些内部应用程序命令,直接使用剪贴板内容)。 剪贴板是供用户决定复制到它的,而不是后台进程。 @nilsK 它在 Windows 7 上正常工作,我没有找到任何有关 Win 10 在此特定场景下更改剪贴板行为的详细信息。所以我假设进程可以用相同的逻辑迁移到Win10 @laooglee 这就是导致大量旧 *** 登录软件使用 Java 浏览器小程序的心态。安全性不断发展,有时保持旧东西正常工作的唯一方法是使用虚拟机......或者用新的更安全的东西替换问题的实际核心。 【参考方案1】:

为此,您的后台进程应该在用户帐户中运行,并且应该在用户登录期间启动。

【讨论】:

您的建议在一般情况下过于严格;当然对于我的情况。我们的 C# 程序仅使用 Excel 启动,我们不想在每次用户登录时启动 Excel。除此之外,从您的回答中不清楚如何在代码中实际实现您的建议。您能否举一个最小的工作示例,例如在 C# 中?

以上是关于在锁定的 Windows 10 机器上的后台进程中将文本放入剪贴板的主要内容,如果未能解决你的问题,请参考以下文章

在多线程应用程序表单上使用while循环锁定c#阻塞单核机器上的所有线程

如何在 XXX 毫秒内阻止 Linux 机器上的所有其他进程?

在Windows XP上系统锁定/解锁时触发事件

Linux终端关闭后台进程也结束原因分析和nohup的使用

使用 C#,如何确定是哪个进程锁定了文件?

即使应用程序在后台运行或手机被锁定在 Windows Phone 中,如何让计时器运行