原文链接:https://www.cnblogs.com/jqdy/p/15078827.html
编写服务程序时,仅仅在安装服务过程中需要在显示器上输出简单的提示信息,其他部分并不需要显示器的输出操作。如果使用printf系列函数会占用一定的空间。
使用 API 函数做了一个简单的输出函数:
1 // ANSI 编码 2 VOID ApiPrintfA(INT count, ...) 3 { 4 static HANDLE hConsoleOutput = NULL; 5 va_list args; 6 PSTR arg = NULL; 7 SIZE_T cchStr; 8 9 // 获取标准输出句柄 10 11 if (NULL == hConsoleOutput) 12 { 13 hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); 14 } 15 16 va_start(args, count); 17 18 do{ 19 arg = va_arg(args, PSTR); 20 StringCchLengthA(arg, 1024, &cchStr); 21 WriteConsoleA( 22 hConsoleOutput, 23 arg, 24 (DWORD)cchStr, 25 NULL, 26 NULL); 27 } while (--count); // count = 0 时为假,跳出循环 28 29 va_end(args); 30 } 31 32 // UNICODE 编码 33 VOID ApiPrintfW(INT count, ...) 34 { 35 static HANDLE hConsoleOutput = NULL; 36 va_list args; 37 PWSTR arg = NULL; 38 SIZE_T cchStr; 39 40 // 获取标准输出句柄 41 42 if (NULL == hConsoleOutput) 43 { 44 hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); 45 } 46 47 va_start(args, count); 48 49 do { 50 arg = va_arg(args, PWSTR); 51 StringCchLengthW(arg, 1024, &cchStr); 52 WriteConsoleW( 53 hConsoleOutput, 54 arg, 55 (DWORD)cchStr, 56 NULL, 57 NULL); 58 } while (--count); // count = 0 时为假,跳出循环 59 60 va_end(args); 61 }