Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当您已经按下另一个键时,C以编程方式发送两个键_C# - Fatal编程技术网

C# 当您已经按下另一个键时,C以编程方式发送两个键

C# 当您已经按下另一个键时,C以编程方式发送两个键,c#,C#,我正在制作自己的多剪贴板复制/粘贴工具,它在后台运行,我终于实现了,它正在工作 这就是它的工作原理 当Capslock被按下时,如果我按下CTRL+1,我会用SendKeys以编程方式创建一个CTRL+C,并将剪贴板保存在我的列表中的正确位置 当capslock未按下时,如果我按下CTRL+1,我将使用剪贴板中正确列表位置上的最新数据,使用send键以编程方式创建CTRL+V。 现在可以了,但我想做点改变,我不想使用capslock,但我想按另一个键,比如ALT或SHIFT,但是如果你一直按一个

我正在制作自己的多剪贴板复制/粘贴工具,它在后台运行,我终于实现了,它正在工作

这就是它的工作原理

当Capslock被按下时,如果我按下CTRL+1,我会用SendKeys以编程方式创建一个CTRL+C,并将剪贴板保存在我的列表中的正确位置 当capslock未按下时,如果我按下CTRL+1,我将使用剪贴板中正确列表位置上的最新数据,使用send键以编程方式创建CTRL+V。 现在可以了,但我想做点改变,我不想使用capslock,但我想按另一个键,比如ALT或SHIFT,但是如果你一直按一个不是CTRL的键,然后按CTRL+C,它就不起作用了

有人对这件蠢事有什么建议吗


谢谢guy

您可以为选择键使用标志。当您查看按下了哪些键时:

类似于以下伪代码的代码应该可以做到这一点:

if(select key)
{
  this.selectKey = true;
}
else
{
  if(ctrl key)
    {
        //do whatever you would normally do here
    }
   this.selectKey = false;
}

如果您不介意使用WinApi函数,可以使用RegisterHotKey和UnregisterHotKey函数。 它们允许您注册和取消注册您选择的全局快捷方式。这样,即使您的应用程序在后台运行,并且不关注自身,也会收到有关按下快捷方式的通知

您可以在pinvoke和上找到有关这两个函数的更多信息。甚至还有一些示例应用程序代码,您可以看到如何使用它们


注意:请记住注销在应用程序退出时注册的所有快捷键。

我尝试过CTRL+SHIFT+C,效果很好……注意:使用SendKeys模拟CTRL+C和CTRL+V不是与剪贴板交互的正确方式,在许多情况下会导致不良行为,例如。,这些快捷方式未绑定到复制和粘贴的情况。与剪贴板交互的正确方法是使用适当的API调用。我同意Brian的观点,你不应该假设CTRL+C和CTRL+V复制/粘贴,但是你应该假设windows函数工作正常。好主意,顺便说一句,这实际上似乎有点有用:我用了一个钩子管理器来捕获鼠标和键盘的外部点击,现在效果非常好。好的,现在我用的是SendInput win api。。它确实更好,但它并不能解决我的问题:不使用键就无法调用COPY win api吗?对不起,这是用来捕捉快捷方式,而不是发送快捷方式的,我是对的?是的,你是对的。我认为,如果您以这种方式捕获快捷方式,那么发送Ctrl+v就不会有问题。我刚刚测试了Ctrl+Shift +W键组合,在处理代码时使用了sEndAsvs^ V,它工作正常。要考虑的是,一个活动的应用程序没有定义一些键本身的行为,即按下Alt菜单可以弹出,这会将焦点从textbox上移开,使其无法完成粘贴操作,这看起来好像不起作用。在复制文本的情况下也可以类似。