说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

设计简单的屏幕保护程序 -VB资料

HTML文档下载 WORD文档下载 PDF文档下载
设计简单的屏幕保护程序 -VB资料
作者:李波涛

利用VB5.0设计屏幕保护程序

  实际上使用Visual Basic 5.0很容易建立屏幕保护程序。任何Visual Basic应用程序都可以作为一个屏幕保护程序来运行,只是有的程序做此工作会比其它程序更好一些。要想使自己的应用程序扮演Windows环境中屏幕保护程序的角色,需要将该程序作为一个屏幕保护程序来编译。

  具体操作:从File菜单上选定Make EXE File,在Make EXE File对话框中作以下改动:不再建立带扩展名为EXE的可执行文件,而是把扩展名改为SCR。

  下面具体探讨了如何利用Visual Basic 5.0设计屏幕保护程序,也就是在设计屏幕保护程序时应注意的几个问题:

1、 如何防止同时运行屏幕保护程序的两个实例

  Visual Basic 提供了一个App 对象,它有一个PreInstance 属性,如果当前Visual Basic应用程序的一个实例已经运行时,便把该属性设置为True,从而避免同时运行一个屏幕保护程序的多个实例。
  下面的代码展示App.PreInstance 是如何典型地在一个屏幕保护程序中实现的。

  If App.PreInstance=True then
    Unload Me
  Exit Sub
   End If

  此外,还有一种更好的方法可以避免同时运行一个屏幕保护程序的多个实例。使用一个通知操作系统已经有一个屏幕保护程序被激活的Windows 95 API函数。这个函数便是SystemParametersInfo,其声明如下:

Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long

  在窗体加载事件的开始调用一次这个函数并在窗体卸载事件期间再调用一次。这两个调用必须成对出现并且二者必须在屏幕保护程序的执行期间进行调用。

  以下是在窗体加载事件中对该函数的调用: x=SystemParametersInfo(17,0,ByVal 0&,0)
  以下是在窗体卸载事件中对该函数的调用: x=SystemParametersInfo(17,1,ByVal 0&,0)

2、如何在屏幕保护程序中隐藏鼠标光标

  ShowCursor API 函数允许在Visual Basic 应用程序中隐藏或显示鼠标光标,Windows 通过更改它所维护的一个变量中的计数跟踪鼠标光标的可视性, 每次用参数值True调用ShowCursor 都使这个计数递增,每次用参数值False调用ShowCursor都使这个计数递减,如果该计数为0 或者更小, 鼠标光标自动隐藏起来。 以下是ShowCursor API函数的声明:

Private Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long

  下面是两个使用ShowCursor 函数的例子。

  显示鼠标光标:
   Private Sub ShowMouse()
    While ShowCursor(True)<=0
    Wend
   End Sub

  隐藏鼠标光标:
   Private Sub HideMouse()
    While ShowCursor(False)>0
    Wend
   End Sub

3、如何检测鼠标的移动

  MouseMove事件用来检测鼠标的移动,当应用程序启动时甚至鼠标实际上并未移动的情况下,MouseMove 事件都会触发一次。所以第一次触发MouseMove事件时,只是记录鼠标当前位置,仅当鼠标真正从其起始位置移开时,才终止屏幕保护程序。具体实现代码如下:

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
 Static XLast, YLast As Single
 Dim XNow, YNow As Single
 
  '记录当前位置
   XNow = X
   YNow = Y
  
  '第一次触发MouseMove 事件, 记录当前位置
   If XLast = 0 And YLast = 0 Then
    XLast = XNow
    YLast = YNow
    Exit Sub
   End If
  
  '仅当鼠标移动足够迅速( 一次2个像素以上)才恢复屏幕
   If Abs(XNow - XLast) > 2 Or Abs(YNow - YLast) > 2 Then
    QuitFlag = True
   End If
End Sub

4、如何检测鼠标单击

  Form_Click事件用来检测鼠标单击,Form_Click事件的具体代码如下:

   Private Sub Form_Click()
    '鼠标单击,结束屏幕保护程序
    QuitFlag=True
   End Sub

5、 如何检测键盘的活动

  Form_KeyDown 事件用来检测键盘的活动,当按下任何一个键(包括换档键)时,都能结束屏幕保护程序。Form_KeyDown 事件的具体代码如下:

   Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    '按下键盘,结束屏幕保护程序
    QuitFlag = True
   End Sub

6、 设置几个重要属性
  Form 窗体BorderStyle 为0-None,ControlBox 为False,KeyPreview 为True,MaxButton 和MinButton 为False,WindowState 为2-Maximized,定义窗体级变量QuitFlag(Dim QuitFlag as Boolean)。
  Timer控件(在Form窗体中)Enabled 属性在设计环境中设置为False。

  下面有一个完整的屏幕保护程序实例,其演示效果为:把当前的显示复制到一个全屏幕的窗体中,然后随机在屏幕上画一些实心彩色小圆,并随机显示彩色字样"Baby,I loveyou!"。 同时, 在屏幕底部有一移动的图片框,可以在设计环境中添加自己喜欢的图片,例如可设计为:程序设计:李波涛。在本屏幕保护程序中,设置Timer 控件的Name属性为tmrExitNotify; 另外,在窗体底部添加一个PictureBox控件,设置其Name属性为picture1。

  在调试本程序时,有一技巧值得说明的是:可将Form_Load 事件中Select Case …End Select语句稍作修改如下:
  a、将Case "/S" 注释掉, 在其下添加Case Else 语句;
  b、将Case Else/Unload Me/Exit Sub 三条语句注释掉;

  这样,可在VB5.0 环境下,调试本程序,预览演示效果。在调试完成后,再将上述修改恢复原样,编译成后缀为SCR的文件。

Option Explicit

'Declare API to inform system whether screen saver is active
Private Declare Function SystemParametersInfo Lib "user32" _
  Alias "SystemParametersInfoA" ( _
  ByVal uAction As Long, _
  ByVal uParam As Long, _
  ByVal lpvParam As Any, _
  ByVal fuWinIni As Long _
) As Long

'Declare API to hide or show mouse pointer
Private Declare Function ShowCursor Lib "user32" ( _
  ByVal bShow As Long _
) As Long

'Declare API to get a copy of entire screen
Private Declare Function BitBlt Lib "gdi32" ( _
  ByVal hDestDC As Long, _
  ByVal X As Long, _
  ByVal Y As Long, _
  ByVal nWidth As Long, _
  ByVal nHeight As Long, _
  ByVal hSrcDc As Long, _
  ByVal xSrc As Long, _
  ByVal ySrc As Long, _
  ByVal dwRop As Long _
) As Long
  
'Declare API to get handle to screen
Private Declare Function GetDesktopWindow Lib "user32" () As Long
'Declare API to convert handle to device context
Private Declare Function GetDC Lib "user32" ( _
  ByVal hwnd As Long _
) As Long

'Declare API to release device context
Private Declare Function ReleaseDC Lib "user32" ( _
  ByVal hwnd As Long, _
  ByVal hdc As Long _
) As Long

'Define constants
Const SPI_SETSCREENSAVEACTIVE = 17

'Define form-level variables
Dim QuitFlag As Boolean

Private Sub Form_Click()
  'Quit if mouse is clicked
  QuitFlag = True
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  'Quit if keyboard is clicked
  QuitFlag = True
End Sub

Private Sub Form_Load()
  Dim X As Long, Y As Long
  Dim XScr As Long, YScr As Long
  Dim dwRop As Long, hwndSrc As Long, hSrcDc As Long
  Dim Res As Long
  Dim Count As Integer
   
  'Tell system that application is active now
  X = SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, ByVal 0&, 0)
  'Hide mouse pointer
  X = ShowCursor(False)
  
  'Proceed based on command line
  Select Case UCase(Left(Command, 2))
  
  'Put the show on the load
  Case "/S"
    Randomize
    'Copy entire desktop screen into picture box
    Move 0, 0, Screen.Width + 1, Screen.Height + 1
  
    dwRop = &HCC0020
    hwndSrc = GetDesktopWindow()
    hSrcDc = GetDC(hwndSrc)
    Res = BitBlt(hdc, 0, 0, ScaleWidth, ScaleHeight, hSrcDc, 0, 0, dwRop)
    Res = ReleaseDC(hwndSrc, hSrcDc)
    
    'Display full size
    Show
    
    Form1.AutoRedraw = False
    'Graphics loop
    Do
      Count = 0
      X = Form1.ScaleWidth * Rnd
      Y = Form1.ScaleHeight * Rnd
      
      Do
        X = Form1.ScaleWidth * Rnd
        Y = Form1.ScaleHeight * Rnd
        
        DoEvents
        
        Form1.FillColor = QBColor(Int(Rnd * 15) + 1)
        Circle (X, Y), Rnd * 80, Form1.FillColor
        Count = Count + 1
               
        'Exit this loop only to quit screen saver
        If QuitFlag = True Then Exit Do
        
        'Move picture
        Dim Right As Boolean
        If Picture1.Left > 10 And Not Right Then
          Picture1.Left = Picture1.Left - 10
        Else
          Right = True
          If Picture1.Left < 7320 Then
            Picture1.Left = Picture1.Left + 10
          Else
            Right = False
          End If
        End If
        If (Count Mod 100) = 0 Then
          Form1.ForeColor = QBColor(Int(Rnd * 15) + 1)
          Print "Baby, I love you!"
        End If
        
      Loop Until Count > 500
      Form1.Cls
      
    Loop Until QuitFlag = True
  
    tmrExitNotify.Enabled = True
  Case Else
    Unload Me
    Exit Sub
  End Select
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
  Static XLast, YLast As Single
  Dim XNow, YNow As Single
  
  'Get current position
  XNow = X
  YNow = Y
  
  'On first move, simply record position
  If XLast = 0 And YLast = 0 Then
    XLast = XNow
    YLast = YNow
    Exit Sub
  End If
  
  'Quit only if mouse actually changes position
  If Abs(XNow - XLast) > 2 Or Abs(YNow - YLast) > 2 Then
    QuitFlag = True
  End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
  Dim X
  
  'Inform system that screen saver is now inactive
  X = SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1, ByVal 0&, 0)
    
  'Show mouse pointer
  X = ShowCursor(True)
End Sub

Private Sub tmrExitNotify_Timer()
  'Time to quit
  Unload Me
End Sub
清除字符串中指定的字符 -VB资料 VB如何取得计算机的所有字型? VB如何取得中英混合字符串的长度? 使VB的网格控件具有输入功能 VB如何使用未安装的字体? VB如何由两个ASC码(区位码)复原成一个汉字? VB如何转换C代码中的高字和低字 一些字符串操作的问题和回答 -VB资料 VB怎样把VC++代码转换成VB代码 字符串中包含双引号-VB资料 字符串中文的问题 -VB资料 巧用CLIPBOARD建立图像数据库-VB资料 在VB中存取数据库中的图片 Access97的报表解决方案-VB资料 Access下如何使用通用对话框-VB资料 ADO简介 -VB资料 ADO三大对象的属性、方法、事件及常数(二)-VB资料 ADO三大对象的属性、方法、事件及常数(三)-VB资料 ADO三大对象的属性、方法、事件及常数(一)-VB资料 Data 控件使用有密码的 Access 数据库 -VB资料 Excel、Access、VB的结合应用 Microsoft SQL Server 7.0安装问题(二)-VB资料 主题: MDB文件的导出 使用 DAO-VB资料 Microsoft Access秘密、技巧和陷阱-VB资料 SQL的基本操作(1.数据类型) -VB资料 SQL的基本操作(2.数据库的相关操作)-VB资料 SQL的基本操作(3.表的相关操作) -VB资料 SQL的基本操作(4.数据的检索)-VB资料 SQL在VB中的使用及访问远程数据库 Text 转换为 Access MDB -VB资料 VB5.0数据库基础 我的jsp服务器是iis+TOMCAT+win2000pro 不知怎的每次用不了多久就显示出 网页无法显示 目前访问该 Web 站点的用户过多,我只是自已用怎么 终于有星了,高兴,散分(第一次散分,请斑竹手下留情) 我的刚装的2000进入启动界面时,进度条读到2/3时就蓝屏了! 请问在运行时向ActiveX控件中添加ActiveX控件的方法是什么? 高手请进:如何在WinNT以上系统进行BIOS读取! 毕业设计的问题,请各位大哥帮小弟一个忙 备份与恢复 数据备份与恢复 我用win2k,下载了php4.3.1,extension_dir是c:\php\ext 可是里面没有php_gd.dll,怎么办,到哪里可以down一个补上? 帮我一下:解决中文问题 新手问题:怎么在用ATL COM WIZARD已生成的dll加入MFC 请问如何删除系统? warton给大家散分来了! 求助,请问哪儿提供的域名空间最好? 新手上路,VB中用ODBC连接ACCESS 关于ORACLE中(多)表的备份和恢复问题 MM``狂给分^*^ 找人一同研究JUnit对于数据库的测试架构 怎样在程序中动态生成数据库(内存库)?求救高手 请问,怎样用本机作web服务器? 这样的夜晚 想起一些故人.... 各位的jbuilder是用什么命令运行的 刚学者求问 python+CGI 如何获得客户端IP Win2000上, 对话框没能弹出到桌面顶层 在静态上下文中不能引用非静态变量? 有没有高手可以举例讲解一下self的各种用法? 一个很困惑的问题:文字处理软件中,字体大小改变时,字符的高度,宽度怎么变化? 移动硬盘在重装系统时忘记拔下来。结果给误删了,求助!没有格式化的! 怎样创建自己的 Cursor ? 请问一下 这个是什么意思 public Properties() { this(null)} 在SQL7中日志满了,如何清除日志. ?????????? 一个编程习惯上的问题 为中国争口气!投中国的长城和布达拉宫一票!!恳请置顶! 菜鸟问题4。。。。 网上现在有没有用ASP.NET做的实例 vc.net为什么没classwizard 有关CDC的一个问题,有代码,请指教! 要陪老婆,兄弟们,给我顶住,我先闪了,..... javascript 能否取得客户端的IP? 关于删除xp_cmdshell的问题 哪儿可以下载vc++.net? 那位兄台能否告诉我如何crack Together Edition for JBuilder !(本人纯属学习之用) Cypress EZ-USB 的问题 急! 为中国争口气!投中国的长城和布达拉宫一票!!恳请置顶! 关于工作流的概念问题?? 讨论:delphi有没有做.net的web应用的能力 如何知道执行 一条SQL后 更新的行数啊? 向各位请教一个上传问题 PASCAL 代码 转 CB 代码 如何更新指定的IFrame Do you know?是一般疑问句吗? 机械能守恒,下面说法正确吗?A:物体只受到弹力时,弹力不做功,机械能守恒B:物体只受到弹力时,弹力做功,机械能也守恒C:物体只受到重力和弹力,两力都做功,机械能也守恒D:物体只受到重力和弹 从这以后,楚王不敢不尊重晏子了.怎么理解这句话? Do you know 后面加特殊疑问句怎么加?给个例子. actions speak louder than words 从此以后,楚王不敢不尊重晏子了,是因为什么?从此以后,楚王不敢不尊重晏子了,句中楚王之所以不敢不尊重晏子,是因为什么? 晏子的故事有哪些? do you know之后的疑问句是否要加助动词根据所给词的正确形式填空(不必一空一词):Do you know how many _____(tooth)a tiger has中间是填teeth does还是只要填teeth,如果填teeth does 但是后面的has已经 Actions Speak Louder than Words看图写短文请根据你对以下两幅图的理解,以“Actions Speak Louder than Words”为题,用英语写一篇作文.参考词:banner (横幅)stump (树粧)你的作文应包括以下内容:1.简要描述两 《我的伯父鲁迅先生》为什么说“四周围黑洞洞的,还不容易碰壁吗”? 有人说是这样的you do not know china,do you?疑问句不是把DO放句首吗?Do you not know china?这样不对吗 优秀的课文让我们认识了很多人物,有具备 晏子,有 的桑那和渔夫,又被称为 的刷子李有能让人感受到 的顶碗少年 四周黑洞洞的,还不容易碰壁忙?这句话怎么理解?(《我的伯父鲁迅先生》) 你了解冬奥会吗?用英语咋说 与Do you know anything about Winter Olympic不同 要一般疑问句 (1)某队修路,第一题求了全场的五分之二,再修200米,刚好修了全长的一半还多20米,这条路全长多少米?(2)5.56-五分之三+6.44-五分之二(用简便)(3)一辆汽车五分之三小时行36千米,平均每 世间安得双全法,不负如来不负卿! 利润表的格式主要有多步式利润表和单步式利润表两种,我过企业采用的是单步式利润表格式?啊、、、、应该是多步式,晕了这会. 利润表采用什么式结构? correct副词 我国企业利润表采用什么方式 ( )I help my mother in the house 括号内填写一个单词 单给一个企业的利润表叫进行分析,主要对哪些指标分析呢?在这道题中还有上一年的利润表数据.我想应该是从盈利能力方面着手吧?能具体给几个指标么? Actions speak louder than words.谚语的中文意思中文意思就好了 生活在绿草中的蝗虫,它的体色通常是绿色的,这对蝗虫的生活意义是? luck的动词形式,friend的动词形式、副词形式,skill的形容词、副词、动词形式及其反义词 able的名、动、副词形式,simple的名词、副词、动词、反义词 翻译俗语!actions speak louder than yours! 生活在草地上的蚂蚱的体色往往是绿色的.这句话是对还是错 A:Which sport do you prefer,basketball or baseball?B:I ___ basketball to baseball.横线上填一个单词! 英语翻译要准确无误 一只蝉有6条腿,一只蜘蛛有8条腿,现在蜘蛛比蝉少15只,它们一共有650条腿.蜘蛛和蝉各有多少只? People on Hainan Island like scuba diving.But do you know what makes it possible for people __26___ under water for a long time?It’s the scuba machine.Then do you know _27___ invented the machine?It was Jacques Cousteau and _28____ friend.Cousteau 英语翻译英译汉:actions speak louder than words actions speak louder than words 急 在绿草地中生活的蚱蜢的体色往往是 people in Hainan与people of Hainan区别 世间安得双全法, 不负如来不负卿.全诗是? 生活在草地上的蚱蜢体色是什么颜色 What's the weather like today?(用in Hainan 进行改写) 世间安得双全法,不负如来不负卿是什么意思 求翻译,速度!Actions Speak Louder Than WordsActions Speak Louder Than WordsI had a man tell me that the problem women have is that we get more hung up on a man’s words than we do their actions. He meant that we don’t always see if a man walks 一只蛐蛐6条腿,一只蜘蛛8条腿.现在有蛐蛐和蜘蛛共14只,共有100条腿.蛐蛐和蜘蛛个有多少个? i like winter.what about you?哪里错了 It's _____ hot in nanjing in summer .If it doesn't rain,it willl be even______.A.quiet,hot.B.very,hot C.very,hotter D.much,hotter说明理由 whats the weather like in hainan 这句话译成中文 I (like) (winter) .(What) about you?有什么错误的地方吗? it,s hot_____chongqing______summer.A:in;at B:in;in C:at;at 一只蛐蛐六条腿一只蜘蛛八条腿现在蛐蛐和蜘蛛共10只共有68条腿蛐蛐和蜘蛛有几只用五年级的方程解 像晏子这样的人我们称他什么 北京芭娜娜麦词MC阿威的那个 要中文的 英文我看不懂 一点英文也别带 列如:类地森 按得 杰特们 一只蛐蛐6条腿,一只蜘蛛8条腿.现在有蛐蛐和蜘蛛共10只.问蛐蛐和蜘蛛各有多少只? What is it you don’t like about winter weather?it 起什么作用? 设Ox.Oy是平面内相交成60°角的两条数轴,e1,e2分别是与X轴Y轴正方向同向的单位向量,若向量OP=xe1+ye2,则把有序数对(x,y)叫做向量OP在坐标系xOy中的坐标,假设向量OP=3e1+2e2,(1)计算 |向量OP|的大小 民航客机一般都有紧急出口,发生意外情况的飞机紧急着陆后,打开紧急出口,狭长的气囊会自动充气生成一条连接出口与地面的斜面,人员可沿斜面滑行到地上.若机藏口下沿距地面3.2M,气囊所构 在我国历史上还有很多像晏子这样的人物,你知道的有谁?你最欣赏谁? 在平面内,两条互相垂直,原点重合的数轴,组成().水平的数轴称为(),竖直的数轴称为(). 关于机械能守恒的叙述,下列说法正确的是A物体做匀速直线运动,机械能一定守恒B物体所受合力做功为0,机械能一定守恒C物体所受合力为0,机械能一定守恒D物体所受合力不等于0,机械能可能守 晏子这样的人我们可以称他为? 在平面内,两条互相垂直且有公共原点的数轴组成_______,其中水平的数轴称为______,竖直的数轴称为_____. 关于机械能是否守恒的叙述,正确的是( )关于机械能是否守恒的叙述,正确的是( )A.做匀速直线运动的物体机械能一定守恒B.做变速运动的物体机械能不可能守恒C.外力对物体做功为零时, 晏子的人物形象 从那以后楚王不敢不尊重晏子了用了什么句式 美国一动物园训练小猎犬辨识北极熊是否美媒称福利改革东盛西衰 财政压力致步单眼皮变双眼皮 韩国总统朴槿惠陷“整墨尔本盗贼猖狂作案 光天化日载走百余英国摄影师遇棕熊后大声向其问好巧妙脱墨西哥劫匪亡灵节假扮鬼怪抢劫珠宝店新西兰华裔科学家表现杰出 获赠昂贵实西班牙部分边境安装“铁刀网”防非法移澳一女子在自家后院做园艺工作时被毒蛇澳大利亚赃车轮胎金属熔化 致偷车贼三“携手-2013”中印陆军反恐联合训两季“好声音”小伙伴们星途如何英国楼价持续飙升 8万儿童圣诞节恐无谷歌斥美政府“肌肉发达” 称间谍行为美国参院将对一项同性恋权益法案辩论 日本少子化日益严重 逾6成日企雇佣员新闻集团窃听案涉案编辑被控藏匿证据 美国新泽西州一购物中心发生枪击事件 搬家走窗户折射恶法“后遗症”尼泊尔“王后池”开放 感受王朝身影印度将发射火星探测器 “廉价雄心”遭装了GPS的电动车,他们竟然也敢偷汉拿山、权金城纷纷发声明:我们百分百名人战次局连笑落败临淄:坚持绿色发展倒逼转型升级阿森纳再次1:5惨败给拜仁 七年欧冠竞彩受注赛事一览樱花燃气灶:聚能焰缔造厨房高科技国羽教练名单出炉 李永波将再战东京南中医老师手写 明信片寄语女生体彩·情报站济南将对韭菜等隐患农产品进行专项整治樱花燃气灶告诉你如何选择燃气灶\"公交黑手\"盯上老人 用刀片割口马丁内斯已恢复训练 逆境中苏宁更需要德州出入境检验检疫局助力 企业进口小马丁内斯已恢复训练 逆境中苏宁更需要樱花燃气灶方便清洁 贴心更懂你2017年的储蓄国债发行计划具体如下微鲸发布“鲸侣计划”,全年要建万家体陌生来电自称“客服” 女子被骗170大乐透复式票成投注利器 常州盐城彩民
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘