我正在构建一个进程(到目前为止,我已在 .Net Framework 4.7.2 上尝试过 VBA、Python 和 C#),该进程需要将一些字符串放入 Windows 10 计算机锁定屏幕后面的剪贴板上。
为了测试,我将其减少到只有两个命令(伪代码,因为使用了 3 种语言。详细信息在问题末尾):
SleepForFiveSec(); //to provide time for locking screen
// now locking machine
SetClipboardContent();
剪贴板对解锁会话有响应,但在计算机锁定时变得不可用并返回“剪贴板锁定”错误(特定于语言)。
我已经测试了在 google/stackoverflow 中找到的几种与剪贴板相关的技术,用于提到的语言(总共大约 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();
}
蟒蛇选项1:
import pyperclip
import time
time.sleep(5)
pyperclip.copy('text')
蟒蛇选项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:VBA Windows 10 问题中的文本到剪贴板