亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有什么方法可以檢測Windows中的監視器狀態(打開還是關閉)?

有什么方法可以檢測Windows中的監視器狀態(打開還是關閉)?

叮當貓咪 2019-12-03 16:31:23
有人知道Windows(XP / Vista / 2000/2003)中是否有API可以獲?。ù蜷_或關閉)當前監視器狀態?我所有的搜索似乎都表明沒有真正的方法。該線程嘗試使用GetDevicePowerState,根據Microsoft的文檔,該設備不適用于顯示設備。在Vista中,我可以收聽GUID_MONITOR_POWER_ON,但是在手動關閉監視器后,似乎沒有事件發生。在XP中,我可以進入WM_SYSCOMMAND SC_MONITORPOWER,尋找狀態2。這僅適用于系統觸發電源關閉的情況。WMI Win32_DesktopMonitor類似乎也沒有幫助。編輯:這是對comp.os.ms-windows.programmer.win32 的討論,它表明沒有可靠的方法。還有其他想法嗎?
查看完整描述

3 回答

?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

GetDevicePowerState 有時適用于監視器。如果存在,則可以打開\\.\LCD設備。完成后立即將其關閉。


本質上,您很不走運-沒有可靠的方法來檢測顯示器的電源狀態,缺少編寫設備驅動程序以及過濾顯示驅動器鏈上下的所有電源IRP的方法。而且也不是很可靠。


查看完整回答
反對 回復 2019-12-03
?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

你不能


看起來所有連接到“電源安全模式”的顯示器電源功能都

經過搜索,我在這里找到了在SC_MONITORPOWER消息和系統值(第2個帖子)之間連接

的代碼,當我手動切換時,我使用該代碼來測試系統值是否正在更改關閉顯示器。


int main()

{

    for(;monitorOff()!=1;)

        Sleep(500);

    return 0;

}//main

而且無論我關閉顯示器多長時間,代碼都不會停止。

有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

結論:當您手動切換顯示器時,您將無法通過Windows捕獲它(如果沒有異常的驅動程序界面),因為所有Windows功能都已連接到“電源安全模式”。


查看完整回答
反對 回復 2019-12-03
  • 3 回答
  • 0 關注
  • 1869 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號