真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

關(guān)于vb.net防止進入屏保的信息

關(guān)于VB屏幕保護問題--求助

熟悉Windows操作系統(tǒng)的朋友一定對Windows的屏幕保護程序不陌生吧。如何自己編寫Windows屏幕保護程序呢?當你看完下面的講解后便可以輕易地編寫一標準的Windows屏幕保護程序了!

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),二七企業(yè)網(wǎng)站建設(shè),二七品牌網(wǎng)站建設(shè),網(wǎng)站定制,二七網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,二七網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

一個標準的屏保有以下幾個特點:

一:它是以.SCR作為文件的擴展名!

二:它有三種運行方式。

(1)運行在預(yù)覽框中(用于預(yù)覽屏保的效果。在“顯示屬性”→“屏幕保護程序”→“小屏幕”)。(見圖)

(2)運行設(shè)置程序(用于設(shè)置一些相關(guān)的樣式。在“顯示屬性”→“屏幕保護程序”→“點擊設(shè)置按鈕”)。

(3)真正的運行屏保(屏保運行時的效果。在“顯示屬性”→“屏幕保護程序”→“點擊預(yù)覽”或鼠標、鍵盤在指定的時間內(nèi)無動作時)。

如何讓屏保識別當前需要運行哪一種方式呢?答案很簡單——分析Windows調(diào)用屏保的參數(shù)。下面以Windows 98為例向大家分析一下調(diào)用屏保的參數(shù)。

當Windows需要屏保顯示在“小屏幕”中時會在調(diào)用屏保的后面加上兩個參數(shù)。

如:myscr.scr /p 7981(參數(shù)一:/p 表示讓程序顯示在“小屏幕”里,參數(shù)二:7981表示“小屏幕”的句柄hWnd。這樣屏保就會得知Windows要它顯示在“小屏幕”中。)

當Windows需要屏保顯示設(shè)置對話框時會在調(diào)用屏保的后面不加或加上兩個參數(shù)。

如:myscr.scr或myscr.scr /C 7987(參數(shù)一:/C表示讓程序顯示設(shè)置對話框,參數(shù)二:7987表示該屬性頁的句柄。)

當Windows需要運行屏保時會在調(diào)用屏保的后面加上一個參數(shù)。

如:myscr.scr /S(參數(shù):/S表示讓屏保運行。)

好了,知道了Windows如何讓屏保運行的三種方式后,接下來就要討論如何實現(xiàn)它們了。

實現(xiàn)原理:Windows通過某種方式調(diào)用屏保,屏保知道了它此時要干什么便會在當前環(huán)境中搜索是否有相同的實例存在。如果該實例的運行方式與此次要啟動的運行方式不同則關(guān)閉前個實例,如果該實例的運行方式與此次要啟動的運行方式相同則關(guān)閉此次運行的實例。

顯然要實現(xiàn)這種方法靠VB的App.PrevInstance是不可行的。因為我們要達到的目的是:偵測到前一個實例后要關(guān)閉它然后啟動程序。而App.PrevInstance屬性只能返回當前是否已啟動一個應(yīng)用程序的實例而不能對前個實例做些什么。(實例 簡單地說就是相同的對象集合——同一程序。)在實現(xiàn)此方法之前首先向大家介紹三條API函數(shù):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用于取得窗體的類名。調(diào)用成功后返回類名長度,失敗返回零。函數(shù)需要三個參數(shù):參數(shù)一.窗體的句柄,參數(shù)二.存放類名的緩沖,參數(shù)三.緩沖的大小。

FindWindow用于尋找窗體。調(diào)用成功后返回窗體的句柄,失敗返回零。函數(shù)需要兩個參數(shù):參數(shù)一.窗體的類名,參數(shù)二.窗體的標題。

SendMessage用于向窗體發(fā)送一消息。函數(shù)需要四個參數(shù):參數(shù)一.窗體的句柄,參數(shù)二:發(fā)送的消息名稱,參數(shù)三、四.分別表示消息所附帶的參數(shù)。

使用了這三個函數(shù)便可輕易地實現(xiàn)關(guān)閉前有一個已啟動的實例從而達到我們的目的。

其次我們要實現(xiàn)如何讓屏幕保護程序顯示在預(yù)覽框中(“小屏幕”)。

要讓屏幕保護程序在預(yù)覽框中顯示必須動態(tài)地改變窗口的樣式使之成為“小屏幕”的子窗體,這樣才能使預(yù)覽框關(guān)閉時得到關(guān)閉消息。動態(tài)地改變窗口的樣式可以使用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的作用用于得到窗體的樣式。調(diào)用成功后返回窗體的樣式。函數(shù)需要兩個參數(shù):參數(shù)一.窗體的句柄,參數(shù)二.要取得窗體的樣式只需使用常數(shù)GWL_STYLE。

SetWindowLong的作用用于設(shè)置窗體的樣式。函數(shù)需要三個參數(shù):參數(shù)一.窗體的句柄,參數(shù)二.要設(shè)置窗體的樣式只需用常數(shù)GWL_STYLE,參數(shù)三.要設(shè)置窗體的樣式。

SetParent的作用用于設(shè)置子窗體屬于哪個父窗體。函數(shù)需要兩個參數(shù):參數(shù)一.子窗體的句柄,參數(shù)二.父窗體的句柄。

知道了以上兩點就可編寫出標準的屏保。(關(guān)于效果就看你自己的了?。┘埳险劚艘魂嚲鸵鋵嵉秸嬲木幊躺狭?。為了著重講解屏保的實現(xiàn)方法故將屏保的效果簡單化。

首先新建一工程再添加一窗口,各屬性設(shè)置如下:

窗口 名稱 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=“屏保預(yù)覽(demo)”

Public Const WM_SET=“屏保設(shè)置(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 '存放命令行參數(shù)

GetClassName Frm_Setup.hwnd, ClassName, 64 ’取得窗口的類名

ExeCmd=UCase(Command$) ’將調(diào)用的屏保的參數(shù)轉(zhuǎn)換成大寫后存放在變量ExeCmd里

If Not (InStr(ExeCmd,“/P”)=0)Then ’檢查屏保的調(diào)用參數(shù)中是否有“/P”參數(shù)

If Not (FindWindow(ClassName, WM_LOOK)=0)Then End ’如果找到已有同一個運行方式的實例存在則程序結(jié)束

ClosePreWindow ClassName, WM_SET ’關(guān)閉前面已啟動的其他運行方式的實例

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) ’如果窗口已找到則關(guān)閉它

End Sub

Public Sub SCR_Look()

Dim LookScrWnd As Long

Dim Style As Long

Dim LookRect As RECT

Frm_Run.Caption=WM_LOOK ’賦上具有相應(yīng)運行方式的標題

LookScrWnd=Val(Right(Command$, Len(Command$) - 2)) ’取得小屏幕的窗口句柄

Style=GetWindowLong(Frm_Run.hwnd, GWL_STYLE) ’取得窗口的樣式

Style=Style Or WS_CHILD ’在窗口的樣式中加入子窗體常數(shù)

SetWindowLong Frm_Run.hwnd, GWL_STYLE, Style ’改變窗體的樣式

SetParent Frm_Run.hwnd, LookScrWnd ’設(shè)置窗體的父窗體

GetClientRect LookScrWnd, LookRect ’取得小屏幕的大小

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

NOZORDER Or SWP_NOACTIVATE Or SWP_SHOWWINDOW

'顯示窗體并將窗體的大小設(shè)置為小屏幕的大小以便覆蓋小屏幕

End Sub

Public Sub Scr_Setup()

Frm_Run.Caption=WM_SET ’賦上具有相應(yīng)運行方式的標題

Frm_Setup.Show

End Sub

Public Sub Scr_Run()

Frm_Run.Caption = WM_RUN ’賦上具有相應(yīng)運行方式的標題

ShowCursor False ’隱藏鼠標

Frm_Run.Move 0, 0, Screen.Width, Screen.Height

Frm_Run.Show

End Sub

Public Sub CloseSCR()

ShowCursor True ’顯示鼠標

Unload Frm_Setup ’卸載窗體關(guān)閉屏保

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 ’定義循環(huán)變量

Dim OldX As Integer ’定義存放舊的鼠標水平坐標

Dim OldY As Integer ’定義存放舊的鼠標垂直坐標

Dim Pic(1) As New StdPicture ’定義一個圖片類的數(shù)組

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

If Mod_Main.Scan_RUN Then ’如果此時是在運行屏保則關(guān)閉屏保

Mod_Main.CloseSCR

End If

End Sub

Private Sub Form_Load()

i=1 ’為循環(huán)變量賦初值

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 ’如果此時是在運行屏保則關(guān)閉屏保

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 ’關(guān)閉屏保

End Sub

Private Sub Timer_Mov_Timer()

If (i=2) Then

i=1 ’如果循環(huán)變量大于圖片的數(shù)量則變量賦為1

Else

i=i+1 ’否則循環(huán)變量加一

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目錄里才可在屏保設(shè)置中見到喔?。ǔ绦蛟赩B 5.0中編寫并運行通過。)

vb.net 屏幕保護程序

系統(tǒng)就有這個屏保啊!~!

Option EXPlicit

Dim quitflag As Boolean '聲明終止程序標志變量

Dim lleft

'聲明隱藏或顯示鼠標的API函數(shù)

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))

'裝載命令行參數(shù)

Case "/S" '在顯示器屬性對話框中單擊了

預(yù)覽按鈕或屏幕保護程序被系統(tǒng)正常調(diào)用。

Show

'全屏顯示Form1窗體

Randomize

'初始化隨機數(shù)生成器

X = ShowCursor(False)

'隱藏鼠標

BackColor = VBBlack

Do

Timer2.Enabled = True

'啟動Timer2 ,顯示屏幕保護滾動文字

DoEvents

'轉(zhuǎn)讓控制權(quán),以便檢測鼠標和按鍵行為

Loop Until quitflag = True

'運行屏幕保護滾動文字直至有鼠標和按鍵行為

Timer2.Enabled = False

'終止?jié)L動文字

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

如何用VB.NET寫一個簡單的屏幕保護程序?

在窗體上建立2個文本框text1和text2,一個按鈕command1,text1里面輸入你要轉(zhuǎn)換的字符串,text2里面顯示結(jié)果,代碼如下:

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

引號前面怎么自動給加了個“\”?用的時候請手動把那幾個“\”去掉


本文題目:關(guān)于vb.net防止進入屏保的信息
轉(zhuǎn)載來于:http://weahome.cn/article/hihhhc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部