I have a small program that simulates ctr+c & ctr+v (copy & paste) events using the system keybd_event
. The problem is that after the program runs the computer continues to act as if the ctrl key is pressed down and then - if I type a it selects the whole document, if I roll the mouse wheel it changes the text side, etc. It happens not only in Visual Studio editor, but in any other program that was opened while the program ran as Word etc.
Here is my code:
//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);
}
Does someone know what could I do to solve this problem?
Here is the solution, this worked for me completely. Notice the changes in the parameters send to the keybd_event. I used an article of CodeProject, link: http://www.codeproject.com/Articles/7305/Keyboard-Events-Simulation-using-keybd-event-funct . This is my repaired code:
//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
}
I hope this will help someone. Thanks for all who helped me!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With