Îïðåäåëèòü ñîñòîÿíèå ìîíèòîðà
Ïîñëåäíÿÿ ôóíêöèÿ, ðàññìàòðèâàåìàÿ íàìè, ñëóæèò äëÿ îïðåäåëåíà òåêóùåãî ðåæèìà âèäåîñèñòåìû.
Íà âõîäå:
|
AH
|
4Fh
|
|
AL
|
10h
|
|
BL
|
02h
|
Íà âûõîäå:
|
AL
|
4Fh - ôóíêöèÿ ïîääåðæèâàåòñÿ;
â ïðîòèâíîì ñëó÷àå ôóíêöèÿ íå ïîääåðæèâàåòñÿ
|
|
AH
|
0, â ñëó÷àå óñïåøíîãî çàâåðøåíèÿ,
1 â ñëó÷àå îøèáêè
|
|
BH
|
Òåêóùèé ðåæèì:
00h - ON (ìîíèòîð âêëþ÷åí)
01h - STANDBY (ïîãàøåí ýêðàí ìîíèòîðà)
02h - SUSPEND (îòêëþ÷åíà ñòðî÷íàÿ ðàçâåðòêà)
04h - OFF (ìîíèòîð îòêëþ÷åí)
08h - REDUSED ON (óìåíüøåíà ÿðêîñòü èçîáðàæåíèÿ)
|
Ïðîãðàììà POWER, èñõîäíûé òåêñò êîòîðîé ïðåäñòàâëåí â ëèñòèíãå 7.3, äåìîíñòðèðóåò èñïîëüçîâàíèå ôóíêöèé VBE Power Management. Ïîñëå çàïóñêà ïðîãðàììû POWER, îíà îïðåäåëÿåò âîçìîæíîñòè ñîõðàíåíèÿ ýëåêòðîýíåðãèè, äîñòóïíûå âàøåé âèäåîïîäñèñòåìå. Çàòåì, åñëè êîìïüþòåð ïîääåðæèâàåò VBE Power Management, ïðîãðàììà ãàñèò ýêðàí ìîíèòîðà. ×òîáû ïðîäîëæèòü ðàáîòó íàæìèòå ëþáóþ êëàâèøó êëàâèàòóðû êîìïüþòåðà.
Ëèñòèíã 7.3. Ôàéë POWER.CPP
#include <stdio.h>
#include <conio.h>
#include <dos.h>
// Îïèñàíèå ôóíêöèé
void main(void);
int SetPowerState( unsigned char );
int GetPowerState( unsigned char* );
int AnalyseResult(union REGS);
int PowerCapabilities( unsigned char*, unsigned char*,
unsigned char*);
#define ON 0x00
#define OFF 0x04
#define STANDBY 0x01
#define SUSPEND 0x02
#define REDUCED 0x08
//===========================================================
// Ãëàâíàÿ ôóíêöèÿ
//===========================================================
void main(void) {
int uiResult;
unsigned char ucMode, ucModes,
ucMinorVer, ucMajorVer;
// Îïðåäåëÿåì âîçìîæíîñòü óïðàâëåíèÿ ýíåðãîïîòðåáëåíèåì
uiResult =
PowerCapabilities(&ucModes, &ucMajorVer, &ucMinorVer);
printf("\n\n Copyright (C)Frolov G.V.,1995. "
"E-mail: frolov@glas.apc.org\n");
if(uiResult==0) {
printf("\ n Âåðñèÿ VBE Power Management %d.%d",
(int)ucMajorVer, (int)ucMinorVer );
printf("\n Ïîääåðæèâàþòñÿ ðåæèìû:\n"
"STANDBY - %s\n"
"SUSPEND - %s\n"
"OFF - %s\n"
"REDUCED - %s\n",
(ucModes & STANDBY)? "äà" : "íåò",
(ucModes & SUSPEND)? "äà" : "íåò",
(ucModes & OFF)? "äà" : "íåò",
(ucModes & REDUCED)? "äà" : "íåò"
);
}
else if(uiResult < 0) {
printf("\n Âîçìîæíîñòü óïðàâëåíèÿ ýíåðãîïîòðåáëåíèåì"
"íå ïîääåðæèâàåòñÿ" );
return;
}
else if(uiResult > 0) {
printf("\n Îøèáêà ïðè âûçîâå ôóíêöèè "
"VBE Power Management" );
return;
}
// Îïðåäåëÿåì òåêóùèé ðåæèì
uiResult = GetPowerState( &ucMode );
printf("\n Ôóíêöèÿ GetPowerState âîçâðàùàåò %d",uiResult);
printf("\n GetPowerState = %x", ucMode );
printf("\n Òåêóùèé ðåæèì: %s\n",
(ucMode & STANDBY) ? "STANDBY" :
(ucMode & SUSPEND) ? "SUSPEND" :
(ucMode & OFF) ? "OFF" :
(ucMode & REDUCED) ? "REDUCED" : "Íåîïðåäåëåí"
);
printf("\n\ n Ïîñëå íàæàòèÿ íà êëàâèàòóðó "
"ãàñèì èçîáðàæåíèå (ðåæèì STANDBY)"
"\n Äëÿ ïðîäîëæåíèÿ ðàáîòû íàæìèòå ëþáóþ êëàâèøó" );
// Îæèäàåì íàæàòèå íà êëàâèàòóðó
getch();
// Ãàñèì ýêðàí ìîíèòîðà
uiResult = SetPowerState(STANDBY);
printf("\n Ôóíêöèÿ SetPowerState(STANDBY) "
"âîçâðàùàåò %d", uiResult );
// Îæèäàåì íàæàòèå íà êëàâèàòóðó
getch();
// Âêëþ÷àåì ìîíèòîð
uiResult = SetPowerState( ON );
printf("\n Ôóíêöèÿ SetPowerState( ON ) "
"âîçâðàùàåò %d", uiResult );
return;
}
//===========================================================
// Ôóíêöèÿ SetPowerState
// Óñòàíàâëèâàåò ðåæèì âèäåîàäàïòåðà è ìîíèòîðà
//===========================================================
int
SetPowerState( unsigned char ucMode )
{
union REGS regs;
int iResult;
regs.h.ah = 0x4f;
regs.h.al = 0x10;
regs.h.bl = 0x01;
regs.h.bh = ucMode;
int86(0x10, ®s, ®s);
iResult = AnalyseResult(regs);
return iResult;
}
//===========================================================
// Ôóíêöèÿ GetPowerState
// Îïðåäåëÿò òåêóùèé ðåæèì âèäåîàäàïòåðà
//===========================================================
int
GetPowerState( unsigned char *ucMode )
{
union REGS regs;
int iResult;
regs.h.ah = 0x4f;
regs.h.al = 0x10;
regs.h.bl = 0x02;
int86(0x10, ®s, ®s);
*ucMode = regs.h.bh;
iResult = AnalyseResult(regs);
return iResult;
}
//===========================================================
// Ôóíêöèÿ PowerCapabilities
// Îïðåäåëÿåò âîçìîæíîñòè âèäåîïîäñèñòåìû
//===========================================================
int
PowerCapabilities( unsigned char *ucModes,
unsigned char *ucMajorVer,
unsigned char *ucMinorVer)
{
union REGS regs;
struct SREGS segregs;
int iResult;
regs.h.ah = 0x4f;
regs.h.al = 0x10;
regs.h.bl = 0x00;
segregs.es = 0x00;
regs.x.di = 0x00;
int86x(0x10, ®s, ®s, &segregs);
*ucModes = regs.h.bh;
*ucMinorVer = regs.h.bl & 0x0F; // Ìëàäøèé
*ucMajorVer = (regs.h.bl & 0xF0) >> 4; // Ñòàðøèé
iResult = AnalyseResult(regs);
return iResult;
}
//===========================================================
// Ôóíêöèÿ AnalyseResult
// Àíàëèçèðóåò ðåçóëüòàò, âîçâðàùàåìûé ôóíêöèÿìè
// Power VBE
//===========================================================
int
AnalyseResult(union REGS regs)
{
int iResult;
// Ôóíêöèÿ VBE Power Management çàâåðøèëàñü óñïåøíî
if((regs.h.al == 0x4f) && (regs.h.ah == 0))
iResult = 0;
// Ôóíêöèÿ íå ïîääåðæèâàåòñÿ
else if(regs.h.al != 0x4f)
iResult = -1;
// Îøèáêà ïðè âûïîëíåíèè ôóíêöèè
else
iResult = 1;
return iResult;
}
Ñîäåðæàíèå ðàçäåëà