2014-12-27 3 views
6

У меня есть небольшая программа, которая имитирует CTR + с & ССЫТ + v (копия & паста) событий, используя систему keybd_event. Проблема в том, что после запуска программы компьютер продолжает действовать так, как будто нажата клавиша ctrl, а затем - если я нахожу a, он выбирает весь документ, если я рулон колеса мыши, он меняет текст, и т.д. это происходит не только в визуальном редакторе студии, но и в любой другой программе, которая была открыта в то время как программа побежала, как Слово и т.д. Вот мой код:клавиши Ctrl сдерживала после имитации клавиши Ctrl вниз событий и Ctrl ключа до события

//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); 
    } 

ли кто-то знает, что я мог сделать, чтобы решить эту проблему проблема?

+1

Не используйте KEYEVENTF_EXTENDEDKEY, вместо этого используйте 0. Не используйте VK_LCONTROL, вместо этого используйте VK_CONTROL. –

ответ

4

Вот решение, это сработало для меня полностью. Обратите внимание на изменения параметров отправки на 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 
    } 

Надеюсь, это поможет кому-то. Спасибо всем, кто мне помог!