Get Cursor Icon



  • Hallo
    Ich möchte das Icon der Maus überprüfen. Ich möchte ein Makro für ein Spiel
    machen. Die Maus kann vier verschiedene Icons annehmen und ich möchte
    überprüfen, welches Icon gerade angezeigt wird.
    Kann mir da bitte jemand helfen?
    Vielen Dank!
    mfg
    Vampir



  • C++ kennt keine Cursor, Mauszeiger etc...
    Welches/e OS/API ?



  • Thx für die schnelle Antwort!
    Äh ich weiss nicht was du meinst. Das Spiel lauft im Fenstermodus.
    Ich Setze die Maus mit SetCursorPos und simuliere klicks mit mouse_event();
    Das Projekt ist im Konsolenmodus und ich hab windows.h inkludert.



  • Alles klar 😉 .
    OS = Operation System = (in Deinem Fall) Windows
    API = Application Programming Interface = (in Deinem Fall) Win32-API

    So..., Du brauchst die Funktion SetCursor bzw. GetCursor um das Cursor-Icon zu setzen bzw. abzufragen.

    Siehe MSDN für weitere Informationen:
    ➡ http://msdn2.microsoft.com/en-us/library/ms648393.aspx
    ➡ http://msdn2.microsoft.com/en-us/library/ms648388.aspx



  • Der Thread sollte vllt. mal von nem Mod in den WinAPI-Teil verschoben werden 😉 .



  • Hi CodeFinder
    Thx für die Erklärung.
    Ich bin noch am C++ lernen und bin noch nicht so stark. Hab die Links angesehen.
    Aber ich weiss jetzt nicht, was ich tun soll. Ich möchte einfach überprüfen
    können, welches Icon gerade angezeigt wird. Dazu ist es wohl nötig, das Icon
    auszulesen. Gibt es vielleicht irgendwo ein kleiner Beispielcode? Habe Gegooglet,
    aber nichts passendes gefunden.
    Das Cursor Icon muss ich nur auslesen können, also eine ID würde reichen damit
    ich weiss WELCHES Icon gerade angezeigt wird.
    Mit SetCursor bzw. GetCursor setzt man doch die Mausposition bzw bekommt sie.
    Was hat das mit dem Icon zu zun? 😉



  • vampir26 schrieb:

    Mit SetCursor bzw. GetCursor setzt man doch die Mausposition bzw bekommt sie.
    Was hat das mit dem Icon zu zun?

    Mit SetCursor setzt man einen Cursor, den man vorher erstellt hat und mit GetCursor kann man erfahren, welcher Cursor gerade aktiv ist...

    // Cursorhandle erstellen (Cursor laden)
    HCURSOR MeinCursor = LoadCursorFromFile("./cursor.cur");
    
    //Cursor setzen (er wird dann angezeigt)
    SetCursor(MeinCursor );
    
    //aktuellen Cursor holen (das Handle)
    GetCursor();
    

    Also arbeitest du hier mit den Handles der Cursor und nicht mit der Mausposition...
    Wenn du das Handle des jeweiligen Cursors kennst, kannst du also einfach mit GetCursor() dieses holen.

    MfG
    Hundefutter



  • Ja soweit hab ich verstanden.

    HCURSOR Cursor;
    Cursor = GetCursor();
    

    Aber wie komm ich an das Icon bzw der Name des Icon Files?



  • Jeder Cursor ist durch sein Handle anzusprechen und wenn du 4 verschiedene Cursor mit 4 verschiedenen Handles hast, dann kannst du doch einfach über das Handle herausfinden, welcher Cursor gerade aktiv ist. Dann musst du nur noch wissen, welches Icon zu welchem Handle (Cursor) gehört und du hast es doch, oder?

    MfG
    Hundefutter



  • vampir26 schrieb:

    Ja soweit hab ich verstanden.

    HCURSOR Cursor;
    Cursor = GetCursor();
    

    Aber wie komm ich an das Icon bzw der Name des Icon Files?

    Der Handle steht repräsentativ für das Icon... an den Dateinamen kommst Du nicht zwangsläufig, da es nicht unbedingt einen gibt :p . Solche Resourcen sind i.d.R. in DLL's ausgelagert. Du kannst sie aber mit der Funktion ExtractIcon(Ex) in eine *.ico-Datei schreiben. Ein Icon hat keine ID, wozu auch, sondern einen HANDLE (!), eben HICON.

    Hier gibts nochmal einen allgemeinen Überblick: http://msdn2.microsoft.com/en-us/library/ms646973.aspx



  • Warum ist das so kompliziert. Ich will doch nur wissen, welches von diesen
    Cursors gerade angezeigt wird!
    http://ic1.deviantart.com/fs5/i/2005/125/4/d/World_of_Warcraft_CursorXP_by_evilarcana.gif



  • vampir26 schrieb:

    Warum ist das so kompliziert. Ich will doch nur wissen, welches von diesen Cursors gerade angezeigt wird!

    Es ist doch gar nicht kompliziert. Das Handle des Cursors steht wie schon gesagt repräsentativ für das jeweilige Icon und über GetCursor() holst du dir einfach das Handle und weißt somit, welcher Cursor gerade aktiv ist. Sollte nicht schwer sein..
    Wenn du noch Probleme hast, poste einfach etwas Code, dann können wir auch helfen..

    MfG
    Hundefutter



  • 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.



  • Jetzt hab ich's kapiert. Danke.
    Aber es geht trotzdem nicht.

    #include <cstdlib>
    #include <iostream>
    #include <windows.h>
    using namespace std;
    HCURSOR Cursor;
    int main(int argc, char *argv[])
    {
        Sleep(6000);
        Cursor = GetCursor();
        cout << Cursor << endl;
        Sleep(6000);
        Cursor = GetCursor();
        cout << Cursor << endl;
        Sleep(10000);
        return EXIT_SUCCESS;
    }
    

    Als Ausgabe erhalte ich immer 0x10015. Egal welches Icon der Cursor
    gerade annimmt.


Anmelden zum Antworten