取消屏保

hrex 2008-10-22 09:08:10
当程序启动之后,有些状态的情况下停止屏保运行,在空闲的状态下让屏保运行,当用户没有设置密码保护的情况,程序能够停止屏保;而在密保设置了之后,屏保却不能停止(登录框弹出了),发送mouse_event或keybd_event都不行,只有当用户动鼠标之后,屏保程序才会停止,真不知道mouse_event和动鼠标单击的消息有什么区别?

请高手指点啊,想了好久没想出来!!!!
...全文
229 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hrex 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 unsigned 的回复:]
引用 7 楼 hrex 的回复:
引用 5 楼 unsigned 的回复:
比较简单的就是修改注册表

INIFile codeHKEY_USERS\.DEFAULT\Control Panel\Desktop
ScreenSaveActive = 0

-----------------------]
这个好像刑部通,因为在程序运行的时候还是可以有屏保的,只是在程序的某些状态下才停止屏保。
SystemParametersInfo 这个函数调用起来比较费时间,影响了程序运行速度。

修改完之后,需要广播一个消息.
[/Quote]
------------------------
是不是这样广播消息?SPIF_UPDATEINIFILE
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, 0, SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)
我代码就是这样写,行不通啊
僵哥 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hrex 的回复:]
引用 5 楼 unsigned 的回复:
比较简单的就是修改注册表

INIFile codeHKEY_USERS\.DEFAULT\Control Panel\Desktop
ScreenSaveActive = 0

-----------------------]
这个好像刑部通,因为在程序运行的时候还是可以有屏保的,只是在程序的某些状态下才停止屏保。
SystemParametersInfo 这个函数调用起来比较费时间,影响了程序运行速度。
[/Quote]
修改完之后,需要广播一个消息.
hrex 2008-10-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 unsigned 的回复:]
比较简单的就是修改注册表

INIFile codeHKEY_USERS\.DEFAULT\Control Panel\Desktop
ScreenSaveActive = 0
[/Quote]
-----------------------]
这个好像刑部通,因为在程序运行的时候还是可以有屏保的,只是在程序的某些状态下才停止屏保。
SystemParametersInfo 这个函数调用起来比较费时间,影响了程序运行速度。
嗷嗷叫的老马 2008-10-24
  • 打赏
  • 举报
回复
我有个比较损的招.......

你可以先从注册表里得到屏保的文件名.....然后杀进程.......
东方之珠 2008-10-23
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20080327/08/17255e48-5de2-4fac-9df9-f4827bc97c26.html?492010978
hrex 2008-10-23
  • 打赏
  • 举报
回复
还是谢谢你!!!
僵哥 2008-10-23
  • 打赏
  • 举报
回复
比较简单的就是修改注册表
[code=INIFile]HKEY_USERS\.DEFAULT\Control Panel\Desktop
ScreenSaveActive = 0[/code]
hrex 2008-10-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chenjl1031 的回复:]
http://topic.csdn.net/u/20080327/08/17255e48-5de2-4fac-9df9-f4827bc97c26.html?492010978
[/Quote]
当屏保运行之后,调用SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, False, 0, 0)不能停止屏保啊。。。。
只能发送一条keybd_event消息才能停止,而当如果设置了密保的话也不能停掉屏保?

有没有高手指点啊,我的xp系统
shawls 2008-10-22
  • 打赏
  • 举报
回复
希望对你有帮助



[名称] 设计更换屏幕保护的程序

[源代码内容]

制作一个本企业的屏幕保护,在客户运行本企业的应用软件的时候,为客户更改屏幕保护,是个广告宣传的好办法。在第一VB论坛(http://www.d1vb.com)上有很多朋友提出这个问题,现解答如下:

  要更换屏幕保护,首先得做好一个屏幕保护(scr文件),本例以 工程1.scr 这个文件为例。由于windows是把屏幕保护文件存放在system下,但记录屏幕保护文件位置的文件却是windows目录下的system.ini,所以,首先需要找出系统的windows和system目录的确切安装位置。因此,可以分如下几步进行:

  1、找到windows和system目录的安装位置

  2、把屏幕保护文件复制到system目录下

  3、在system.ini中的[boot]中写入:

    SCRNSAVE.EXE=C:\WINDOWS\SYSTEM\工程1.SCR

  4、告诉系统切换屏幕保护。
下面的例子成功地改变了屏幕保护,全部源代码如下:

'得到windows目录

Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

'修改system.ini
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lplFileName As String) As Long

'得到system目录
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

'设置屏幕保护
Private Const SPI_SETSCREENSAVETIMEOUT = 15
Private Const SPI_SETSCREENSAVEACTIVE = 17
Private Const SPIF_UPDATEINIFILE = &H1
Private Const SPIF_SENDWININICHANGE = &H2

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

'启动屏幕保护
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const WM_SYSCOMMAND = &H112
Private Const SC_SCREENSAVE = &HF140

Private Sub Form_Load()
 '得到system目录
 Dim sSave As String, Ret As Long
 sSave = Space(255)
 Ret = GetSystemDirectory(sSave, 255)
 sSave = Left$(sSave, Ret)
 '把屏保复制到系统目录
 FileCopy App.Path & "\工程1.scr", sSave & "\工程1.SCR"
 '得到windows目录
 Dim Path As String, strSave As String
 strSave = String(250, Chr$(0))
 Path = Left$(strSave, GetWindowsDirectory(strSave, Len(strSave)))
 '修改system.ini
 Dim r As Long
 Dim iniPath As String
 iniPath$ = Path + "\system.ini"
 r = WritePrivateProfileString("boot", "SCRNSAVE.EXE", sSave & "\工程1.SCR", iniPath)
 '设置时间间隔为1分钟=60秒
 lRet = SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT, 60, ByVal 0&,  
     SPIF_UPDATEINIFILE + SPIF_SENDWININICHANGE)
 '设置屏幕保护
 retval = SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, True, 0, 0)
 '启动屏幕保护
 Dim result As Long
result = SendMessage(Form1.hwnd, WM_SYSCOMMAND, SC_SCREENSAVE, 0&)
End Sub

  本例在vb6.0+win95下运行通过。


以上代码保存于: SourceCode Explorer(源代码数据库)
复制时间: 2008-10-22 22:42:08
软件版本: 1.0.882
软件作者: Shawls
E-Mail: ShawFile@163.com
QQ: 9181729

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧