Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: Кирилица в консоли
Показать сообщение отдельно

Аватара для Alan85

Забанен


Сообщения: 463
Благодарности: 91

Профиль | Цитировать


сделал для 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 не пошло.. хз может потому что бета.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:22, 21-03-2009 | #57

Название темы: Кирилица в консоли