keybd_event 2,3 Tasten gleichzeitig? alt+strg+entf



  • Mit keybd_event kann ich ja Tastendruck simulieren.
    Aber wie schaffe ich es, dass mehrere Tasten gleichzeitig gedrückt werden?

    Gruß
    Dominik



  • Ich würde mal versuchen, nacheinander die beteiligten Tasten zu "drücken":

    keybd_event(VK_CONTROL,0,0,0);//STRG
    keybd_event(VK_MENU   ,0,0,0);//ALT
    keybd_event(VK_DELETE ,0,0,0);//ENTF
    
    keybd_event(VK_DELETE ,0,KEYEVENTF_KEYUP,0);
    ...//alle Tasten wieder "loslassen"
    

    (PS: ohne Garantie)



  • PS: Heutzutage sollte man "SendInput" verwenden...



  • Ich habe jetzt mein Programm bissl geändert, ich will nicht mehr alt+strg+entf sondern ALT+ TAB (also durch die Programminstanzen wandern) haben.

    Nachfolgendes funktioniert eigentlich, bis auf wenn ich B drücke wird gleich doppelt gesprungen - wie wenn ich manuell alt+ tab +tab mache.

    eine Idee?

    switch (wParam) {
    	case 'N': // alt deaktivieren
    
    			keybd_event(VK_MENU ,0,KEYEVENTF_KEYUP,0);
    
    		break;
    	case 'B': // einmal auf Tab drücken
    			keybd_event(VK_TAB, 0, 0, 0);               // Taste drücken
    			keybd_event(VK_TAB ,0,KEYEVENTF_KEYUP,0);
    
    		break;
    	case 'M': // alt aktivieren
    
    			keybd_event(VK_MENU, 0, 0, 0);               // Taste drücken
    
    		break;
    	}
    

    @jochen
    wollte eigentlich sendInput nutzen, aber bei einem Beispiel (von dir) gabs noch den Variablentyp "INPUT" den hat mein Visual Studio nicht erkannt?!



  • freakx0 schrieb:

    wollte eigentlich sendInput nutzen, aber bei einem Beispiel (von dir) gabs noch den Variablentyp "INPUT" den hat mein Visual Studio nicht erkannt?!

    VC6 !? Das kann sein. Damals vor 8 Jahren gab es dies noch nicht... Du kannst auch ein neues PSDK installieren (Link: siehe WinAPI-Forum ganz oben)



  • nein, Version 7.1
    muss ich irgendwelche header einbauen?

    folgendes funktioniert nicht (zwar jetzt nicht dein bsp, aber egal - hab deins nicht mehr gefunden...)

    UINT nInputs=0;
    
      m_KeyInput[nInputs].type            = INPUT_MOUSE;
      m_KeyInput[nInputs].mi.dwFlags      = MOUSEEVENTF_RIGHTDOWN;
      m_KeyInput[nInputs].mi.dx           = 0;    
      m_KeyInput[nInputs].mi.dy           = 0;    
      m_KeyInput[nInputs].mi.time         = 0;
      m_KeyInput[nInputs].mi.dwExtraInfo  = 0;
      m_KeyInput[nInputs++].mi.mouseData  = 0;
    
      if (nInputs)
      {
          SendInput(nInputs,m_KeyInput,sizeof(INPUT));
         }
    
      Sleep(1000);
    
      m_KeyInput[nInputs].type            = INPUT_MOUSE;
      m_KeyInput[nInputs].mi.dwFlags      = MOUSEEVENTF_RIGHTUP;
      m_KeyInput[nInputs].mi.dx           = 0;    
      m_KeyInput[nInputs].mi.dy           = 0;    
      m_KeyInput[nInputs].mi.time         = 0;
      m_KeyInput[nInputs].mi.dwExtraInfo  = 0;
      m_KeyInput[nInputs++].mi.mouseData  = 0;
    
      if (nInputs)
      {
        SendInput(nInputs,m_KeyInput,sizeof(INPUT));
      }
    


  • freakx0 schrieb:

    Ich habe jetzt mein Programm bissl geändert, ich will nicht mehr alt+strg+entf sondern ALT+ TAB (also durch die Programminstanzen wandern) haben.

    ctrl+alt+del kann man sowieso nicht von einem Programm aus senden.



  • freakx0 schrieb:

    nein, Version 7.1
    muss ich irgendwelche header einbauen?

    Ach so... Du musst:

    #define _WIN32_WINNT 0x0401
    

    definieren, bevor Du windows.h includierst (oder in den Projekteinstellungen)


Anmelden zum Antworten