Strukturen werden nicht erkannt



  • Hallo,
    ich schreibe ein kleines Programm für Windows, darin möchte ich die Struktur INPUT benutzen um Benutzereingaben zu simulieren. Laut MSDN wird dafür folgendes benötigt: Declared in Winuser.h, include Windows.h

    Diese zwei Headerdateien habe ich in mein Programm eingebunden. Das Programm besteht bereits aus der WinMain Funktion mit allen Anhängseln.

    Gleich zu Anfang werden dort folgende Strukturen definiert:

    HWND hwnd;               
        MSG messages;            
        WNDCLASSEX wincl;
    

    Wie es scheint benötigen diese Strukturen alle die selben Headerdateien, da sie eingebunden sind gibts bei denen auch kein Problem und das Programm insgesammt lässt sich auch kompilieren.

    Füge ich jedoch noch folgende Zeile ein:

    INPUT mausinput;
    

    Die sich ja im Grunde nicht von obigen unterscheidet erhalte ich in Code::Blocks beim compilieren folgende Fehlermeldung:

    `INPUT' was not declared in this scope|

    Wieso kann ich auf diese Struktur nicht und auf die anderen schon zugreifen, wo liegt der Fehler?

    Mfg Felsen



  • Hallo,

    nur <Windows.h> includieren, das andere ist unnötig. Dann muss noch das Symbol _WIN32_WINNT so definiert werden, dass sein Wert grösser als 0x0400 ist, denn in <winuser.h> findet sich:

    #if (_WIN32_WINNT > 0x0400)
    

    Nur dann wird die INPUT-Struktur (und anderes) bekannt (heisst: nur verwendbar, wenn das Programm auf Systemen ab einer bestimmten Windows-Version laufen soll).

    MfG,

    Probe-Nutzer



  • Danke schonmal für den Tipp. Kannst du mir bitte noch sagen wie ich meinen Code dann Konkret ändern muss? Ich arbeite in Windows XP, der zugehörige Wert scheint dann 0x0501 zu sein.

    Da ich keine Ahnung habe was nun zu tun ist habe ich einfach nach den Headereinbindungen folgende Zeile geschrieben:

    #define _WIN32_WINNT 0x0501
    

    , was aber nur zu mehr Problemen führt, was genau muss ich änern?

    EDIT: habs selbst noch rausgebracht, das #define... einfach vor die header schreiben ..

    Mfg

    Felsen



  • Felsen schrieb:

    Ich arbeite in Windows XP, der zugehörige Wert scheint dann 0x0501 zu sein.

    Die Frage ist nicht, welches Windows du verwendest... Das Makro _WIN32_WINNT gibt an, welche Deklarationen der WinAPI Header mitkompiliert werden. Wenn Du zB. eine WinAPI Funktion verwenden willst, die es erst seit Vista gibt, musst du _WIN32_WINNT eben entsprechend setzen, damit die Deklarationen eingebunden werden.

    cheers, Swordfish


Anmelden zum Antworten