[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 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
2

评分人数

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

好样的,虽然用了goto,但有模有样。前面就应该return,早点斩断。
1

评分人数

    • 0000: 感谢提醒!技术 + 1

TOP

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.         }
复制代码

TOP

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

评分人数

TOP

返回列表