当前位置:编程学习 > VB >>

如何实现程序运行时不屏保呢?

像爆风影音播放时屏保和电源设置都是无效的。不会关屏或屏保! --------------------编程问答-------------------- 高手们帮帮忙,谢谢! --------------------编程问答-------------------- 用Timer设置程序运行时间,程序运行就开始计时,这样屏保就不会工作。在我的程序中,这样行,当然,我的程序不止一个Timer。  --------------------编程问答-------------------- 不明白,程序运行时间是什么?interval?运行什么代码? --------------------编程问答-------------------- Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Long, ByVal fuWinIni As Long) As Long
Const SPI_SETSCREENSAVEACTIVE = 17
Const SPI_SETSCREENSAVETIMEOUT = 15
Const SPIF_SENDWININICHANGE = &H2
Const SPIF_UPDATEINIFILE = &H1
Private Sub Form_Load()
   Call DisableScreenSave
End Sub

Private Sub Form_Unload(Cancel As Integer)
   Call EnableScreenSave
End Sub

Private Sub SetScreenSaveTimeout(ByVal BySecond As Long)
   Call SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT, BySecond, 0, SPIF_UPDATEINIFILE + SPIF_SENDWININICHANGE)
End Sub

Private Sub EnableScreenSave()
   Call SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1, 0, SPIF_UPDATEINIFILE + SPIF_SENDWININICHANGE)
End Sub

Private Sub DisableScreenSave()
   Call SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, 0, SPIF_UPDATEINIFILE + SPIF_SENDWININICHANGE)
End Sub

--------------------编程问答-------------------- 来长点见识
^_^ --------------------编程问答-------------------- 暂时禁用屏保就行了啊

就不能搜搜么. --------------------编程问答-------------------- 这个屏保是失效了,但电源还是有效。
我是这样设置的,屏保(密码保护)1分钟,电源关闭监视器1分钟。
如果我在时就另这些失效,我走开了就有效。

引用 4 楼 cbm666 的回复:
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Long, ByVal fuWinIni As Long) As Long 
Const SPI_SETSCREENSAVEACTIVE = 17 
Const SPI_SETSCREENSAVETIMEOUT = 15 
Const SPIF_SENDWININICHANGE = &H2 
Const SPIF_UPDATEINIFILE = &H1 
Private Sub Form_Load() 
   Call DisableScreenSave 
End Sub…
--------------------编程问答-------------------- 搜过了,CSDN的搜索好像有问题搜禁用屏保出来的全是找屏的。

引用 6 楼 myjian 的回复:
暂时禁用屏保就行了啊 

就不能搜搜么.
--------------------编程问答-------------------- 学习. --------------------编程问答-------------------- 我用Timer设置程序运行时间,所有的屏保和电源设置全都失效。最初,我以为是一种巧合,结果换一台计算机也是这样。其实,我也没有想通,按理说不合常理,4楼的才对,哦,还做了旋转的图标动画。但,就是这样,行了! --------------------编程问答-------------------- 禁用电源管理和系统的省电策落

用SystemParametersInfo这个API来实现对屏幕保护和电源管理的禁用:
BOOL SystemParametersInfo(
  UINT uiAction,  // system parameter to retrieve or set
  UINT uiParam,   // depends on action to be taken
  PVOID pvParam,  // depends on action to be taken
  UINT fWinIni    // user profile update option
);

以下是禁用屏幕保护的代码:
void DisableScrSaver()
{
BOOL bScrActive; 
SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0, &bScrActive, 0);
if (bScrActive)
{
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, FALSE, NULL, 0);
}
}
以下是启用屏幕保护的代码:
void CNetRGCltDlg::EnableScrSaver()
{
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, TRUE, NULL, 0);
}

由于禁用电源保护不可以在Win95下被Win32应用程序使用,所以要事先判断当前操作系统是不是Win95,这里假设已经用函数BOOL IsWin95()实现。
以下是禁用电源保护的代码:
void DisablePmmSaver()
{
//
// 由于电源管理的特殊性,不能直接用SPI_SETLOWPOWERACTIVE命令字实现,而是要设置延时。
//

SystemParametersInfo(SPI_GETLOWPOWERTIMEOUT, 0, &m_nLowpowerTimeout, 0);
SystemParametersInfo(SPI_GETPOWEROFFTIMEOUT, 0, &m_nPoweroffTimeout, 0);
SystemParametersInfo(SPI_SETLOWPOWERTIMEOUT, 0, NULL, 0);
SystemParametersInfo(SPI_SETPOWEROFFTIMEOUT, 0, NULL, 0);
}

以下是启用电源保护的代码
void EnablePmmSaver()
{
SystemParametersInfo(SPI_SETLOWPOWERTIMEOUT, m_nLowpowerTimeout, NULL, 0);
SystemParametersInfo(SPI_SETPOWEROFFTIMEOUT, m_nPoweroffTimeout, NULL, 0);

m_nLowpowerTimeout = 0;
m_nPoweroffTimeout = 0;
}

说明:
1 m_nLowpowerTimeout和m_nPoweroffTimeout是用来存储原先延时的变量,当恢复电源保护时要把电源保护延时设置回原来的值;
2 上面的代码仅仅为了说明调用序列,实际应用时还要加上相当多的错误处理代码,这里忽略
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,