Mauszeiger



  • Huhu,
    ich hätte da mal eine frage
    wie kann man vergleichen was die maus ist?
    also z.b. if(maus== mauszeiger) oder if(maus== ein schwert(von einem spiel) )
    vielen dank



  • ich denke nicht das man feststellen kann, ob der Mauszeiger ,das Schwert von einem Spiel als bild hat oder nicht ( man kann evt. die grafikidetifizieren über direct X ) aber ob der Mauszeiger ne Hand, ein pfeil oder eine sanduhr ist, sollte man schon feststellen können, vlt. kann einer mit erfahrung zu mauszeigern mehr darüber sagen ?


  • Mod

    Man kann mit GetCursor das Handle des aktuellen Cursors abfragen. Dieses Handle kannst Du verglewichen. Ist das Handle jedoch von einem Cursor, dass eine beliebige Applikation erstelt hat, dann kannst Du über den Typ des Cursors keine Aussage machen.
    Enzig und alleine Stock Objects (also systemweite Cursor des OS) könntest Du vergleichen.



  • ich habe aber ein bild von dem schwert in dem der mauszeiger verwandelt wird
    kann ich das nicht irgendwie abfragen



  • Evtl. mittels CopyImage() ne Bitmap erzeugen und diese mit dem "Schwert"-Bild vergleichen?

    http://msdn2.microsoft.com/en-us/library/ms648031.aspx


  • Mod

    Das geht nicht, weil Du die Hintergrundinfos vom Bildschirm natürlich nciht von den eigentlichen Infos des Cursors unterscheiden kanns.



  • ich habs jetzt so gemacht:

    #include <windows.h>
    #include <iostream>
    using namespace std;
    HCURSOR GetCurrentCursorHandle();
    
    int main(){
        while(true){
        HANDLE cursor;
        cursor = LoadCursorFromFile("Handwriting.cur");
        if(!LoadCursorFromFile("Handwriting.cur"))
        cout << "Handwritting nicht gefunden!" << endl;
        if( GetCurrentCursorHandle() == cursor){
        std::cout << "Cursor ist jetzt eine Laus!";
        }
        if(!GetCurrentCursorHandle())
        cout << "GetCurrentCursorHandle hat nicht geklappt!" << endl;
        }
        return 0;
    }
    
    HCURSOR GetCurrentCursorHandle()
    {
        POINT pt;
        HWND hWnd;
        DWORD dwThreadID, dwCurrentThreadID;
        HCURSOR hCursor = NULL;
    
        // Ermitteln, welches Fenster Eigentümer des Cursors ist
        GetCursorPos(&pt);
        hWnd = WindowFromPoint(pt);
    
        // Thread-ID für den Cursoreigentümer abrufen.
        dwThreadID = GetWindowThreadProcessId(hWnd, NULL);
    
        // Thread-ID für den aktuellen Thread abrufen.
        dwCurrentThreadID = GetCurrentThreadId();
    
        // Wenn Sie nicht der Cursoreigentümer sind, müssen Sie den anderen
        // Thread abrufen, damit Sie GetCursor() verwenden können, um
        // den richtigen hCursor zurückzugeben.
        if (dwCurrentThreadID != dwThreadID) {
    
            // Thread abrufen, der Eigentümer des Cursors ist
            if (AttachThreadInput(dwCurrentThreadID, dwThreadID, TRUE)) {
    
                // Handle für den Cursor abrufen.
                hCursor = GetCursor();
    
                // Von Thread lösen, der Eigentümer des Cursors ist
                AttachThreadInput(dwCurrentThreadID, dwThreadID, FALSE);
            }
        } else
            hCursor = GetCursor();
    
        return hCursor;
    }
    

    leider funktioniert das immernoch nicht
    die untere funktion müsste richtig sein die hab ich nicht selber geschrieben 😃
    die gibt ein handle vom aktuellen cursor zurück



  • Ein und derselbe Cursor wird wohl kaum dasselbe Handle haben wenn man ihn mehrfach öffnet.

    Du wirst wohl an die Pixel des Cursors drankommen müssen und diese vergleichen.
    Allerdings scheint es dazu keine Funktion in der WinAPI zu geben (ich hatte bis gerade eben gedacht man könnte CopyImage() dazu verwenden, was aber nicht der Fall ist.)


Anmelden zum Antworten