Урок 5 Некоторые функции WinApi
WinApi(Windows API) -это довольно внушительный набор системных функций, которые использует Windows. Например диалоги открытия папки, директории и т.д.Программы, созданные на WinApi имеют малый вес, так как в них не надо создавать отдельные компоненты и многие функции, они берутся из готовых системных.
Сегодня мы будем творить беспредел и узнаем как программно воздействовать на
аппаратную часть компа.
------------------------------------------------------
// следующий код выключит монитор
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND,
SC_MONITORPOWER, 2);
Программное включение монитора
// следующий код включит монитор
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND,
SC_MONITORPOWER, -1);
----------------------------------------------------
// Следующий код отобразит на экране диалоговое
окно свойств дисплея
ShellExecute(NULL, "", "Desk.cpl",
"", "", SW_SHOWNORMAL);
-----------------------------------------------------
// для получения разрешения экрана напишите следующий
код:
HDC hDCScreen = GetDC(NULL);
int Horres = GetDeviceCaps(hDCScreen, HORZRES);
int Vertres = GetDeviceCaps(hDCScreen, VERTRES);
ReleaseDC(NULL, hDCScreen);
// в Horres содержится разрешение экрана по горизонтали,
// в Vertres содержится разрешение экрана по вертикали.
для того чтобы допустим отобразить разрешение по горизонтали в label- надо
выполнить простое преобразование:
Label1->Caption=IntToStr(Horres);
--------------------------------------------------------
// для изменения параметров экрана используйте
следующий код
DEVMODE DM;
DM.dmSize = sizeof(DEVMODE);
DM.dmBitsPerPel = 8; // глубина цвета, бит на пиксель
DM.dmPelsWidth = 1024; // разрешение по горизонтали
DM.dmPelsHeight = 768; // разрешение по вертикали
DM.dmFields = DM_BITSPERPEL +
DM_PELSWIDTH +
DM_PELSHEIGHT +
DM_DISPLAYFREQUENCY;
DM.dmDisplayFrequency = 100; // частота обновления экрана
ChangeDisplaySettings(&DM, 0);
Если код не срботал -значит у вас монитор либо хуёвый либо жк - где 100 герц
может и не быть, тогда просто поменяйте частоту.
----------------------------------------------------------
Изменение картинки на рабочем столе
// для изменения картинки на рабочем столе используйте следующий код
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "wallpaper.bmp", SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
// где wallpaper.bmp - имя вашего файла с картинкой
Изменение картинки на рабочем столе
(вариант 2)
Первый вариант в C++Builder 5 вызывает ругань BoundsChecker'a, хотя и работает.
// Нижеприведенный вариант никакой ругани не вызывает, но почему-то работает
не на всех машинах.
// для изменения картинки на рабочем столе
используйте следующий код
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "wallpaper.bmp", SPIF_UPDATEINIFILE);
// где wallpaper.bmp - имя вашего файла с картинкой
------------------------------------------------------------
// чтобы программно закрыть привод CD-ROM,
подключите ПОСЛЕ vcl.h заголовочный файл mmsystem.h
// и вызовите функцию mciSendString:
void __fastcall TForm1::Button1Click(TObject
*Sender)
{
mciSendString("Set cdaudio door closed wait", NULL, 0, Handle);
}
// чтобы программно открыть привод CD-ROM,
подключите ПОСЛЕ vcl.h заголовочный файл mmsystem.h
// и вызовите функцию mciSendString:
void __fastcall TForm1::Button1Click(TObject
*Sender)
{
mciSendString("Set cdaudio door open wait", NULL, 0, Handle);
}
--------------------------------------------------------
Как узнать папку Windows?
// для получения папки Windows напишите следующий код:
char WindowsDirectory[MAX_PATH];
GetWindowsDirectory(WindowsDirectory, MAX_PATH);
// в WindowsDirectory содержится папка Windows
Как узнать системную папку Windows?
// для получения системной папки Windows напишите следующий код:
char SystemDirectory[MAX_PATH];
GetSystemDirectory(SystemDirectory, MAX_PATH);
// в SystemDirectory содержится системная папка Windows
Если есть вопросы по этому материалу или вопросы в принципе, пишите на мыло,
ответы постараюсь выложить в последующих уроках.
Author of article - MA F*CKA CREW 2005
www.builderhelper.3dn.ru
builder.helper@rambler.ru