Kat*_*ivi 6 c# ctrl keyboard-events
我有一个小程序,使用该系统模拟ctr+ c&ctr+ v(复制和粘贴)事件keybd_event.问题是程序运行后,计算机继续ctrl按下键,然后 - 如果我键入a它选择整个文档,如果我滚动鼠标滚轮它会改变文本方面等.它不仅发生在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);
}
Run Code Online (Sandbox Code Playgroud)
有人知道我能做些什么来解决这个问题吗?
这是解决方案,这对我来说完全有效。注意发送到 keybd_event 的参数的变化。我使用了CodeProject的一篇文章,链接:http://www.codeproject.com/Articles/7305/Keyboard-Events-Simulation-using-keybd-event-funct。这是我修复后的代码:
\n\n //The system keyboard event.\n [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]\n static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);\n public const int KEYEVENTF_KEYUP = 0x0002; //Key up flag\n public const int VK_CONTROL = 0x11; //Control key code\n public const int C = 0x43; // C key code\n public const int V = 0x56; // V key code\n\n static void Main(string[] args)\n {\n Thread.Sleep(1000);// So I have time to select something.\n\n // Simulating Ctrl+C\n keybd_event(VK_CONTROL, 0x9d, 0, 0); // Ctrl Press\n keybd_event(C, 0x9e, 0, 0); // \xe2\x80\x98A\xe2\x80\x99 Press\n keybd_event(C, 0x9e, KEYEVENTF_KEYUP, 0); // \xe2\x80\x98A\xe2\x80\x99 Release\n keybd_event(VK_CONTROL, 0x9d, KEYEVENTF_KEYUP, 0); // Ctrl Release\n\n // Simulating Ctrl+V\n keybd_event(VK_CONTROL, 0x9d, 0, 0); // Ctrl Press\n keybd_event(V, 0x9e, 0, 0); // \xe2\x80\x98A\xe2\x80\x99 Press\n keybd_event(V, 0x9e, KEYEVENTF_KEYUP, 0); // \xe2\x80\x98A\xe2\x80\x99 Release\n keybd_event(VK_CONTROL, 0x9d, KEYEVENTF_KEYUP, 0); // Ctrl Release\n }\nRun Code Online (Sandbox Code Playgroud)\n\n我希望这会对某人有所帮助。感谢所有帮助过我的人!
\n| 归档时间: |
|
| 查看次数: |
1566 次 |
| 最近记录: |