Strg/Ctrl + C in C++ simulieren



  • Hi zusammen,

    ich häng hier gerade etwas fest, ich möchte das mit die Anwendung etwas was ich in Firefox markiert habe in die Zwischenablage/Clipboard kopiert und versuche deshalb den Tastendruck STRG + C zu simulieren was nicht wirklich klappt, bisher konnte ich lediglich einzelne Buchstaben per simuliertem Tastendruck ins Notepad schreiben, mit 2 Tasten gleichzeitig klappts nicht wirklich 😮

    INPUT ip[2];
    
    			ip[0].type = INPUT_KEYBOARD;
    			ip[0].ki.wScan = 0;
    			ip[0].ki.time = 0;
    			ip[0].ki.dwExtraInfo = 0;
    
    			ip[1].type = INPUT_KEYBOARD;
    			ip[1].ki.wScan = 0;
    			ip[1].ki.time = 0;
    			ip[1].ki.dwExtraInfo = 0;
    
    			ip[0].ki.wVk = 0x11;
    			ip[0].ki.dwFlags = 0;
    
    			ip[1].ki.wVk = 0x43;
    			ip[1].ki.dwFlags = 0;
    
    			SendInput(2, ip, sizeof(INPUT));
    
    			ip[0].ki.dwFlags = KEYEVENTF_KEYUP;
    			ip[1].ki.dwFlags = KEYEVENTF_KEYUP;
    
    			SendInput(2, ip, sizeof(INPUT));
    
    INPUT ip;
    			INPUT ip2;
    
    			ip.type = INPUT_KEYBOARD;
    			ip.ki.wScan = 0;
    			ip.ki.time = 0;
    			ip.ki.dwExtraInfo = 0;
    
    			ip2.type = INPUT_KEYBOARD;
    			ip2.ki.wScan = 0;
    			ip2.ki.time = 0;
    			ip2.ki.dwExtraInfo = 0;
    
    			ip.ki.wVk = 0x11;
    			ip.ki.dwFlags = 0;
    			SendInput(1, &ip, sizeof(INPUT));
    
    			ip2.ki.wVk = 0x43;
    			ip2.ki.dwFlags = 0;
    			SendInput(1, &ip2, sizeof(INPUT));
    
    			ip.ki.dwFlags = KEYEVENTF_KEYUP;
    			SendInput(1, &ip, sizeof(INPUT));
    
    			ip2.ki.dwFlags = KEYEVENTF_KEYUP;
    			SendInput(1, &ip2, sizeof(INPUT));
    

    und

    keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
    keybd_event(0x43, MapVirtualKey(0x43, 0), 0, 0);
    keybd_event(0x43, MapVirtualKey(0x43, 0), KEYEVENTF_KEYUP, 0);
    keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);
    

    Hab ich bisher erfolglos probiert...
    Vielen Dank schon mal für eure Unterstützung 👍

    MFG Marcurion



  • Update:

    Hab grade herausgefunden im Texteditor, Opera und im Internet Explorer funktioniert das letzte Beispiel (die anderen warscheinlich auch), warum nicht in Firefox?

    MFG Marcurion



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • keybd_event soll laut MSDN nicht mehr verwendet werden.

    Versuchs mal so (bei mir funktioniert es):

    #include <windows>
    
    void HoldCtrl();
    void PressC();
    void ReleaseCtrl();
    void SimulateCtrlC();
    
    int main()
    {
    Sleep(5000);
    SimulateCtrlC();
    
    }
    
    void SimulateCtrlC()
    {
              HoldCtrl();
              PressC();
              ReleaseCtrl();
    }
    
    void HoldCtrl()
    {
            INPUT data;
            data.type = INPUT_KEYBOARD;
            data.ki.wVk =   VK_CONTROL;
            data.ki.wScan = MapVirtualKey ( VK_CONTROL, MAPVK_VK_TO_VSC);
            data.ki.time =0;
            data.ki.dwExtraInfo = 0;
    
            data.ki.dwFlags = 0;
            SendInput (1 , &data, sizeof(data));  // Taste drücken
    }
    
    void PressC()
    {
            INPUT data;
            data.type = INPUT_KEYBOARD;
            data.ki.wVk =   0x43;
            data.ki.wScan = MapVirtualKey ( VK_CONTROL, MAPVK_VK_TO_VSC);
            data.ki.time =0;
            data.ki.dwExtraInfo = 0;
    
            data.ki.dwFlags = 0;
            SendInput (1 , &data, sizeof(data));  // Taste drücken
    
            data.ki.dwFlags = KEYEVENTF_KEYUP;
            SendInput (1 , &data, sizeof(data));  // Taste loslassen
    }
    
    void ReleaseCtrl()
    {
            INPUT data;
            data.type = INPUT_KEYBOARD;
            data.ki.wVk =     VK_CONTROL;
            data.ki.wScan = MapVirtualKey ( VK_CONTROL, MAPVK_VK_TO_VSC);
            data.ki.time =0;
            data.ki.dwExtraInfo = 0;
    
            data.ki.dwFlags = KEYEVENTF_KEYUP;
            SendInput (1 , &data, sizeof(data));     // Taste loslassen
    }
    


  • Hi,

    danke funktioniert 1 a 😋 😋 😋

    MFG Marcurion


Anmelden zum Antworten