如何更改控制台字体?

Posted

技术标签:

【中文标题】如何更改控制台字体?【英文标题】:How can I change console font? 【发布时间】:2011-03-14 10:14:54 【问题描述】:

我在 Windows XP 控制台中的输出 Unicode 有问题。 (Microsoft Windows XP [版本 5.1.2600]) 第一个代码是(来自http://www.siao2.com/2008/03/18/8306597.aspx)


#include 
#include 
#include 

int main(void) 
    _setmode(_fileno(stdout), _O_U16TEXT);
    wprintf(L"\x043a\x043e\x0448\x043a\x0430 \x65e5\x672c\x56fd\n");
    wprintf(L"èéøÞǽлљΣæča\n");
    wprintf(L"ぐႢ\n");
    wprintf(L"\x3050\x10a0\n");
    return 0;


我的代码页是 65001(CP_UTF8)。除了Ⴂ,每个字母看起来都不错。但Ⴂ 看起来像正方形。 控制台的默认字体“Lucida Console”没有该字母的字体。 所以,我下载了其他一些可以正确渲染Ⴂ的字体,但我无法更改(Visual Studio 2005 项目)控制台字体。

我更改了 HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe\FontName,但是当我检查 Prompt 的属性 -> 字体时,它设置为“Lucida Console”。 有什么方法可以通过 API 更改控制台字体?

下一个代码是我尝试过的。但它不起作用。帮助。

#include “stdafx.h” #include "Windows.h" #包括 使用命名空间标准; // 传统智慧是迟钝的,也就是 @#%&* 是什么 _O_U16TEXT? // http://www.siao2.com/2008/03/18/8306597.aspx int main() locale::global(locale("")); // Windows 命令提示符使用代码页 850, // 可能是为了向后兼容旧的 DOS 程序。 // Windows 命令提示符下的 Unicode(C++;.Net;Java) // http://illegalargumentexception.blogspot.com/2009/04/i18n-unicode-at-windows-command-prompt.html // 信息:SetConsoleOutputCP 仅对 Unicode 字体有效 // http://support.microsoft.com/kb/99795 // 未记录的 API:SetConsoleFont // http://cboard.cprogramming.com/windows-programming/102187-console-font-size.html typedef BOOL (WINAPI *FN_SETCONSOLEFONT)(HANDLE, DWORD); FN_SETCONSOLEFONT 设置控制台字体; HMODULE hm = GetModuleHandle(_T("KERNEL32.DLL")); SetConsoleFont = (FN_SETCONSOLEFONT) GetProcAddress(hm, "SetConsoleFont"); int fontIndex = 10; // 10 已知识别 Lucida Console(一种 Unicode 字体) BOOL bRet = SetConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), fontIndex); // http://***.com/questions/1922294/using-unicode-font-in-c-console-app //const UINT codePage = CP_UTF8; // 常量 UINT 代码页 = 1200; // 1200(utf-16 Unicode) SetConsoleOutputCP(codePage); wchar_t s[] = L"èéøÞǽлљΣæča\n"; int bufferSize = WideCharToMultiByte(codePage, 0, s, -1, NULL, 0, NULL, NULL); char* m = new char[bufferSize]; WideCharToMultiByte(codePage, 0, s, -1, m, bufferSize, NULL, NULL); // 0x00000459 "目标多字节代码页中不存在 Unicode 字符的映射。" wprintf(L"%S", m); // 它不起作用 wprintf(L"%s", s); // 它有点工作 // 在 L'Ⴂ' 字母之后,wcout 失败! wcout

PS:顺便说一句,当我在“代码标签”中放入“include ”时,带有 (fcntl.h) 的部分消失了。我怎样才能把系统包括?

【问题讨论】:

SetConsoleOutputCP(1200) 返回 false,因为不接受 1200 作为有效代码页。 【参考方案1】:

在此处通过 Google 找到这些说明:http://keznews.com/3308_Adding_fonts_to_cmd_exe

默认情况下,属性 cmd.exe 窗口允许您选择 光栅字体或 Lucida 控制台。 您可以将其他等宽字体添加到 通过注册表的列表。

在注册表中,导航到

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ Console\TrueTypeFont

请注意,Lucida Console 已经 在此键下,名称为“0”。

使用名称添加一个新的字符串值 “00”(是的,这是必需的名称) 并将数据设置为a的名称 等宽字体已安装在 您的 C:\Windows\Fonts 文件夹。在这个 例如,我添加了 Consolas 字体。它 似乎需要额外的条目 名称“000”、“0000”等。名称如 “1”和“2”不起作用。对于皮特的 清酒,为什么?

打开一个新的cmd窗口,右键 在系统菜单上,选择属性 |字体还有新加的 字体。

我这样做是因为我想要更多 我的 PowerShell 的可读字体 窗口,因为我已经花了一些 时间盯着它。

来源:ferncrk.com

我按照说明将 Consolas 设为 cmd 的默认字体。它按预期工作。

请注意,它只接受等宽字体。

【讨论】:

感谢您更改字体。但是,我找不到任何可以显示 L'Ⴂ' (x10a0) 的 unicode 固定间距字体。 Lucida Console 将其显示为 []。 我找到了一种支持格鲁吉亚语的名为 Everson Mono 的字体,但由于某种原因 cmd 默默地拒绝了它。 你可能有更多的运气把它带到 superuser.com。这不是编程问题,而是您的 Windows 配置问题。

以上是关于如何更改控制台字体?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改标签栏控制器项目名称的字体大小?

更改导航控制器中编辑按钮的字体

以编程方式更改 PowerShell 控制台字体

如何更改 UIRefreshControl 的字体和颜色

是否可以在 IntelliJ IDEA 中更改控制台字体大小

如何修改xshell 字体颜色