2014-12-27 20 views
6

Mam mały program, który symuluje CTR + c & CTR + v (skopiuj & pasta) zdarzeń z użyciem systemu keybd_event. Problem polega na tym, że po uruchomieniu programu komputer działa tak, jakby kluczzostał naciśnięty, a następnie - jeśli wpiszesz a wybierze cały dokument, jeśli obrócę kółko myszy, zmieni się strona tekstowa, itd. to się dzieje nie tylko w edytorze Visual Studio, ale w każdym innym programie, który został otwarty, podczas gdy program prowadził jako Słowo itp Oto mój kod:klawisz Ctrl przechowywane w dół po symulację klawisz Ctrl klucz zdarzeń i ctrl się zdarzenie

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

Czy ktoś wie co mogę zrobić, aby rozwiązać ten problem problem?

+1

Nie używaj KEYEVENTF_EXTENDEDKEY, zamiast tego użyj 0. Nie używaj VK_LCONTROL, zamiast tego użyj VK_CONTROL. –

Odpowiedz

4

Oto rozwiązanie, to zadziałało dla mnie całkowicie. Zwróć uwagę na zmiany parametrów wysyłanych do keybd_event. Użyłem artykułu CodeProject, link: http://www.codeproject.com/Articles/7305/Keyboard-Events-Simulation-using-keybd-event-funct. To jest mój naprawiony kod:

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

Mam nadzieję, że to pomoże komuś. Dzięki za wszystkich, którzy mi pomogli!

Powiązane problemy