SendInput und Hooks



  • hi,
    ich habe 2 Programme:

    1. Ein Programm was das Keyboard hookt. Wird eine bestimmte Taste gedrückt, so wird bTaste true und das Programm startet in der Hauptschleife Programm 2 mit:
    ShellExecute(NULL,"open","ESSDemoRecRec.exe",NULL,NULL,SW_SHOWNORMAL);
    
    1. ein so kleines prog dass ich gleich mal den code (ohne inlcudes!!!!) poste
    // es gibt normal nur KEYUP, aber zur Vereinfachung schreib ich mal DOWN noch dazu
    #define KEYEVENTF_KEYDOWN 0
    
    // PpP ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // ~~~~~~
    // VKKey = Der VK-Key der Taste deren State geändert werden soll
    // Flags = KEYEVENTF_KEYDOWN Taste heruntergedrückt
    //		   KEYEVENTF_KEYUP   Taste loslassen
    void SendKey(WORD VKKey, DWORD Flags)
    {
    	// enhält Infos über die Taste die gedrückt werden soll
    	KEYBDINPUT KeyInput;
    
    	// die Taste die simuliert werden soll
    	KeyInput.wVk = VKKey;
    
    	// die Flags werden 1zu1 übergeben
    	KeyInput.dwFlags = Flags;
    
    	// das 'Sendepaket'
    	INPUT InputEvent;
    
    	// wir drücken eine Taste der Tastatur
    	InputEvent.type = INPUT_KEYBOARD;
    
    	// wir wollen die in KeyInput definierte Taste drücken
    	InputEvent.ki = KeyInput;
    
    	SendInput(1,&InputEvent,sizeof(INPUT));
    }
    
    int WINAPI WinMain
    (
        HINSTANCE hInstance,
        HINSTANCE hPrevInstance,
        LPSTR lpCmdLine,
        int nShowCmd
    )
    {
    	// Hauptprogramm setzt diesen Eintrag zum Beenden
    	while(GetRegKey(OPCODEREGISTRY,"Record") == 1)
    	{
    		SendKey(VK_SPACE,KEYEVENTF_KEYDOWN);
    		SendKey(VK_SPACE,KEYEVENTF_KEYUP);
    		Sleep(100);
    	}
    }
    

    so jetzt zu meinem Problem:
    auf manchen PC's (natürlich gerade nicht auf meinem), kommt es zu einem sehr großen Performance-Unterschied wenn man

    a) Prog 2) über die Taste von Prog 1) starte

    und wenn man

    b) Prog 1) runnt, aber Prog 2) manuell startet.

    Beides mal wurde das Programm in UT2004 getestet und bei a) waren es ca 0,5 fps und bei b) ca 30 fps und ich glaub 60facher Speed ist schon etwas hart.

    Woran könnte das liegen?
    thxalia



  • ich persönlich denke das es an dem

    ShellExecute(NULL,"open","ESSDemoRecRec.exe",NULL,NULL,SW_SHOWNORMAL);
    

    liegt, aber was soll daran falsch sein?

    Startet manchmal die Func den neuen Prozess las eine Art untergeordneten Thread?



  • keine Ahnung? wär ziemlich schade 😉



  • ehm bevor ich das hier komplett aufgeb, sagt bitte bitte wenigstens das ihr keine ahnung von der Lösung habt 😃

    EDIT:

    R.i.P. (Rest in Piece, wie ich in nem aufsatz geschrieben hab ;)) du lieber Thread.... denn dich ignoriert ja jeder 😞 😞 😞 😞


Log in to reply