Programm was unter Windows die Leertaste drückt



  • Hi ich such nen Programm welches in einem bestimmten Zeitraum unter windows die Leertaste drückt.
    Gibt es sowas? bzw ist sowas möglich?



  • Hatten wir letztens erst im WinAPI-Forum... Glaube ich^^

    Jedenfalls, SendInput müsste genau das tun. Die Parameter suchst du dir am besten aus MSDN raus 😉



  • Dann wäre ich als Anwender aber ziemlich irritiert, wenn plötzlich die Leertaste der Tastatur automatisch nach unten gedrückt wäre -)



  • ~irritiert schrieb:

    Dann wäre ich als Anwender aber ziemlich irritiert, wenn plötzlich die Leertaste der Tastatur automatisch nach unten gedrückt wäre -)

    🤡



  • Hi! Ich hab mal nen bischen in der MSDN gesucht und folgendes Beispiel gefunden:

    #include <windows.h>
    
       void SetNumLock( BOOL bState )
       {
          BYTE keyState[256];
    
          GetKeyboardState((LPBYTE)&keyState);
          if( (bState && !(keyState[VK_NUMLOCK] & 1)) ||
              (!bState && (keyState[VK_NUMLOCK] & 1)) )
          {
          // Simulate a key press
             keybd_event( VK_NUMLOCK,
                          0x45,
                          KEYEVENTF_EXTENDEDKEY | 0,
                          0 );
    
          // Simulate a key release
             keybd_event( VK_NUMLOCK,
                          0x45,
                          KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
                          0);
          }
       }
    
       void main()
       {
          SetNumLock( TRUE );
       }
    

    Hab ich mir gedacht, erst einmal kopieren und ausführen und nacher mal die einzelnen Schritte untersuchen. Nix war! Benutze Visual c++ 2005 Express version und habe echt alles versucht (alles mögliche includieren, mit using namespace std, pipapo). Es kamen immer ein Batzen Fehler!

    Kompilieren...
    stdafx.cpp
    e:\cplus\projekte\tastaturausgaben\tastaturausgaben\stdafx.h(7) : warning C4161: #pragma pack(pop...): Mehr pop- als push-Vorgänge
    E:\Cplus\Visual c++\VC\include\winnt.h(3035) : warning C4103: "e:\cplus\visual c++\vc\include\winnt.h": Ausrichtung wurde nach Einschließen des Headers geändert, möglicherweise fehlt "#pragma pack(pop)".
    E:\Cplus\Visual c++\VC\include\winnt.h(3327) : warning C4103: "e:\cplus\visual c++\vc\include\winnt.h": Ausrichtung wurde nach Einschließen des Headers geändert, möglicherweise fehlt "#pragma pack(pop)".
    E:\Cplus\Visual c++\VC\include\winnt.h(3423) : warning C4068: Unbekanntes Pragma
    E:\Cplus\Visual c++\VC\include\winnt.h(3428) : warning C4068: Unbekanntes Pragma
    E:\Cplus\Visual c++\VC\include\winbase.h(1252) : error C2144: Syntaxfehler: 'void' sollte auf ';' folgen
    E:\Cplus\Visual c++\VC\include\winbase.h(1252) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    E:\Cplus\Visual c++\VC\include\winbase.h(1253) : error C2144: Syntaxfehler: 'void' sollte auf ';' folgen
    E:\Cplus\Visual c++\VC\include\winbase.h(1253) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    E:\Cplus\Visual c++\VC\include\winbase.h(1253) : error C2086: 'int DECLSPEC_NORETURN': Neudefinition
    E:\Cplus\Visual c++\VC\include\winbase.h(1252): Siehe Deklaration von 'DECLSPEC_NORETURN'
    E:\Cplus\Visual c++\VC\include\winbase.h(1313) : error C2144: Syntaxfehler: 'void' sollte auf ';' folgen
    E:\Cplus\Visual c++\VC\include\winbase.h(1313) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    E:\Cplus\Visual c++\VC\include\winbase.h(1313) : error C2086: 'int DECLSPEC_NORETURN': Neudefinition
    E:\Cplus\Visual c++\VC\include\winbase.h(1252): Siehe Deklaration von 'DECLSPEC_NORETURN'
    .\stdafx.cpp(6) : warning C4161: #pragma pack(pop...): Mehr pop- als push-Vorgänge
    Das Buildprotokoll wurde unter "file://e:\Cplus\Projekte\Tastaturausgaben\Tastaturausgaben\Release\BuildLog.htm" gespeichert.
    Tastaturausgaben - 8 Fehler, 6 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    Es lag also wieder mal am "stdafx.cpp". An den std dateien habe ich allerdings gar nix verändert!

    Zuvor habe ich nur Dev-C++ benutzt aber irgendwie funktionierte da der Debugger gar nicht, daher bin ich auf Visual c++ umgestiegen. Hab den Quellcode also nochmal im DEV-C++ ausprobiert und es funktionierte einwandfrei.

    Kann mir das jemand mit diesen "Vorkompilerten Headern" erklären bzw mir mal einen link dazu schicken? Und wie muss ich jetzt das Programm verändern, damit es auch im Visual läuft?

    Danke für eure Hilfe schonma im voraus 😛



  • nicht möglich.

    ...

    mit standard c++ (dieses sub-forum)

    wann lernt ihr es endlich?



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ 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.



  • fassdas schrieb:

    nicht möglich.
    ...
    mit standard c++ (dieses sub-forum)
    wann lernt ihr es endlich?

    Naja, jetzt ist es ja in WinAPI 😃

    Weedjos Compiler schrieb:

    warning C4161: #pragma pack(pop...): Mehr pop- als push-Vorgänge

    Für jedes pragma pack(pop) brauchst du auch ein pragma pack(push).

    Ansonsten: Versuchs doch einfach mal mit SendInput!!



  • Blöde frage gibts son programm komplett fertig geschrieben?^^ weil von c++ hab ich mal voll keine ahung^^
    kann nur son bischen C.



  • Wir sind da ja nicht so...

    INPUT Input;
    KEYBDINPUT LeerIn;
    
    Input.type = INPUT_KEYBOARD;
    LeerIn.wVK = VK_SPACE;
    LeerIn.wScan = 0;
    LeerIn.dwFlags = 0;
    LeerIn.time = 0;
    LeerIn.extraInfo = 0;
    SendInput( 1, &Input, sizeof(Input) );
    
    LeerIn.dwFlags = KEYEVENTF_KEYUP;
    SendInput( 1, &Input, sizeof(Input) );
    

    Nicht getestet...



  • gut wenn du mir jetzt noch sagst wo und als was ich das in visual studio kompilieren muss^^



  • Wo und als was? Also ein bisschen wirst du dich wohl auskennen... In welchem zeitlichen Abstand soll die Leertaste denn gedrückt werden?



  • wieder so ein script kiddy was nur ein programm braucht um andere leute zu nerven, aber keine ahnung vom coden hat. 🙄



  • ich nerv damit niemanden^^.Ist blos für den eigenbedarf um was zu automatisieren^^
    also wenn einmal pro minute die leer taste läuft dann würd mir das schon reichen^^



  • Erstell einen Low-Level Timer mit SetTimer, fang in deiner WndProc die WM_TIMER-Nachrichten ab und
    simuliere in deinem WM_TIMER-Handler mit SendInput (oder auch keybd_event) ein Drücken der Leertaste 😉 .

    Infos zu den markierten Funktionen/Nachrichten etc. gibt es in der MSDN.


Anmelden zum Antworten