GetAsyncKeyState problem



  • hallo 🙂
    ich habe ein kleichen problem mit GetAsyncKeyState
    ich bin immoment etwas am programmieren, und will, das wenn ich die rechte maus taste drücke, etwas an geht und wenn ich die nochmals drücke, es wieder aus geht ...
    habe mir auch schon etwas zusammen geschrieben, aber das funktioniert nicht ganz

    if(GetAsyncKeyState(VK_RBUTTON)) = 1;
    {
    //programm startet
    {
    if(GetAsyncKeyState(VK_RBUTTON)) = 0;
    {
    //programm hört auf
    }
    }
    }
    

    woran kann es liegen??

    ps hab suchfunktion benutzt, aber leider nichts gefunden...



  • Probiers mal so:

    short LMBState;
    Boolean LMBDown;
    LMBState=GetAsyncKeyState(VK_LBUTTON);
    LMBDown=((LMBState & (1<<15))!=0);
    if (!LMBDown)
    {
    }

    Geht auch mit anderen Tasten!

    Gruss
    Frank



  • geht net ...



  • cracy112 schrieb:

    geht net ...

    Hallo,

    vielleicht hast du nur übersehen, dass Frank mit seinem Beispiel die linke Maustaste abfragt?

    Ratsam ist auch, den Klick in einer anderen Variablen zu speichern:

    Beispiel mit Franks Code:

    short RMBState;
       bool  RMBDown;
       bool  start;
    //----------------------
    
       RMBState    = GetAsyncKeyState(VK_RBUTTON);
       RMBDown     = ((RMBState & (1<<15))!=0);
       if (RMBDown)
          start =! start;  // hier ist der Ein-/Ausschalter
    
       if (start)
          StatusBar->Panels->Items[0]->Text =  "Programm gestartet";
       else
          StatusBar->Panels->Items[0]->Text =  "Programm gestoppt";
    

    mfg
    kpeter



  • Hallo,

    hmm ... grundlegend sollte man vielleicht erstmal anmerken dass dieses Konstrukt

    if(GetAsyncKeyState(VK_RBUTTON)) = 1;
    

    keinen Sinn macht?!

    Hier mehr dazu

    LG



  • ich bekomme sehr viele fehler meldungen ...

    ...: error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    ...: error C2371: 'RMBState': Neudefinition; unterschiedliche Basistypen
    ...: Siehe Deklaration von 'RMBState'
    ...: error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    ...: error C2371: 'RMBDown': Neudefinition; unterschiedliche Basistypen
    ...: Siehe Deklaration von 'RMBDown'
    ...: error C2059: Syntaxfehler: 'if'
    ...: error C2062: 'float'-Typ unerwartet
    ...: error C2059: Syntaxfehler: 'if'
    ...: error C2059: Syntaxfehler: 'else'
    

    weis aber iwi nich warum ?!

    edit...
    so ich glaube ich drücke es nochmal besser aus, damit man mitr besser helfen kannn
    ich weill das das iwi so aussieht:

    void ...()
    {
    if(GetAsyncKeyState(VK_RBUTTON))
    {
    *(float*)... = 2;
    }
    

    weil das ist der code, den ich bis her hab ... ich buss hald noch wissen, wie man das dieses (float)... = 2; auf = 0; stellt...



  • Irgendwie schlägt mein Trolldetektor gerade an. 😉

    Falls das ein Fehlalarm ist, dann entschuldigung und siehe hier. Damit solltest du starten.

    Gruß

    KK



  • mhh weist du es oder weist du es nicht ??
    ok auch wenn ich noch nicht so weit bin, kann man mir doch trotzdem helfen 😃
    oder muss man profi sein damit mann hier hilfe bekommt ?! ...



  • Hallo,

    vermutlich arbeitest du mit Visual C++... ?
    Dann bist du im falschen Forum

    mfg
    kpeter



  • mhh das is jetzt nen bissel peinlich xDDD
    sry dass ich so nen aufwind gemacht habe... wo muss ich denn dann hin ?!

    edit: habs gefunden sry ... XD 🙂



  • Hallo

    Also diese Zeile

    StatusBar->Panels->Items[0]->Text =  "Programm gestartet";
    

    deutet schon auf die VCL des C++ Builders bzw. Studios hin. Was natürlich die Frage aufwirft, warum du nicht die dafür vorgesehenen OnKey-Events benutzt? In einer VCL-Anwendung ist GetAsynchKeyState ohne extra Thread relativ unnütz.
    Deine Fehlermeldung lassen sich nicht allein mit deinem gezeigten Code aufklären. Was du mit dem (float) vorhast ist auch unklar.

    bis bald
    akari



  • akari schrieb:

    Also diese Zeile

    StatusBar->Panels->Items[0]->Text =  "Programm gestartet";
    

    deutet schon auf die VCL des C++ Builders bzw. Studios hin.

    akari, die hatte ich gepostet in der Annahme, dass er mit dem BCB arbeitet 🙂



  • Hallo

    Ah, richtig. Na dann soll crazy erstmal sagen in welcher Umgebung er programmiert : Reines C/C++/WinAPI, VCL im C++ Builder/Dev Studio oder MFC im MS Visual Studio.

    bis bald
    akari


Anmelden zum Antworten