扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
系统就有这个屏保啊!~!
公司主营业务:成都网站建设、网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联公司推出袁州免费做网站回馈大家。
Option EXPlicit
Dim quitflag As Boolean '声明终止程序标志变量
Dim lleft
'声明隐藏或显示鼠标的API函数
Private Declare Function ShowCursor Lib "user32"
(ByVal bShow As Long) As Long
'检测鼠标单击或移动
Private Sub Form_Click()
quitflag = True
End Sub
Private Sub Form_MouseMove(Button As Integer,Shift As Integer, X As Single, Y As Single)
Static xlast, ylast
Dim xnow As Single
Dim ynow As Single
xnow = X
ynow = Y
If xlast = 0 And ylast = 0 Then
xlast = xnow
ylast = ynow
Exit Sub
End If
If xnow xlast Or ynow ylast Then
quitflag = True
End If
End Sub
'检测按键
Private Sub Form_KeyDown(KeyCode As Integer,Shift As Integer)
quitflag = True
End Sub
Private Sub Form_Load()
Dim X As Long
lleft = 0
'横向滚动文字的起始X坐标
If App.PrevInstance = True Then
'用APP对象的PrevInstance属性
Unload Me
'防止同时运行屏幕保护程序的两个实例
Exit Sub
End If
Select Case Ucase$(Left$(Command$, 2))
'装载命令行参数
Case "/S" '在显示器属性对话框中单击了
预览按钮或屏幕保护程序被系统正常调用。
Show
'全屏显示Form1窗体
Randomize
'初始化随机数生成器
X = ShowCursor(False)
'隐藏鼠标
BackColor = VBBlack
Do
Timer2.Enabled = True
'启动Timer2 ,显示屏幕保护滚动文字
DoEvents
'转让控制权,以便检测鼠标和按键行为
Loop Until quitflag = True
'运行屏幕保护滚动文字直至有鼠标和按键行为
Timer2.Enabled = False
'终止滚动文字
Timer1.Enabled = True
'启动Timer1,退出屏幕保护程序
Case Else
Unload Me
Exit Sub
End Select
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim X
X = ShowCursor(True)
'显示鼠标
End Sub
Private Sub Timer1_Timer()
Unload Me
'退出屏幕保护程序
End Sub
Private Sub Timer2_Timer()
显示横向滚动文字
lleft = lleft + 100
If lleft = 11810 Then
lleft = 0
Lab1.Top = Int(Rnd * 7000)
End If
Lab1.Left = lleft
Timer2.Enabled = False
End Sub
Public Class Form1
System.Runtime.InteropServices.DllImport("user32.dll") _
Private Shared Function SendMessage(ByVal hWnd As Integer, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
End Function
Const SC_MONITORPOWER As Integer = HF170
Const WM_SYSCOMMAND As Integer = H112
Private Enum MonitorMode As Integer
[ON] = -1
STANBY = 1
OFF = 2
End Enum
Private Sub ChangeMonitorState(ByVal mode As MonitorMode)
SendMessage(-1, WM_SYSCOMMAND, SC_MONITORPOWER, CInt(mode))
End Sub
Private Sub Off()
ChangeMonitorState(MonitorMode.OFF)
End Sub
Private Sub [On]()
ChangeMonitorState(MonitorMode.[ON])
End Sub
Private Sub StandBy()
ChangeMonitorState(MonitorMode.STANBY)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Off()
End Sub
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = Keys.Escape Then [On]()
End Sub
End Class
按button1按钮关闭显示器,按Esc键打开显示器
'要生成文件的后缀名为scr
'窗体样式要改为Me.BorderStyle = 0
Dim X1, Y1, X2, Y2 As Integer
Dim I As Integer
Dim J As Boolean
Dim K As Integer
Dim WithEvents Label1 As Label '声明一个label
Dim WithEvents Timer1 As Timer '声明一个timer
Private Sub Form_Activate()
I = 100
K = 100
X1 = Me.Width / 2
Y1 = Me.Height / 3
X2 = X1
Y2 = Y1
Rem 设置label的位置
Label1.Top = Me.Height / 2 - Label1.Height / 2
Label1.Left = Me.Width / 2 - Label1.Width / 2
End Sub
Private Sub Form_Load()
Me.BackColor = H0 '窗体的背景色为黑色
Me.FillColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255) '窗体的填充色为随机
Me.ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255) '窗体的前景色为随机
Me.DrawMode = 13 '窗体输出的外观为13
Me.DrawWidth = 2 '窗体输出的线条宽度为2
Me.FillStyle = 7 '窗体的填充样式为7
Set Label1 = Me.Controls.Add("VB.Label", "Label1") '设置label
Set Timer1 = Me.Controls.Add("VB.Timer", "Timer1") '设置timer
Label1.Visible = True 'label可见性为true
Label1.AutoSize = True 'label自动调整大小
Label1.BackStyle = 0 'label背景色为透明
Label1.Caption = "I LOVE YOU" '设置标题
Label1.Font.Size = 60 '字体大小为60
Label1.ForeColor = HFF00 'label前景色为黑色
Timer1.Enabled = True 'timer为有效
Timer1.Interval = 10 'timer时间 间隔为0.001秒
Me.WindowState = 2 '窗体展开样式
End Sub
Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Static currentX, currentY As Single
Dim orignX, orignY As Single
'把当前的鼠标值赋给orignX和orignY
orignX = X
orignY = Y
'初始化currentX和currentY
If currentX = 0 And currentY = 0 Then
currentX = orignX
currentY = orignY
Exit Sub
End If
If Abs(orignX - currentX) 1 Or Abs(orignY - currentY) 1 Then
End
End If
End Sub
Private Sub Timer1_Timer()
Me.Circle (X1, Y1), 250 '在窗体上画圆
Me.Circle (X2, Y2), 250 '在窗体上画圆
If Y1 = Me.Height - 1200 Then '在指定高度运行
X1 = X1 + K
Y1 = Y1 - I
X2 = X2 - K
Y2 = Y2 - I
I = I - 2
If Y1 = Me.Height / 3 Then
K = K - 1
ElseIf Y1 = Me.Height / 3 Then
K = K - 5
End If
Else
I = 100
K = 100
X1 = Me.Width / 2
Y1 = Me.Height / 3
X2 = X1
Y2 = Y1
Me.FillColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255) '窗体的填充色为随机
Me.ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255) '窗体的前景色为随机
End If
Me.DrawWidth = 3 '窗体输出的线条宽度为3
'在窗体上随机画点
Me.PSet (Rnd * Me.Width, Rnd * Me.Height), RGB(Rnd * 225, Rnd * 225, Rnd * 225)
Me.DrawWidth = 2 '窗体输出的线条宽度为2
End Sub
''''''''''''''''''''''''''''''
'在窗体上单击鼠标时退出程序
Private Sub Form_Click()
End
End Sub
'在窗体上按下按键时退出程序
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
End
End Sub
'在窗体上移动鼠标时退出程序
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Static currentX, currentY As Single
Dim orignX, orignY As Single
'把当前的鼠标值赋给orignX和orignY
orignX = X
orignY = Y
'初始化currentX和currentY
If currentX = 0 And currentY = 0 Then
currentX = orignX
currentY = orignY
Exit Sub
End If
If Abs(orignX - currentX) 1 Or Abs(orignY - currentY) 1 Then
End
End If
End Sub
熟悉Windows操作系统的朋友一定对Windows的屏幕保护程序不陌生吧。如何自己编写Windows屏幕保护程序呢?当你看完下面的讲解后便可以轻易地编写一标准的Windows屏幕保护程序了!
一个标准的屏保有以下几个特点:
一:它是以.SCR作为文件的扩展名!
二:它有三种运行方式。
(1)运行在预览框中(用于预览屏保的效果。在“显示属性”→“屏幕保护程序”→“小屏幕”)。(见图)
(2)运行设置程序(用于设置一些相关的样式。在“显示属性”→“屏幕保护程序”→“点击设置按钮”)。
(3)真正的运行屏保(屏保运行时的效果。在“显示属性”→“屏幕保护程序”→“点击预览”或鼠标、键盘在指定的时间内无动作时)。
如何让屏保识别当前需要运行哪一种方式呢?答案很简单——分析Windows调用屏保的参数。下面以Windows 98为例向大家分析一下调用屏保的参数。
当Windows需要屏保显示在“小屏幕”中时会在调用屏保的后面加上两个参数。
如:myscr.scr /p 7981(参数一:/p 表示让程序显示在“小屏幕”里,参数二:7981表示“小屏幕”的句柄hWnd。这样屏保就会得知Windows要它显示在“小屏幕”中。)
当Windows需要屏保显示设置对话框时会在调用屏保的后面不加或加上两个参数。
如:myscr.scr或myscr.scr /C 7987(参数一:/C表示让程序显示设置对话框,参数二:7987表示该属性页的句柄。)
当Windows需要运行屏保时会在调用屏保的后面加上一个参数。
如:myscr.scr /S(参数:/S表示让屏保运行。)
好了,知道了Windows如何让屏保运行的三种方式后,接下来就要讨论如何实现它们了。
实现原理:Windows通过某种方式调用屏保,屏保知道了它此时要干什么便会在当前环境中搜索是否有相同的实例存在。如果该实例的运行方式与此次要启动的运行方式不同则关闭前个实例,如果该实例的运行方式与此次要启动的运行方式相同则关闭此次运行的实例。
显然要实现这种方法靠VB的App.PrevInstance是不可行的。因为我们要达到的目的是:侦测到前一个实例后要关闭它然后启动程序。而App.PrevInstance属性只能返回当前是否已启动一个应用程序的实例而不能对前个实例做些什么。(实例 简单地说就是相同的对象集合——同一程序。)在实现此方法之前首先向大家介绍三条API函数:GetClassName、FindWindow和SendMessage。其原型如下:
Declare Function GetClassName Lib “user32” Alias “GetClassNameA” (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Declare Function FindWindow Lib “user32” Alias “FindWindowA” (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function SendMessage Lib “user32” Alias “SendMessageA” (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
GetClassName用于取得窗体的类名。调用成功后返回类名长度,失败返回零。函数需要三个参数:参数一.窗体的句柄,参数二.存放类名的缓冲,参数三.缓冲的大小。
FindWindow用于寻找窗体。调用成功后返回窗体的句柄,失败返回零。函数需要两个参数:参数一.窗体的类名,参数二.窗体的标题。
SendMessage用于向窗体发送一消息。函数需要四个参数:参数一.窗体的句柄,参数二:发送的消息名称,参数三、四.分别表示消息所附带的参数。
使用了这三个函数便可轻易地实现关闭前有一个已启动的实例从而达到我们的目的。
其次我们要实现如何让屏幕保护程序显示在预览框中(“小屏幕”)。
要让屏幕保护程序在预览框中显示必须动态地改变窗口的样式使之成为“小屏幕”的子窗体,这样才能使预览框关闭时得到关闭消息。动态地改变窗口的样式可以使用GetWindowLong、SetWindowLong和SetParent。
它们的原型如下:
Public Declare Function GetWindowLong Lib “user32” Alias “GetWindowLongA” (ByVal hwnd As Long, ByVal nIndex As Long) As Long Public Declare Function SetWindowLong Lib “user32” Alias “SetWindowLongA” (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Declare Function SetParent Lib “user32” (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
GetWindowLong的作用用于得到窗体的样式。调用成功后返回窗体的样式。函数需要两个参数:参数一.窗体的句柄,参数二.要取得窗体的样式只需使用常数GWL_STYLE。
SetWindowLong的作用用于设置窗体的样式。函数需要三个参数:参数一.窗体的句柄,参数二.要设置窗体的样式只需用常数GWL_STYLE,参数三.要设置窗体的样式。
SetParent的作用用于设置子窗体属于哪个父窗体。函数需要两个参数:参数一.子窗体的句柄,参数二.父窗体的句柄。
知道了以上两点就可编写出标准的屏保。(关于效果就看你自己的了!)纸上谈兵了一阵就要落实到真正的编程上了。为了着重讲解屏保的实现方法故将屏保的效果简单化。
首先新建一工程再添加一窗口,各属性设置如下:
窗口 名称 Caption BorderStyle
Form1 Frm_Setup 无 1 - None
Form2 Frm_Run 任意 1 - Fixed Single
其余属性均缺省。再在Frm_Run中添加一Timer控件,将该控件的名称改为Timer_Mov,Interval属性制改为500。
添加两个模块,将Module1的名称改为Mod_Const,Module2的名称改为Mod_Main,添加以下代码:
Mod_Const:
Option Explicit
Public Const WM_LOOK=“屏保预览(demo)”
Public Const WM_SET=“屏保设置(demo)”
Public Const WM_RUN=“屏保运行(demo)”
Public Const HWND_TOP=0&
Public Const WS_CHILD=&H40000000
Public Const GWL_STYLE=(-16)
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Const SWP_NOZORDER=&H4
Public Const SWP_NOACTIVATE=&H10
Public Const SWP_SHOWWINDOW=&H40
Public Const WM_CLOSE=&H10
Declare Function GetClientRect Lib “user32” (ByVal hwnd As Long, lpRect As RECT) As Long
Declare Function GetClassName Lib “user32” Alias “GetClassNameA” (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Declare Function FindWindow Lib “user32” Alias “FindWindowA” (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function SendMessage Lib “user32” Alias “SendMessageA” (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function SetParent Lib “user32” (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Public Declare Function GetWindowLong Lib “user32” Alias “GetWindowLongA” (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib “user32” Alias “SetWindowLongA” (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function SetWindowPos Lib “user32” (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Declare Function ShowCursor Lib “user32” (ByVal bShow As Long) As Long
Mod_Main:
Option Explicit
Sub Main() '程序运行入口
Dim ClassName As String * 64 ’存放窗口的类名
Dim ExeCmd As String '存放命令行参数
GetClassName Frm_Setup.hwnd, ClassName, 64 ’取得窗口的类名
ExeCmd=UCase(Command$) ’将调用的屏保的参数转换成大写后存放在变量ExeCmd里
If Not (InStr(ExeCmd,“/P”)=0)Then ’检查屏保的调用参数中是否有“/P”参数
If Not (FindWindow(ClassName, WM_LOOK)=0)Then End ’如果找到已有同一个运行方式的实例存在则程序结束
ClosePreWindow ClassName, WM_SET ’关闭前面已启动的其他运行方式的实例
ClosePreWindow ClassName, WM_RUN ’同上
SCR_Look
ElseIf Not (InStr(ExeCmd,“/S”)=0)Then
If Not (FindWindow(ClassName,WM_RUN)=0) Then End
ClosePreWindow ClassName, WM_LOOK ’同上
ClosePreWindow ClassName, WM_SET ’同上
Scr_Run
Else
If Not (FindWindow(ClassName, WM_SET)=0) Then End
ClosePreWindow ClassName, WM_LOOK ’同上
ClosePreWindow ClassName, WM_RUN ’同上
Scr_Setup
End If
End Sub
Public Sub ClosePreWindow(ClassName As String, WinCaption As String)
Dim PreWnd As Long
PreWnd=FindWindow(ClassName, WinCaption) ’寻找类名为ClassName,标题为WinCaption的窗口
If Not (PreWnd = 0) Then Call SendMessage(PreWnd, WM_CLOSE, 0, 0) ’如果窗口已找到则关闭它
End Sub
Public Sub SCR_Look()
Dim LookScrWnd As Long
Dim Style As Long
Dim LookRect As RECT
Frm_Run.Caption=WM_LOOK ’赋上具有相应运行方式的标题
LookScrWnd=Val(Right(Command$, Len(Command$) - 2)) ’取得小屏幕的窗口句柄
Style=GetWindowLong(Frm_Run.hwnd, GWL_STYLE) ’取得窗口的样式
Style=Style Or WS_CHILD ’在窗口的样式中加入子窗体常数
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 5.0中编写并运行通过。)
vb.net中关闭屏幕刷新方法为:
1、修改完恢复初始状态callformload。
2、显示修改后信息,控件refresh,例如用data控件,则data1.refresh即可。
3、数据库资料用label显示,则label.refresh同时用me.refresh。
在窗体上建立2个文本框text1和text2,一个按钮command1,text1里面输入你要转换的字符串,text2里面显示结果,代码如下:
Dim MyString As String
Dim EveryStr(50) As String
Dim TargetStr As String
Private Sub Command1_Click()
MyString = Text1
For i = 1 To Len(MyString)
EveryStr(i) = Right(Left(MyString, i), 1)
If Asc(EveryStr(i)) 123 And Asc(EveryStr(i)) 96 Then EveryStr(i) = \"_\"
If Asc(EveryStr(i)) 91 And Asc(EveryStr(i)) 64 Then EveryStr(i) = \"_\"
TargetStr = TargetStr EveryStr(i)
Next i
Text2 = TargetStr
TargetStr = \"\"
End Sub
引号前面怎么自动给加了个“\”?用的时候请手动把那几个“\”去掉
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流