Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 сентября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Программисты долго мучаются с кодом прогаммы, изучают С++, WinAPI функции, MSDN. Потом пишут банальную систему защиты или навешивают банальный протектор, а крэкеры и реверсеры справляются с такой защитой за 5 минут. В итоге, продажи программы почти нулевые. Чтобы такого не допустить, тут самому надо немного поднабрать опыта отладки, реверсинга, тот же отладчик Ollydbg изучить или дизассемблер IDA Pro. Но где искать по крохам эти знания? Нет, конечно можно годами "методом тыка" разбираться, но куда быстрее видеокурс специальный посмотреть. Вот тут он есть: ссылка. Автор курса с большим опытом и объясняет понятно, я из этого курса много узнал про то как работает компьютер, процессор, про инструменты специальные и как с ними работать. Мои коллеги программисты на работе ничего такого и не знают, теперь я им нос утру.

Как изменить размер шрифта в 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;
 }






<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS