Liste verfügbarer Schriftarten für die Konsole



  • Hallo,

    ist es möglich und wie kann ich mir eine Liste der verfügbaren Schriftarten für die Windows Konsole erstellen?
    Danke.


  • |  Mod

    Was möchtest Du bitte?
    Es gibt keine unterschiedlichen Schriftarten für die Console. Du kannst nur Zeichen ausgeben und Farben definieren...

    Was möchtest Du tun?



  • Ich setze mit

    void Console::setFont( const std::string& name )
    {
        const std::wstring widestr = std::wstring( name.begin(), name.end() );
        const wchar_t* widecstr = widestr.c_str();
        CONSOLE_FONT_INFOEX cfi;
        cfi.cbSize = sizeof cfi;
        cfi.nFont = 0;
        cfi.dwFontSize.X = fontSizeX();
        cfi.dwFontSize.Y = fontSizeY();
        cfi.FontFamily = FF_DONTCARE;
        cfi.FontWeight = FW_NORMAL;
        std::wcscpy( cfi.FaceName, widecstr );
        SetCurrentConsoleFontEx( wHnd, true, &cfi);
    }
    
    void Console::setFontSize( const int width, const int height )
    {
        CONSOLE_FONT_INFOEX cfi = getCFI();
        cfi.dwFontSize.X = width;
        cfi.dwFontSize.Y = height;
        SetCurrentConsoleFontEx( wHnd, true, &cfi );
    }
    

    Schriftart und -größe der Konsole. Bei den Eigenschaften der Konsole sehe ich unter Schriftart jene, welche ich oben eintragen könnte. Dies ist ziemlich umständlich und ich wollte fragen, ob ich mir diese Liste der angezeigten Schriftarten in zB einer Textdatei ausgeben kann.



  • Prinzipiell geht das über EnumFontFamiliesEx, wobei bei der Konsole natürlich nur Nichtproportionalschriftarten in Frage kommen.
    Du kannst ja mal schauen, was du auf deinem System hier bekommst:

    int CALLBACK EnumFontCB(ENUMLOGFONTEX* pelf, NEWTEXTMETRICEX* /*pntm*/, int fontType, LPARAM lParam)
    {
    //	if(fontType & RASTER_FONTTYPE)
    //		return 1;
    	if(pelf->elfLogFont.lfCharSet!=DEFAULT_CHARSET && pelf->elfLogFont.lfCharSet!=ANSI_CHARSET)
    		return 1;
    	if(pelf->elfLogFont.lfPitchAndFamily & FIXED_PITCH)
    	{
    		std::cout << pelf->elfLogFont.lfFaceName << '\n';
    	}
    	return 1;
    }
    
    int main(int argc, char* argv[])
    {
    	LOGFONT lf={ };
    	lf.lfCharSet=DEFAULT_CHARSET;
    	HDC hdc=GetDC(GetDesktopWindow());
    	::EnumFontFamiliesEx(hdc, &lf,(FONTENUMPROC) EnumFontCB, false, 0);
    	ReleaseDC(GetDesktopWindow(), hdc);
    }
    

    Edit: Noch einmal bearbeitet. Du solltest allerdings probieren, den Cast wegzubekommen - ich meine mich zu erinnern, dass das an dem neuen Callback (mit ENUMLOGFONTEX* und NEWTEXTMETRICEX*) liegt. Das ist aber schon zu lange her und ich habe es mir jetzt auch nicht noch einmal angeschaut.



  • Vielen Dank. Das schaue ich mir an.



  • Zwar gibt bei mir eine undefined reference to `__imp_EnumFontFamiliesExA' aber ich habe ja jetzt mit EnumFontFamiliesEx ein Stichwort zum suchen.



  • Mir scheint #include<winsock2.h>und -lwsock32 / -lws2_32 zu fehlen.

    Letzteres scheint ein Linker-setting zu sein. Ich habe aber keine Ahnung, wie ich das unter CodeBlocks und gcc einbinden kann?



  • PROJECT --> BUILD OPTIONS --> LINKER SETTINGS



  • Schon klar. Es kommt aber cannot find -l-lws2_32. Und keine Ahnung, was es mit dem ersten -lauf sich hat.

    Sorry, natürlich bei Other Linker Options. Wars aber nicht. Bekomme immer noch die undefined reference. Ich finde die WinApi-Syntax etwas anstrengend, weshalb ich jetzt gar nicht richtig weiß, wie ich mit der Fehlermeldung umgehen soll.



  • @lemon03 Wieso winsock? Du brauchst den Header <wingdi.h> (wahrscheinlich schon durch windows.h eingebunden) und die Dll gdi32.dll. Bei MinGW müsstest du also so etwas wie libgdi32.a bei den Linkereinstellungen hinzufügen (oder einfach mal in dem entsprechenden Verzeichnis suchen - ich kann es hier nicht).



  • Bei meiner Suche nach der Fehlermeldung gab es unter anderem Verweise auf diese.

    Danke für die Richtigstellung. Kann nur jetzt erst später antworten.



  • Also die Daten unter "Requirements" bei EnumFontFamiliesExA sind doch eindeutig.



  • Stimmt. Ich hätte mir mehr Zeit beim Lesen gönnen sollen. Ich verspüre immer einen inneren Zwang, sofort auf einen Beitrag antworten zu müssen. Sollte aber lieber erst etwas gründlicher recherchieren.



  • Schick 🙂

    Fixedsys
    Courier
    Consolas
    Courier New
    Lucida Console
    MS Gothic
    @MS Gothic
    NSimSun
    @NSimSun
    SimSun-ExtB
    @SimSun-ExtB
    Source Code Pro Black
    DejaVu Sans Mono
    Source Code Pro
    Source Code Pro ExtraLight
    Source Code Pro Light
    Source Code Pro Medium
    Source Code Pro Semibold
    FigurineCB LetterSP
    Liberation Mono
    Noto Mono
    
    Process returned 0 (0x0)   execution time : 0.031 s
    Press any key to continue.
    

    Stichprobenartig gehen die auch. Morgen lasse ich die Liste durchlaufen.

    Vielen Dank!