mausbewegung verändern incl. unterbrechen



  • hallo!
    ich habe die "mousehook"-dll in mein prog eingebaut (das mit dem "Klicken" soll sowohl in dem programm, als auch ausserhalb/in anderen programmen funktionieren), und möchte die maus beim Klicken herunterschieben (mit einer while-schleife, Sleep und SetCursorPos).
    dagegen soll man aber sozusagen "gegenarbeiten" können, d.h. die mausposition, die die maus hätte, wenn ich sie nicht ständig verändern würde, soll mit einbezogen werden. ich habe es folgendermaßen versucht, doch es funktioniert nicht richtig, die maus wird mal garnicht versetzt und mal hört das ganze nicht auf:

    void __fastcall TForm1::wmMessage(TMessage& msg)
    {
    bool geklickt = false;
     if (msg.WParam == WM_LBUTTONUP)
     {
     geklickt = false;
     }
    
     if (msg.WParam == WM_LBUTTONDOWN)
     {
      geklickt = true;
      while (geklickt)
      {
       Sleep(3000);
       Application->ProcessMessages();
       SetCursorPos(GetMouseData().pt.x, GetMouseData().pt.y + 3);
      }
     }
    }
    
    wie gesagt:
    man soll dagegen anarbeiten können
    beim loslassen der maustaste _sofort_ aufhören
    
    danke im voraus!
    


  • Ich konnte mir auch nur mit nem Thread helfen:

    void ThreadFunc(void* p_val)
    {
       POINT pt;
       bool* p_geklickt = (bool*)p_val;
    
       while(*p_geklickt)
       {
          Sleep(500);
          GetCursorPos(&pt);
          if(*p_geklickt)         
             SetCursorPos(pt.x, pt.y + 3);
       }
    }
    //---------------------------------------------------------------------------
    
    // Hier geht die Message WM_MOUSEHOOK ein
    void __fastcall TMouseHookForm::wmMessage(TMessage& msg)
    {
       static bool  geklickt = false;
    
       if(msg.WParam == WM_LBUTTONUP || msg.WParam == WM_NCLBUTTONUP)
          geklickt = false;
    
       if(msg.WParam == WM_LBUTTONDOWN || msg.WParam == WM_NCLBUTTONDOWN)
       {
          geklickt = true;
          _beginthread(ThreadFunc, 4096, (void*)&geklickt);
       }
    }
    //---------------------------------------------------------------------------
    

    [ Dieser Beitrag wurde am 14.06.2003 um 19:46 Uhr von WebFritzi editiert. ]



  • also mit threads hab ich noch nie was gemacht, und mit dem error

    [C++ Fehler] Unit1.cpp(75): E2268 Aufruf der undefinierten Funktion '_beginthread'

    kann ich nichts anfangen.

    muss man die noch definieren, oder etwas anderes includieren?

    danke schonmal



  • ja gut, hat sich erledigt, hab mich beim suchen in der help nur vertippt. danke 🙂



  • Ja, bitteschön! Wie du siehst, hat mich das eine Stunde gekostet!



  • Wozu den WinAPI Thread? das TThread-Objekt ist viel bequemer.

    -junix



  • WebFritzi ist WinAPI- Freak.

    Der ist ein ÜBERLÄUFER! 😉



  • also @ webfritzi: ich meinte nicht, dass ich dein beispiel gefunden hätte, sondern nur das _beginthread, nicht das du meinst, es wäre umsonst gewesen

    Ja, bitteschön! Wie du siehst, hat mich das eine Stunde gekostet!

    🙄



  • Original erstellt von junix:
    Wozu den WinAPI Thread? das TThread-Objekt ist viel bequemer.

    Find ich nicht - sonst hätt ich es ja benutzt! 😉


Anmelden zum Antworten