本帖最后由 虫子樱桃 于 2015-12-22 09:45 编辑
参考链接如下,但是不懂C++,只有让P老大、风行者、afan等高人看看啦
http://cboard.cprogramming.com/w ... ion.html#post755545
对于显示器休眠,自动关闭显示器,可以参考官网帖子 https://www.autoitscript.com/for ... is-goinig-to-sleep/
显示器直接控制的UDF https://www.autoitscript.com/for ... -configuration-udf/
嗯,就是这样,我是可爱的搬运工
经过搜索,找到个UDF,望对你有所帮助
; #FUNCTION# ====================================================================================================================
; Name ..........: _DisplayState
; Description ...: Checks if a display is on or off.
; Syntax ........: _DisplayState()
; Parameters ....: None
; Return values..: Success - 1 = screen is on
; 0 = screen is off
; Failure - -1 and sets the @error flag to non-zero.
; Author ........: syk3s
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: @@MsdnLink@@ RegisterPowerSettingNotification
; Example .......: No
; ===============================================================================================================================
Func _DisplayState($hWndGUI = 0, $MsgID = 0, $WParam = 0, $LParam = 0)
Local Const $_GUID_MONITOR_POWER_ON = '{02731015-4510-4526-99E6-E5A17EBD1AEA}'
Local Const $_tagGUID = "ulong Data1;ushort Data2;ushort Data3;byte Data4[8]"
If IsDeclared($_iDisplayState) = 0 Then Global $_iDisplayState = -1
If $hWndGUI = 0 And $MsgID = 0 Then
Global $_iDisplayState = -1
Local Const $_WM_POWERBROADCAST = 0x0218
Local $hTemp, $tGUID, $Ret
Local $hTemp = GUICreate("Display state")
If IsHWnd($hTemp) = 0 Then
Return SetError(1, 0, -1)
EndIf
If GUIRegisterMsg($_WM_POWERBROADCAST, "_DisplayState") = 0 Then
Return SetError(2, 0, -1)
EndIf
;register for a display state broadcast
$tGUID = DllStructCreate($_tagGUID)
If @error Then
Return SetError(3, 0, -1)
EndIf
$Ret = DllCall('ole32.dll', 'uint', 'CLSIDFromString', 'wstr', $_GUID_MONITOR_POWER_ON, 'ptr', DllStructGetPtr($tGUID))
If (@error) Or ($Ret[0]) Then
Return SetError(4, 0, -1)
EndIf
$Ret = DllCall('user32.dll', 'ptr', 'RegisterPowerSettingNotification', 'hwnd', $hTemp, 'ptr', DllStructGetPtr($tGUID), 'dword', 0) ;register for the event
If (@error) Or (Not $Ret[0]) Then
Return SetError(5, 0, -1)
EndIf
DllCall('user32.dll', 'int', 'UnregisterPowerSettingNotification', 'ptr', $Ret[0]) ;unregister
GUIDelete($hTemp)
If $_iDisplayState <> 0 And $_iDisplayState <> 1 Then
Return SetError(6, 0, -1)
Else
Return $_iDisplayState
EndIf
Else
Local $stPOWERBROADCAST_SETTING = DllStructCreate($_tagGUID & ";DWORD;byte[1]", $LParam)
Local $aResult = DllCall("ole32.dll", "int", "StringFromGUID2", "struct*", DllStructGetPtr($stPOWERBROADCAST_SETTING), "wstr", "", "int", 40) ;get string GUID back
If $aResult[2] = $_GUID_MONITOR_POWER_ON Then $_iDisplayState = DllStructGetData($stPOWERBROADCAST_SETTING, 6, 1)
EndIf
EndFunc ;==>_DisplayState
|