Board logo

标题: [其他] FontSize命令行字体设置工具 [打印本页]

作者: 0000    时间: 2018-11-17 21:14     标题: FontSize命令行字体设置工具

FontSize是一个命令行字体设置工具,无需修改注册表,减少杀软报毒率
链接: https://pan.baidu.com/s/1K0vC3YQE3Xyj4NUJYptdRw 提取码: e6s9

制作原因:Cfont不能在新版本控制台下使用(巨坑)

注意:旧版控制台用户 请使用 chcp 437 修改代码页 以获得最佳的使用体验!


例如:
  1. chcp 437
  2. FontSize 8 8
复制代码
源码开放是必须的(实在太弱了。。。)
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <windows.h>
  4. // #ref: https://docs.microsoft.com/en-us/windows/console/setcurrentconsolefontex
  5. typedef struct _CONSOLE_FONT_INFOEX
  6. {
  7.         ULONG        cbSize;
  8.         DWORD        nFont;
  9.         COORD        dwFontSize;
  10.         UINT        FontFamily;
  11.         UINT        FontWeight;
  12.         WCHAR        FaceName[LF_FACESIZE];
  13. } CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX;
  14. BOOL WINAPI SetCurrentConsoleFontEx
  15.         (
  16.                 HANDLE                        hConsoleOutput,
  17.                 BOOL                        bMaximumWindow,
  18.                 PCONSOLE_FONT_INFOEX        lpConsoleCurrentFontEx
  19.         );
  20. // #ref: https://blog.csdn.net/hilavergil/article/details/78449291
  21. WCHAR *charToWCHAR(char *s)
  22. {
  23.         int        w_nlen = MultiByteToWideChar(CP_ACP, 0, s, -1, NULL, 0);
  24.         WCHAR        *ret = (WCHAR *) malloc(sizeof(WCHAR) * w_nlen);
  25.         memset(ret, 0, sizeof(ret));
  26.         MultiByteToWideChar(CP_ACP, 0, s, -1, ret, w_nlen);
  27.         return ret;
  28. }
  29. int main(int argc, char *argv[])
  30. {
  31.         CONSOLE_FONT_INFOEX        cfi;
  32.         HANDLE                        soh;
  33.         int                        wid, hei;
  34.         WCHAR                        *fac = L"Terminal";
  35.         if(argc <= 2 || argc > 4) goto help;
  36.         wid = atoi(argv[1]), hei = atoi(argv[2]);
  37.         if(wid <= 0 || hei <= 0) goto help;
  38.         if(argc == 4) fac = charToWCHAR(argv[3]);
  39.         memset(&cfi, 0, sizeof cfi);
  40.         cfi.cbSize = sizeof cfi;
  41.         cfi.dwFontSize.X = wid;
  42.         cfi.dwFontSize.Y = hei;
  43.         if(fac != NULL) wcscpy(cfi.FaceName, fac);
  44.         soh = GetStdHandle(STD_OUTPUT_HANDLE);
  45.         if(!SetCurrentConsoleFontEx(soh, FALSE, &cfi))
  46.         {
  47.                 fprintf(stderr, "Failed to set console font.\n");
  48.                 return 1;
  49.         }
  50.         else
  51.                 return 0;
  52. help:
  53.         printf("Usage: FontSize <Width> <Height> [FontName(default:Terminal)]\n");
  54.         printf("用法: FontSize <宽度> <高度> [字体名称(默认字体:Terminal)]\n");
  55.         return 0;
  56. }
复制代码
如果无法下载附件,github链接
https://github.com/gtr-0000/FontSize
作者: happy886rr    时间: 2018-11-17 22:19

本帖最后由 happy886rr 于 2018-11-17 22:21 编辑

好样的,虽然用了goto,但有模有样。前面就应该return,早点斩断。
作者: 0000    时间: 2018-11-17 22:51

40,43行的两个if不好合并
主要是不敢这样写
  1.         if(argc <= 2 || argc > 4 || (wid = atoi(argv[1])) <= 0 || (hei = atoi(argv[2])) <= 0){
  2.                 printf(
  3.                         "Usage: FontSize <Width> <Height> [FontName(default:Terminal)]\n"
  4.                         "用法: FontSize <宽度> <高度> [字体名称(默认字体:Terminal)]\n"
  5.                 );
  6.                 return 0;
  7.         }
复制代码

作者: happy886rr    时间: 2018-11-18 20:37

回复 3# 0000
逻辑要精练
  1. if(
  2.     (argc != 3 && argc != 4)     ||
  3.     argv[1][0] == '-'            ||
  4.     argv[2][0] == '-'
  5. ){
  6.                 printf("帮助说明");
  7.                 exit(1);
  8. }
复制代码





欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2