сделал для Vista и XP одновременно (проверял на Vista SP1) :
Код:
// Windows XP SP3; BDS 2006; 21.03.2009;
// основано на материале с http://cboard.cprogramming.com/showthread.php?p=745558
// http://msdn.microsoft.com/en-us/library/ms686200(VS.85).aspx
#include <iostream>
#include <windows.h>
using namespace std;
typedef struct _CONSOLE_FONT_INFOEX {
ULONG cbSize;
DWORD nFont;
COORD dwFontSize;
UINT FontFamily;
UINT FontWeight;
WCHAR FaceName[LF_FACESIZE];
} CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX;
typedef BOOL (WINAPI *SETCONSOLEFONT)(HANDLE, DWORD); // прототип недокументированый функции для XP
typedef BOOL (WINAPI *SETCURRENTCONSOLEFONTEX)(HANDLE,BOOL, PCONSOLE_FONT_INFOEX); // для vista
SETCURRENTCONSOLEFONTEX SetCurrentConsoleFontEx ;
SETCONSOLEFONT SetConsoleFont;
int main(int argc, char* argv[])
{
OSVERSIONINFOEX osvi;
CONSOLE_FONT_INFOEX cfon;
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
GetVersionEx((OSVERSIONINFO *) &osvi) ; // получение версии винды
HMODULE hmod = GetModuleHandleA("KERNEL32.DLL"); // функции здесь
if (osvi.dwMajorVersion<6) { // xp или ниже : для 9x не проверял.
SetConsoleFont =(SETCONSOLEFONT) GetProcAddress(hmod, "SetConsoleFont"); // берем адрес функции
if (!SetConsoleFont) {cout<<"error\n" ; exit(1);} // если ошибка
SetConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE),10); // устанавливаем 10 шрифт..
//эксперементально установил что в обычной XP это Lucida Console 14.
//хз везде это ли - покажет практика.
} else
{
SetCurrentConsoleFontEx =(SETCURRENTCONSOLEFONTEX) GetProcAddress(hmod, "SetCurrentConsoleFontEx"); // берем адрес функции
if (!SetCurrentConsoleFontEx) {cout<<"error\n" ; exit(1);} // если ошибка
ZeroMemory(&cfon, sizeof(CONSOLE_FONT_INFOEX));
cfon.cbSize=sizeof(CONSOLE_FONT_INFOEX);
//cfon.nFont=10;
cfon.FontFamily=54; // Lucida Console
if (!SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), false, &cfon)) cout<<"error";
}
SetConsoleOutputCP(1251) ; // устанавливаем кодировку вывода
cout<<"по русски :)";
cin.get();
return 0;
}
А на Windows 7 7000 не пошло.. хз может потому что бета.