none
利用VB编写屏幕保护程序(2) RRS feed

  • 常规讨论

  • SetWindowLong Frm_Run.hwnd, GWL_STYLE, Style 改变窗体的样式
      SetParent Frm_Run.hwnd, LookScrWnd 设置窗体的父窗体
      GetClientRect LookScrWnd, LookRect 取得小屏幕的大小

      SetWindowPos Frm_Run.hwnd, HWND_TOP, 0, 0, LookRect.Right, LookRect.Bottom, SWP_

      NOZORDER Or SWP_NOACTIVATE Or SWP_SHOWWINDOW  
    显示窗体并将窗体的大小设置为小屏幕的大小以便覆盖小屏幕
      End Sub
      
      Public Sub Scr_Setup()
      Frm_Run.Caption=WM_SET 赋上具有相应运行方式的标题

      Frm_Setup.Show
      End Sub
      
      Public Sub Scr_Run()

      Frm_Run.Caption = WM_RUN 赋上具有相应运行方式的标题
      ShowCursor False 隐藏鼠标

      Frm_Run.Move 0, 0, Screen.Width, Screen.Height
      Frm_Run.Show
      End Sub
      
      Public Sub CloseSCR()

      ShowCursor True 显示鼠标
      Unload Frm_Setup 卸载窗体关闭屏保
      Unload Frm_Run 同上
      End Sub
      
      Public Function Scan_RUN() As Boolean侦测当前屏保的运行方式
      If (Frm_Run.Caption = WM_RUN) Then 如果屏保是以运行方式在运行则返回“真”,否则返回“假”

       Scan_RUN=True
      Else
       Scan_RUN=False
      End If
      End Function
      
      Frm_Run:
      
      Option Explicit
     Dim i As Integer 定义循环变量
      Dim OldX As Integer 定义存放旧的鼠标水平坐标
      Dim OldY As Integer 定义存放旧的鼠标垂直坐标
      Dim Pic(1) As New StdPicture 定义一个图片类的数组
      
      Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
      If Mod_Main.Scan_RUN Then 如果此时是在运行屏保则关闭屏保

       Mod_Main.CloseSCR
      End If
      End Sub
      
      Private Sub Form_Load()

      i=1 为循环变量赋初值
      OldX=-1 为旧鼠标水平坐标赋初值
      OldY=-1 为旧鼠标垂直坐标赋初值
      Set Pic(0)=LoadPicture(请写入图片一的路径和名称) 读取图片一
      Set Pic(1)=LoadPicture(请写入图片二的路径和名称) 读取图片二

      End Sub
      
      Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y A
      s Single)


      If Mod_Main.Scan_RUN Then 如果此时是在运行屏保则关闭屏保

       Mod_Main.CloseSCR
      End If
      End Sub
      
      Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
      If Mod_Main.Scan_RUN Then
       If (OldX=-1) And (OldY=-1) Then
       OldX=X
       OldY=Y
       Else
       If (ScaleX(Abs(X-OldX),vbTwips,vbPixels)>= 3) Then
       Mod_Main.CloseSCR 将鼠标当前的水平坐标和垂直坐标与旧鼠标的水平坐标和垂直坐标相减其绝对值如果大于3个像素则退出屏保

       End If
       End If
      End If
      End Sub
      
      Private Sub Form_Unload(Cancel As Integer)

      Mod_Main.CloseSCR 关闭屏保

      End Sub
      
      Private Sub Timer_Mov_Timer()
      If (i>=2) Then

       i=1 如果循环变量大于图片的数量则变量赋为1
      Else
       i=i+1 否则循环变量加一

      End If
      Frm_Run.PaintPicture Pic(i-1),0,0,Width,Height,0,0,ScaleX(Pic(i-

    1).Width,vbHimetric,vbTwips),ScaleY(Pic(i-1).Height,vbHimetric,vbTwips)在Frm_Run上画图
      End Sub

      Frm_Setup:
      
      Option Explicit
      
      Private Sub Com_OK_Click()
      Mod_Main.CloseSCR
      End Sub
      
      Private Sub Form_Unload(Cancel As Integer)
      Mod_Main.CloseSCR
      End Sub

      好了,一个标准的屏幕保护程序就编写好了。按下F5运行试试看。不要忘了生成EXE文件时一定要将屏保的扩展名改为SCR并将其拷贝到Windows的System目录里才可在屏保设置中见到喔!(程序在VB 6.0中编写并运行通过。) 
    2009年5月27日 8:26