alomoi 发表于 2012-12-2 13:09:11

[已解决]脚本运行期间系统不进入屏保、休眠状态。

本帖最后由 alomoi 于 2012-12-2 19:28 编辑

最近在折腾一个小工具,需要在运行期间禁止系统进入屏保和休眠状态。
就是类似于视频播放器上“不进入屏保”的那种功能。

自己考虑的半天只想到通过定期模拟鼠标或键盘操作来实现。
但是这种办法有点笨了...求教各位前辈,除此之外还有没有其他方法实现这个功能?

afan 发表于 2012-12-2 13:34:25

_WinAPI_SetThreadExecutionState

alomoi 发表于 2012-12-2 13:44:02

_WinAPI_SetThreadExecutionState
afan 发表于 2012-12-2 13:34 http://www.autoitx.com/images/common/back.gif

感谢A大,用api还真没想到orz...
但是有两个问题:
1、帮助里说这东西对屏保无效。
2、那个纯英文的帮助里只字未提$iFlags里五个选项的效果和用法,而且网上找不到相关资料orz。

annybaby 发表于 2012-12-2 13:55:34

回复 3# alomoi

不是对屏保无效,而是可以通过它来改变空闲时间来达到不运行屏保和自动休眠,但不能阻止用户自己运行屏保和休眠~~

afan 发表于 2012-12-2 14:57:54

_WinAPI_SetThreadExecutionState 确实不能禁止屏保。
不过可以换一种方式,试试我的代码Global Const $WM_SYSCOMMAND = 0x0112, $SCREENMSG = 0xF140

GUICreate('本Gui程序禁用屏保 @afan', 300, 100)
GUIRegisterMsg($WM_SYSCOMMAND, "_WM_SYSCOMMAND")
GUICtrlCreateLabel('注:本窗体置于前台时将禁用屏保', 10, 20, 200, 15)
GUISetState()

While GUIGetMsg() <> -3
Wend

Func _WM_SYSCOMMAND($hWnd, $Msg, $wParam, $lParam)
        If $wParam = $SCREENMSG Then Return 1
EndFunc   ;==>MY_WM_COMMAND

annybaby 发表于 2012-12-2 16:07:56

回复 5# afan


_WinAPI_SystemParametersInfo(0x0011,False) ;False 取消,True 打开屏保
Func _WinAPI_SystemParametersInfo($iAction, $iParam = 0, $vParam = 0, $iWinIni = 0)
        Local $aResult = DllCall("user32.dll", "bool", "SystemParametersInfoW", "uint", $iAction, "uint", $iParam, "ptr", $vParam, "uint", $iWinIni)
        If @error Then Return SetError(@error, @extended, False)
        Return $aResult
EndFunc   ;==>_WinAPI_SystemParametersInfo
   

禁用屏保,XP SP3实测有效,不过休眠那个~~XP/03不好像不支持~~

afan 发表于 2012-12-2 17:16:38

回复 6# annybaby


    不错,禁用和启用均有效。不过,最好应该先获取状态,以便程序退出时还原。

alomoi 发表于 2012-12-2 19:28:08

感谢两位指点。
代码对我来说有点复杂,先拖去慢慢消化下 m(_ _)m

f313685162 发表于 2013-3-17 19:33:08

回复 7# afan


    获取要怎么实现呢,我看了半天,也试了好多次,就是不知道参数怎么传递的。

leibin0121 发表于 2013-6-9 10:11:59

感谢分享,学习学习

wszhov 发表于 2013-11-6 21:47:48

好吧,我先在一头 雾水,怎么用winapi啊,英文差了伤不起
页: [1]
查看完整版本: [已解决]脚本运行期间系统不进入屏保、休眠状态。