如何在不使用C中的system()的情况下清除win32 cmd控制台窗口?

已经四处寻找最好的方式来执行清理cmd.exe控制台窗口只是)简单的任务,并发现简单地使用系统('cls'); 是错误的 (在“对于每一个复杂的问题都有一个清晰,简单和错误的答案” ),并发现只是复制和粘贴到一个函数的win32代码导致编译错误,然后我发现以下function ,但不知道我必须做什么来调用它可以使用一个variables,而不会喷出错误消息:

#include <windows.h> #include <stdlib.h> #include <stdio.h> /* Standard error macro for reporting API errors */ #define PERR(bSuccess, api){ if(!(bSuccess)) printf("%s:Error %d from %s \ on line %d\n", __FILE__, GetLastError(), api, __LINE__); } HWND GetConsoleHwnd(void) { #define MY_BUFSIZE 1024 // Buffer size for console window titles. HWND hwndFound; // This is what is returned to the caller. char pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated WindowTitle. char pszOldWindowTitle[MY_BUFSIZE]; // Contains original WindowTitle. // Fetch current window title. GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE); // Format a "unique" NewWindowTitle. wsprintf(pszNewWindowTitle,"%d/%d", GetTickCount(), GetCurrentProcessId()); // Change current window title. SetConsoleTitle(pszNewWindowTitle); // Ensure window title has been updated. Sleep(40); // Look for NewWindowTitle. hwndFound=FindWindow(NULL, pszNewWindowTitle); // Restore original window title. SetConsoleTitle(pszOldWindowTitle); return(hwndFound); } void cls( HANDLE hConsole ) { COORD coordScreen = { 0, 0 }; /* here's where we'll home the cursor */ BOOL bSuccess; DWORD cCharsWritten; CONSOLE_SCREEN_BUFFER_INFO csbi; /* to get buffer info */ DWORD dwConSize; /* number of character cells in the current buffer */ /* get the number of character cells in the current buffer */ bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi ); PERR( bSuccess, "GetConsoleScreenBufferInfo" ); dwConSize = csbi.dwSize.X * csbi.dwSize.Y; /* fill the entire screen with blanks */ bSuccess = FillConsoleOutputCharacter( hConsole, (TCHAR) ' ', dwConSize, coordScreen, &cCharsWritten ); PERR( bSuccess, "FillConsoleOutputCharacter" ); /* get the current text attribute */ bSuccess = GetConsoleScreenBufferInfo( hConsole, &csbi ); PERR( bSuccess, "ConsoleScreenBufferInfo" ); /* now set the buffer's attributes accordingly */ bSuccess = FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten ); PERR( bSuccess, "FillConsoleOutputAttribute" ); /* put the cursor at (0, 0) */ bSuccess = SetConsoleCursorPosition( hConsole, coordScreen ); PERR( bSuccess, "SetConsoleCursorPosition" ); return; } int main (void) { // why does this fail? HWND cons = GetConsoleHwnd(); cls(cons); return 0; } 

我的问题是这样的:我如何设置一个控制台句柄传递给`cls`函数?

编辑 :请注意,我不希望简单地通过调用system调用/调用clsclear命令(s)在这个问题的大多数答案build议。

Solutions Collecting From Web of "如何在不使用C中的system()的情况下清除win32 cmd控制台窗口?"