HILFE: keybd_event



  • 😕 Ich prgrammiere an einer Anwendung, die eine fremde Anwendung "fernsteuert". Zum markieren von Datensätzen muß ich die [Shift-Taste] drücken und dann mit [Cursor runter] die in der Liste folgenden Datensätze markieren.

    Das ganze löse ich mit:

    keybd_event(VK_SHIFT, 0, 0, NULL); // Shift drücken
    
    for (int i = 0 ; i < 10 ; i++)   {// 10 Datensätze markieren
         keybd_event(VK_DOWN, 0, 0, NULL);
         keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0);
    }
    
    keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); // Shift lösen
    

    Auf meinem Laptop ( P4, 1,2 Ghz ) funktionierts und auf mein PC (P4 1,7 Ghz) markiert der die Datensätze nicht. Die Tasten VK_DOWN kommen an, aber der gedrückte Shift nicht. Delays und PrcessMessages dazwischen hab ich schon alles ausprobiert. Es klappt nicht .......

    😕 Verzweifel ....

    Ist die Kiste zu schnell, oder Windows zu langsam ?????



  • Sleep(0) zwischen den Aufrufen dürfte helfen... wenn ja, dann bin ich auch für ne Erklärung bereit (o:

    -junix



  • 😡 Ein Sleep(0) und auch ein Sleep(5000) nach dem Drücken der Shift-Taste ist ihm sch....egal. Er läuft durch die Datensätze, d.h. der VK_DOWN kommt an, aber die Shift-Taste davor nicht.
    Aber schon mal Thx.


  • Mod

    Hallo

    versuchs dochmal mit einer Schleife + Application->ProzessMessage()

    MfG
    Klaus



  • Alles schon probiert, Delay-Schleifen...
    http://www.c-plusplus.net/forum/viewtopic.php?t=58904



  • Dann mach das so hier:

    keybd_event(VK_DOWN, 0, 0, 0);
    keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0);
    keybd_event(VK_UP, 0, 0, 0);
    keybd_event(VK_UP, 0, KEYEVENTF_KEYUP, 0);
    keybd_event(VK_SHIFT, 0, 0, NULL); // Shift drücken
    for (int i = 0 ; i < 10 ; i++)   {// 10 Datensätze markieren
         keybd_event(VK_DOWN, 0, 0, NULL);
         keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0);
    }
    keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); // Shift lösen
    

    Ist zwar umständlich, aber was soll's.


Anmelden zum Antworten