SetConsoleFont

Тема в разделе "WASM.BEGINNERS", создана пользователем Semiono, 26 окт 2010.

  1. Semiono

    Semiono New Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    752
    Как работает эта функция?
    invoke SetConsoleFont,[@si.hStdOutput],10
    Помоему всё зависит от Font Family, а как на это повлиять в XP ? :dntknw:
     
  2. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Функция SetConsoleFont в MSDN почему-то не документирована.
    Может лучше через пару GetCurrentConsoleFontEx/SetCurrentConsoleFontEx шрифты устанавливать.
    GetCurrentConsoleFontEx нужна только если не знаешь чем структуры заполнять.
     
  3. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Отмечу, что SetCurrentConsoleFontEx доступна начиная с Windows Vista.
     
  4. Semiono

    Semiono New Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    752
    Да, это недокументированная функа, а SetCurrentConsoleFontEx в XP не доступна.

    Чтоб я моск не сломал от си, скажите мне что здесь происходит? -
    http://cboard.cprogramming.com/windows-programming/102187-console-font-size.html#post745508
    Код (Text):
    1.     for (DWORD n = 0; n < num_fonts; ++n)
    2.     {
    3.         fonts[n].dim = GetConsoleFontSize(hOut, fonts[n].index);
    4.  
    5.         if (fonts[n].dim.X == 6 &&
    6.             fonts[n].dim.Y == 8)
    Зачем надо узнавать установленный шрифт? Мне нужно установить (Lucida Console 18), зачем надо знать какой был?
    Обычно дефолтом идёт растровый шрифт, правда в деталях я не разбираюсь.

    Я еле добился установки размеров экрана консоли програмно, но теперь если будет случайный шрифт в реестре, то всё на смарку пойдёт.
     
  5. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Semiono
    Не используйте SetConsoleFont. Просто забудьте. Недокументированная - вот и не надо. Тут надо еще с реестром плотно работать, а в какое место смотреть, тоже никто не знает - не документировано.

    А зачем вызывается GetConsoleFontSize - потому что автору нужен консольный шрифт 6*8. Номера (используемые в SetConsoleFont) в разных системах и даже с одинаковой версией ОС означают разные шрифты. Собственно, он и ищет тот, который ему нужен. А уж Люциду, да еще и 18, вы никогда не получите таким способом.

    И есть у меня сму-утное подозрение, что (у вас по крайней мере, с Люцидой) все это только для того, чтобы отображать русские буквы в консоли, не используя CharToOEM - OEMToChar :))) ну так их надо использовать, и не трахаться с неведомой фигней.
     
  6. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Вместо CharToOEM - OEMToChar можно макросы использовать, у меня на masm`e есть и хорошо работает. Или все строки расположить в отдельном инклуде и редактировать его например asmedit`oм.
     
  7. Semiono

    Semiono New Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    752
    Нет, я не люблю русификацию, меня это всегда мало волнует! Хотя я видел именно в темах с русификацией об этом болтали про SetConsoleFont. Я просто настроил себе большую консоль
    с нормальным шрифтом, чтоб удобно было. Теперь хочу зделать это универсальным для других компов,
    экраны ведь могут иметь разное разрешение. Lucida18 у меня для 1152x864 на мой взгляд смотриться хорошо.
    То есть в примере был выбор растрового шрифта, ясно, я так и думал что нужно что-то
    чтоб Font FAMILY установить, чтоб лусида была.
     
  8. Semiono

    Semiono New Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    752
    HKEY_CURRENT_USER\Console - вот. Но консольное приложение как я понимаю, сначала читает реестр, в случае если нет настроек устанавливает зашитые в cmd.exe настройки дефолт, и если в этом прилжении задать настройки реестра, то лишь при повторном запуске они сработают.

    Я зделал два модуля один запускает конвеером другой и первый при этом просто пишет в реестр,
    и передаёт коммандную строку во второй модуль, хотя это всё дурь, не люблю сложно когда. ))