模拟ctrl键向下事件和ctrl键向上事件后,Ctrl键保持按下状态

我有一个小程序,使用系统keybd_event模拟ctr + cctr + v (复制和粘贴)事件。 问题是程序运行后,计算机继续按下ctrl键,然后 – 如果我键入它选择整个文档,如果我滚动鼠标滚轮它会改变文本方面,等等。不仅在Visual Studio编辑器中,而且在程序以Word等运行时打开的任何其他程序。这是我的代码:

  //The system keyboard event. [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)] static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); public const int KEYEVENTF_EXTENDEDKEY = 0x0001; //Key down flag public const int KEYEVENTF_KEYUP = 0x0002; //Key up flag public const int VK_LCONTROL = 0xA2; //Left Control key code public const int C = 0x43; // C key code public const int V = 0x56; // V key code static void Main(string[] args) { Thread.Sleep(1000);// So I have time to select something. //Simulate ctrl+c keybd_event(VK_LCONTROL, 0, KEYEVENTF_EXTENDEDKEY, 0); keybd_event(C, 0, KEYEVENTF_EXTENDEDKEY, 0); keybd_event(C, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0); //Simulate ctrl+v keybd_event(VK_LCONTROL, 0, KEYEVENTF_EXTENDEDKEY, 0); keybd_event(V, 0, KEYEVENTF_EXTENDEDKEY, 0); keybd_event(V, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0); } 

有人知道我能做些什么来解决这个问题吗?

这是解决方案,这完全适合我。 注意参数的变化发送到keybd_event。 我使用了CodeProject的一篇文章,链接: http : //www.codeproject.com/Articles/7305/Keyboard-Events-Simulation-using-keybd-event-funct 。 这是我修复过的代码:

  //The system keyboard event. [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)] static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); public const int KEYEVENTF_KEYUP = 0x0002; //Key up flag public const int VK_CONTROL = 0x11; //Control key code public const int C = 0x43; // C key code public const int V = 0x56; // V key code static void Main(string[] args) { Thread.Sleep(1000);// So I have time to select something. // Simulating Ctrl+C keybd_event(VK_CONTROL, 0x9d, 0, 0); // Ctrl Press keybd_event(C, 0x9e, 0, 0); // 'A' Press keybd_event(C, 0x9e, KEYEVENTF_KEYUP, 0); // 'A' Release keybd_event(VK_CONTROL, 0x9d, KEYEVENTF_KEYUP, 0); // Ctrl Release // Simulating Ctrl+V keybd_event(VK_CONTROL, 0x9d, 0, 0); // Ctrl Press keybd_event(V, 0x9e, 0, 0); // 'A' Press keybd_event(V, 0x9e, KEYEVENTF_KEYUP, 0); // 'A' Release keybd_event(VK_CONTROL, 0x9d, KEYEVENTF_KEYUP, 0); // Ctrl Release } 

我希望这会对某人有所帮助。 感谢所有帮助过我的人!