Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

Как изменить размер шрифта в Windows NT и перезагрузить её.

div.main {margin-left: 20pt; margin-right: 20pt} Как изменить размер шрифта в Windows NT и перезагрузить её.

Автор: Arnon Mathias.

Компилятор: Visual C++ 6

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

Итак, прольём немного света на недокументированные возможности.

Изменение больших шрифтов на маленькие и обратно в Windows NT делается при помощи функции SetupChangeFontSize в SysSetup.dll:

DWORD WINAPI SetupChangeFontSize( HANDLE HWindow, LPCWSTR lpszFontSize)

Возвращаемые значения следующие:

ERROR_SUCCESS ( Value == 0 ) Операция завершена успешно. ERROR_CANCELLED ( Value == 1223 ) Операция была прервана пользователем. #include "windows.h" /////////////////////////////////////////////////////////////// /// Arnon Mathias 13-Mar-2002 /////////////////////////////////////////////////////////////// DWORD _MyExitWindows(UINT ExitFlags) { /// Из документации MSDN по функции ExitWindowsEx HANDLE hToken; TOKEN_PRIVILEGES tkp; DWORD dwRetVal; /// Получаем маркер (token) для этого процесса. if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { ::MessageBox (NULL,"Open Process Token","Exit Windows",MB_OK); return (GetLastError()); } /// Получаем LUID для привелегии выключения (shutdown). LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; // устанавливаем привелегию "один" tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; /// Получаем привелегию выключения (shutdown) для этого процесса. AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); /// Не получилось проверить возвращённое значение AdjustTokenPrivileges. if ( (dwRetVal = GetLastError()) != ERROR_SUCCESS) { ::MessageBox (NULL,"AdjustTokenPrivileges","Exit Windows",MB_OK); return dwRetVal; } /// Выключаем или перезагружаем в соответствие с ExitFlags ::MessageBox ( NULL, "Restarting Windows", "System settings has changed", MB_OK); if (!ExitWindowsEx(ExitFlags, 0)) { ::MessageBox (NULL, "Error While trying to exit", "Exit Windows", MB_OK); return (GetLastError()); } return ERROR_SUCCESS; } DWORD MyRestartWindows() { return _MyExitWindows(EWX_LOGOFF|EWX_REBOOT); } DWORD _MyChangeFontSize(unsigned short* lpszFontSize) { // строка размера шрифта должна быть в формате unicode HMODULE hModule; hModule = LoadLibrary("syssetup.dll"); if (hModule == NULL) { return (GetLastError()); } typedef DWORD (WINAPI* MYPROC) (HANDLE,LPWSTR); MYPROC ProcAdd; ProcAdd = (MYPROC) GetProcAddress(hModule, "SetupChangeFontSize"); if (ProcAdd == NULL) { return (GetLastError()); } ////////////////////////////////////////////////////////////////// /// Изменение размера шрифта: /// SetupChangeFontSize имеет на входе два параметра: /// Дескриптор (Handle) вызывающего окна (я использую NULL) /// строка размера шрифта в формате unicode: /// L"120" для больших (Large) шрифтов /// L"96" для маленьких (Small) шрифтов /// SetupChangeFontSize вернёт 0 если операция прошла успешно. DWORD dwRetVal; dwRetVal = (ProcAdd) (NULL,lpszFontSize); if (dwRetVal != ERROR_SUCCESS) { return dwRetVal; } //////////////////////////////////////////////////////////////// if ( !(FreeLibrary(hModule)) ) { return (GetLastError()); } return ERROR_SUCCESS; } void Change2LargeFonts() { DWORD dwRetVal = _MyChangeFontSize(L"120"); if (dwRetVal == ERROR_SUCCESS) { MyRestartWindows(); } } void Change2SmallFonts() { DWORD dwRetVal = _MyChangeFontSize(L"96"); if (dwRetVal == ERROR_SUCCESS) { MyRestartWindows(); } } int main(int argc, char* argv[]) { // Change2LargeFonts(); Change2SmallFonts(); return 0; }






  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте