3 回答

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
GetDevicePowerState 有時(shí)適用于監(jiān)視器。如果存在,則可以打開\\.\LCD設(shè)備。完成后立即將其關(guān)閉。
本質(zhì)上,您很不走運(yùn)-沒有可靠的方法來檢測(cè)顯示器的電源狀態(tài),缺少編寫設(shè)備驅(qū)動(dòng)程序以及過濾顯示驅(qū)動(dòng)器鏈上下的所有電源IRP的方法。而且也不是很可靠。

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊
你不能
看起來所有連接到“電源安全模式”的顯示器電源功能都
經(jīng)過搜索,我在這里找到了在SC_MONITORPOWER消息和系統(tǒng)值(第2個(gè)帖子)之間連接
的代碼,當(dāng)我手動(dòng)切換時(shí),我使用該代碼來測(cè)試系統(tǒng)值是否正在更改關(guān)閉顯示器。
int main()
{
for(;monitorOff()!=1;)
Sleep(500);
return 0;
}//main
而且無論我關(guān)閉顯示器多長(zhǎng)時(shí)間,代碼都不會(huì)停止。
有monitorOff功能的代碼:
int monitorOff()
{
const GUID MonitorClassGuid =
{0x4d36e96e, 0xe325, 0x11ce,
{0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18}};
list<DevData> monitors;
ListDeviceClassData(&MonitorClassGuid, monitors);
list<DevData>::iterator it = monitors.begin(),
it_end = monitors.end();
for (; it != it_end; ++it)
{
const char *off_msg = "";
//it->PowerData.PD_PowerStateMapping
if (it->PowerData.PD_MostRecentPowerState != PowerDeviceD0)
{
return 1;
}
}//for
return 0;
}//monitorOff
結(jié)論:當(dāng)您手動(dòng)切換顯示器時(shí),您將無法通過Windows捕獲它(如果沒有異常的驅(qū)動(dòng)程序界面),因?yàn)樗蠾indows功能都已連接到“電源安全模式”。
- 3 回答
- 0 關(guān)注
- 1888 瀏覽
添加回答
舉報(bào)