From 1153d29099e6d3b0f9a9bfa164fe94f948f8b948 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Tue, 20 Dec 2022 12:03:05 +0800 Subject: [PATCH] TerminalFont: improve conhost font detection (Windows) --- .../terminalfont/terminalfont_windows.c | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/detection/terminalfont/terminalfont_windows.c b/src/detection/terminalfont/terminalfont_windows.c index 590aa9339..ea41f018e 100644 --- a/src/detection/terminalfont/terminalfont_windows.c +++ b/src/detection/terminalfont/terminalfont_windows.c @@ -2,7 +2,9 @@ #include "common/io.h" #include "detection/terminalshell/terminalshell.h" #include "terminalfont.h" -#include "util/windows/registry.h" +#include "util/windows/unicode.h" + +#include static void detectMintty(const FFinstance* instance, FFTerminalFontResult* terminalFont) { @@ -28,23 +30,17 @@ static void detectConhost(const FFinstance* instance, FFTerminalFontResult* term { FF_UNUSED(instance); - //Current font of conhost doesn't seem to be detectable, we detect default font instead - - FF_HKEY_AUTO_DESTROY hKey = NULL; - if(!ffRegOpenKeyForRead(HKEY_CURRENT_USER, L"Console", &hKey, &terminalFont->error)) + CONSOLE_FONT_INFOEX cfi = { .cbSize = sizeof(cfi) }; + if(!GetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfi)) + { + ffStrbufAppendS(&terminalFont->error, "GetCurrentConsoleFontEx() failed"); return; + } - FF_STRBUF_AUTO_DESTROY fontName; - ffStrbufInit(&fontName); - if(!ffRegReadStrbuf(hKey, L"FaceName", &fontName, &terminalFont->error)) - return; - - uint32_t fontSizeNum = 0; - if(!ffRegReadUint(hKey, L"FontSize", &fontSizeNum, &terminalFont->error)) - return; + FF_STRBUF_AUTO_DESTROY fontName = ffStrbufCreateWS(cfi.FaceName); char fontSize[16]; - _ultoa((unsigned long)(fontSizeNum >> 16), fontSize, 10); + _ultoa((unsigned long)(cfi.dwFontSize.Y), fontSize, 10); ffFontInitValues(&terminalFont->font, fontName.chars, fontSize); }