WinAPI Funktionen in Konsole?



  • hallihallo,

    kann man bzw. wie kann man Funktionen aus der WInAPI z.B. TextOut() etc. in der Konsolebenutzen?
    Bei mir kommt immer so etwas in der Art:

    Textout() nicht deklarierter Bezeichner...

    Obwohl die richtige Header-Datei benutzt wird.
    Gibt es da irgendwelche Möglichkeiten, es mit der Konsole zu machen?

    Hintergrund dabei ist:
    Ich find, es ist viel leicht Benutzereingaben einzugeben und auszuwerten in der Konsole, ich fidne es zudem viel zu umstöndig erst die ganzen Eingabefelder in einem Windows-Fenster zu genieren, da verzichte ich lieber auf den "SChnickshcnack", doch dann funktionieren einige WinAPI Befehle nicht. (bsp. TextOut()

    mit freundlichen Grüßen



  • Also du brauchst theoretisch nur die richtigen header und die libs von den Funktionen die du benutzen willst.
    Für alle Windows Funktionen such mal in der MSDN nach. Da findest du wirklich alles was das herz begehrt 😉

    MSDN schrieb:

    QuickInfo (TextOut)
    Windows NT: Requires version 3.1 or later.
    Windows: Requires Windows 95 or later.
    Windows CE: Unsupported.
    Header: Declared in wingdi.h.
    Import Library: Use gdi32.lib.
    Unicode: implemented as Unicode and ANSI versions on Windows and Windows NT.

    MfG schirrmie



  • Ev. noch die Schreibweise beachten : Textout () != TextOut () 🙂



  • warning, this file includes at least one deprecated or antiquated header. Pleasconsider using of the 32 header....

    Das ist meine Fehlermeldung, lass ich TextOut() weg, funktioniert es einwandfrei.
    Als header habe ich alle, die man bruacht. Ich habe aber keine zusätzliche dlls angegeben. (braucht ich bei WinAPI auch nie).



  • Poste mal die eingebundenen Header.
    Ev. musst Du bei manchen das ".h" streichen.



  • #include <iostream>
    #include <iostream.h>
    #include <windows.h>
    #include <winuser.h>
    #include <wingdi.h>
    


  • #pragma comment(linker, "gdi32.lib")
    

    Und dein Problem sollte gegessen sein!? 😃



  • Ich hätte da mal zwei Fragen:

    1. Warum benutzt Du die iostream.h, wenn Du sowieso schon die iostream (ohne .h) eingebunden hast? (Daher kommt auch die Warnung mit den alten Headern).

    Ich find, es ist viel leicht Benutzereingaben einzugeben und auszuwerten in der Konsole, ich fidne es zudem viel zu umstöndig erst die ganzen Eingabefelder in einem Windows-Fenster zu genieren, da verzichte ich lieber auf den "SChnickshcnack", doch dann funktionieren einige WinAPI Befehle nicht. (bsp. TextOut()

    Wozu brauchst Du TextOut, wenn Du keine Fenster hast und in der Konsole arbeitest? Dafür gibt es doch eigentlich cout.



  • @NES-Spieler
    1. weil wenn ich die iostream.h nicht einbinde, fehlermeldungen bekomme.

    2. Ich brauche TextOut ja nicht für dieses Fenster, sondern für ein anderes (vom anderen Programm)

    Leider funktionieren all' eure Tips nicht, ich kriege dieselbe Fehlermeldung. Unter einer Win32-Anwendung funktioniert der entsprechende Code, halt nur in der Konsole nicht.



  • supersass1 schrieb:

    #include <iostream>
    #include <iostream.h>
    #include <windows.h>
    #include <winuser.h>
    #include <wingdi.h>
    

    ⚠ ➡

    #include <iostream>
    #include <windows.h>
    

    Wenns damit nicht geht, liegts am Compiler. DevC++ ? ➡ 👎 , VC 2005 ? ➡ nicht korrekt eingerichtet ?



  • CodeFinder schrieb:

    Wenns damit nicht geht, liegts am Compiler. DevC++ ? , VC 2005 ? nicht korrekt eingerichtet ?

    Achwas, hat weder mit Dev-C++ noch was mit dem Compiler zu tun. Bei jeder Standardinstallation ist Dev-C++ Code::Blocks, etc. bereits korrekt vorkonfiguriert, sodass eigentlich keine Fehler auftreten dürfen (vorausgesetzt, er nimmt den Code, den Du oben gepostet hast!)



  • nee.. danke aber klappt auch nicht.

    Ich glaube dann werd ich auf ne Win32 Anwendung umsteigen müssen.



  • Welche IDE und welchen Compiler verwendest du? Poste bitte mal den ganzen Code.



  • mikey schrieb:

    CodeFinder schrieb:

    Wenns damit nicht geht, liegts am Compiler. DevC++ ? , VC 2005 ? nicht korrekt eingerichtet ?

    Achwas, hat weder mit Dev-C++ noch was mit dem Compiler zu tun. Bei jeder Standardinstallation ist Dev-C++ Code::Blocks, etc. bereits korrekt vorkonfiguriert, sodass eigentlich keine Fehler auftreten dürfen (vorausgesetzt, er nimmt den Code, den Du oben gepostet hast!)

    Die Dev C++ IDE ist definitiv veraltet und nicht mehr zeitgemäß. Mit dem 'nicht korrekt eingerichtet' meinte ich die VC2005 Express Ed.-IDE!



  • Ja, da hast du schon Recht, aber das hat deswegen auch nichts mit den Fehlermeldungen zu tun, das meinte ich. Dass von Dev-C++ abzuraten ist, da stimme ich ganz klar überein mit dir.



  • mikey schrieb:

    Ja, da hast du schon Recht, aber das hat deswegen auch nichts mit den Fehlermeldungen zu tun, das meinte ich.

    Die veraltete Datei 'iostream.h' exisitiert bei manchen Compilern/IDE's noch. Deswegen auch "deprecated or antiquated header". Deswegen konnte das schon sehr wohl etwas mit der Warnung zu tun haben. Ich wollte mit meinem Post ja von ihm erfahren welchen Compiler er hat. DevC++ ist bekannt für seine Fehler (deswegen den als erstes) und VC 2005 wird relativ oft verwendet.



  • ich versteh es einfach nicht,
    ich habe Code sowohl mit CodeBlocks als auch mit VC++6 compiliert. Beide male klappt es nicht, hier der Code:

    #include <iostream> // lass ich iostream.h weg kommen fehlermeldungen
    #include <iostream.h>
    #include <windows.h>
    
    int i;
    int a;
    int b;
    int c;
    int anzahl=1;
    
    int findwindow() //fenster finden und öffnen
    {
        HWND hWnd;
    HANDLE hproc;
    DWORD procid;
    DWORD rw = 0;
    
    unsigned adress = 0x001504BC;  //0x11A9FBE7;
    char buffer[512];
    
    hWnd = FindWindow(0,"Warcraft III");
    if(!hWnd) {
    cout << "Fenster nicht Gefunden!" << endl;
    } else {
    cout << "Fenster Gefunden!" << endl;
    }
    
    ShowWindow(hWnd, SW_MAXIMIZE);
    
        const char  szText[] = "Hallo, dies ist der Text.";
        HDC hDC;
        bool n;
    while(1) // nicht ganz fertig, nur zum testen, programm soll text anzeigen
    
    {
        hDC =
     GetWindowDC (hWnd);
     TextOut     (hDC, 10, 750, szText, sizeof(szText) - 1);
     ReleaseDC   (hWnd,hDC);
     Sleep       (10);
    }
    
    }
    
    int main()
    {
    cout << "blabla" << endl; //unwichtig
    findwindow();
    
    	return 0;
    }
    


  • Du kannst iostream.h weglassen. Stattdessen musst du am Anfang des Codes (aber nach den Includes) folgenden Codeabschnitt einsetzen:

    using namespace std;
    

    Mehr zu Namespaces findest du in jedem C++ Tutorial. Zudem musst du für die Funktion "TextOut" eine extra Library ins Projekt linken, und zwar libgdi32.a. 😉



  • Falls du Code::Blocks verwendest, hier noch eine kleine Anleitung zum Linken der Library:

    Um eine Library linken zu können, musst du erst ein leeres Projekt erstellen:
    File ➡ New ➡ Project ➡ Empty Project

    ...dann fügst du deinen verbesserten Code ein. Jetzt kannst du die Library linken, die du im Installationsverzeichnis von Code::Blocks findest, unter dem Ordner "lib"

    Project ➡ Build Options ➡ Dropdownmenü Linker settings ➡ Add

    Falls du doch Dev-C++ verwendest, findest du auf meiner Seite ein Tutorial dazu.



  • ahh cool danke..
    ich hatte ausversehen das mit dem using namespace vergessen, und ich musste tatsächlich so eine Library einlinken. Also es klappt alles. Vielen Dank.

    Liegt das am Compiler oder Allgemein, weil jemand meinte ja ich bräuchte nur die zwei Header...


Log in to reply