Bewegungsgebiet für die Maus



  • hi,
    1.gibt es einen Befehl, das die maus in einem bestimmten Gebiet festhält? Also das ich die Maus z.B. nur im inneren der Konsole bewegen kann. Ich suche allerdings eine ander möglichkeit, als die "if(getcurserpos()>500){setcurserpos(0,500);}" variante!

    2.Wie kann ich die Position der Konole bekommen?

    thx im voraus
    mfg kenny



  • Zuerstmal das Auffinden des Window-Handles der Konsole (wie in der FAQ):

    const HWND GetConsoleWindow()
    {
       HWND hwnd;
       TCHAR strNewTitle[256];
       TCHAR strOldTitle[256];                                  
    
       GetConsoleTitle(strOldTitle, 256);
    
       wsprintf(strNewTitle, "%d/%d", GetTickCount(), GetCurrentProcessId());
    
       SetConsoleTitle(strNewTitle);
    
       Sleep(50);
    
       hwnd = FindWindow(NULL, strNewTitle);
    
       SetConsoleTitle(strOldTitle);
    
       return hwnd;
    }
    

    Damit und ein bisschen WinAPI sind die Probleme dann leicht zu lösen.

    RECT  rc;
    GetWindowRect(GetConsoleWindow(), &rc);
    ClipCursor(&rc);
    
    RECT rc;
    GetWindowRect(GetConsoleWindow(), &rc);
    int left  = rc.left;
    int right = rc.right;
    

    Das Einbinden von Wondows.h nicht vergessen. 😉

    [EDIT] Ich weiß nicht genau, ob ClipCursor() auch unter WinNT so ohne Weiteres geht. Im PSDK steht: "The calling process must have WINSTA_WRITEATTRIBUTES access to the window station." In Win9x scheint das aber standardmäßig so zu sein, denn bei mir (Win98SE) funzt das. 🙂 Wenn du merkst, dass es unter NT/XP/2000 nicht geht, dann melde dich nochmal, und wir beide klügeln dann etwas aus. [/EDIT]

    [ Dieser Beitrag wurde am 01.09.2002 um 02:30 Uhr von WebFritzi editiert. ]



  • Kann mir mal jemand sagen wofür das Sleep da in der GetConsoleWindow ist? Das ist ja wohl aller sinnloseste!



  • Musst nicht weinen, <Needle>. Das ist dazu da, damit noch ein wenig mit dem FindWindow() gewartet wird, nachdem der neue Fenstertitel gesetzt wurde. Ist nur zur Sicherheit da. Vielleicht funzts auch ohne. Aber vielleicht dann nicht auf allen Rechnern. Wer weiß...



  • Na ja, das ist wirklich quatsch. Und wie kommst du oder der Ersteller dieses Codes genau auf 50 Millisekunden? Das ist genauso unsicher. Also raus damit, es funktioniert natürlich sofort.



  • Hehe, schön ist, dass ihr nichts am Code in der FAQ ändern könnt. Da bleibt das Sleep(50) nämlich. 😃 Und das solltet ihr jetzt in diesem Thread tun: Sleep(INFINITE)!


Anmelden zum Antworten