c# - 编程多个自定义剪贴板,使用 Windows 剪贴板 - 很少有并发症

标签 c# windows keyboard clipboard user32

我正在尝试构建一个 C# 后台应用程序,该应用程序将 Hook 键盘击键(例如 CAPS + (A/B/C/....))以充当许多不同剪贴板的副本。

首先,我寻找了一个类似于 CTRL+V 的 Windows 方法:直接粘贴完整的字符串。我也试过 SendInputs 来“粘贴”,错误的想法是执行时间太长。由于没有找到任何商品,我决定使用 Windows 剪贴板。

场景是(当我做 CAPS+A 时)

  • 缓存剪贴板的内容以便稍后检索
  • 模拟 CTRL+C
  • 获取剪贴板的内容并将其设置为对应于'A'键的变量
  • 将剪贴板设置为默认缓存值。

这在我使用记事本时效果很好。但是当在另一个应用程序上执行 CTRL+C 时,我在第 3 步得到异常 CLIPBRD_E_CANT_OPEN(整整 5 秒,我的应用程序无法访问剪贴板)

我的问题: - 有没有一种方法可以向 Windows 发送一个信号,让它“粘贴”一些给定的文本,就像 CTRL+V 一样,而不使用 Windows 剪贴板? - 有没有办法强制剪贴板在 5 秒内返回到我的应用程序? - 我错过了更智能的场景吗?

谢谢!

最佳答案

先看看这个拦截Keys:

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

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

如果按下某个键,该函数返回一个整数值>0。

关于c# - 编程多个自定义剪贴板,使用 Windows 剪贴板 - 很少有并发症,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24980649/

相关文章:

android 键盘对 UI 的影响

android - 如何在按下下一行键时添加特殊字符?

c# - foreach 中的 Linq 优化

c# - .NET Xml 序列化程序可选属性

c - 什么是MinGW的简单解释

windows - 如何使两个批处理文件变量回显成一行?

c++ - 知道 .lib 是静态的还是导入的

state-pattern - 状态模式可以帮助处理只读状态吗?

c# - DropDownList 中的最大值 - ASP.NET

delphi - 我可以在 Delphi IDE 中禁用 Insert 键吗?