编写多个自定义剪贴板,使用Windows剪贴板 - 几个复杂问题

4
我正在尝试构建一个C#后台应用程序,它可以钩取键盘按键(例如CAPS +(A / B / C / ....)),并将其作为拷贝到不同剪贴板的操作。
首先,我查找了一个Windows方法,它会像CTRL + V一样:直接粘贴完整字符串。我还尝试使用SendInputs来“粘贴”,但这个想法是错误的,因为执行时间太长。由于我没有找到任何好的方法,所以我决定使用Windows剪贴板。
场景是(当我按下CAPS + A时):
- 缓存剪贴板内容以便稍后检索 - 模拟CTRL + C - 获取剪贴板内容,并将其设置为与“ A”键对应的变量 - 将剪贴板设置为默认缓存值。
当我在记事本上时,这很有效。但是,当在另一个应用程序上执行CTRL + C时(5秒钟),我会收到异常CLIPBRD_E_CANT_OPEN,我的应用程序无法访问剪贴板。
我的问题: - 有没有一种方法向Windows发送信号,使其“粘贴”某些给定文本,就像使用Windows剪贴板一样,而不使用Windows剪贴板? - 是否有一种方法强制剪贴板在5秒内返回到我的应用程序? - 我是否遗漏了更智能的方案?
谢谢!

模拟按键是完全错误的方法。这是一个非常庞大的任务,而且听起来你还没有准备好承担这个任务。你可能想要查看一个现有的开源(甚至商业)软件包,而不是用C#编写自己的软件包。我自己从未尝试过,但Ditto看起来像是一个你可以查看的剪贴板管理器。 - Cody Gray
1个回答

0

在拦截所有键之前,请查看以下内容:

[DllImport("user32.dll")]
public static extern int GetAsyncKeyState(long vKey);

VK_CONTROL = 0x11
VK_SHIFT = 0x10
C键 = 0x43

如果按下了某个键,则该函数返回一个大于0的整数值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接