API使用集錦
記載Windows使用的時(shí)間
有時(shí)候你需要記下每次Windows開啟和關(guān)閉的時(shí)間,下面這個(gè)小程序就可以完成這個(gè)功能,你可以把它放在Windows開始菜單的“啟動(dòng)”文件夾里面,這樣當(dāng)你進(jìn)入Windows時(shí),這個(gè)小程序就會(huì)自動(dòng)啟動(dòng)(不可見),并在你指定的文件中寫下當(dāng)時(shí)的時(shí)間,在你推出Windows系統(tǒng)時(shí),小程序會(huì)關(guān)閉并記下離開的時(shí)間,并關(guān)閉記錄文件。
Private Sub Form_Load()
Left = -10000
Top = -10000
Open "c:\apps\log.txt" For Append As #1
Print #1, "On: " & CStr(Now)
Close #1
End Sub
Private Sub Form_Unload(Cancel As Integer)
Open "c:\apps\log.txt" For Append As #1
Print #1, "Off:" & CStr(Now)
Close #1
End
End Sub
--------------------------------------------------------------------------------
怎樣關(guān)閉一個(gè)正在運(yùn)行的程序
你可以使用API函數(shù)FindWindow和PostMessage去尋找指定的窗口,并關(guān)閉它。下面的例子教給你怎樣找到并關(guān)掉一個(gè)Caption為“Caluclator”的程序。
Dim winHwnd As Long
Dim RetVal As Long
winHwnd = FindWindow(vbNullString, "Calculator")
Debug.Print winHwnd
If winHwnd <> 0 Then
RetVal = PostMessage(winHwnd, WM_CLOSE, 0&, 0&)
If RetVal = 0 Then
MsgBox "置入消息錯(cuò)誤!"
End If
Else
MsgBox "Calculator沒有打開!"
End If
為了讓以上的代碼工作,你必須在模塊文件中什么以下API函數(shù):
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Declare Function PostMessage Lib "user32" Alias _
"PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
Public Const WM_CLOSE = &H10
--------------------------------------------------------------------------------
我怎樣確定我的程序是否在運(yùn)行?
把以下代碼放在第一個(gè)窗體的Form_Load事件中:
If App.PrevInstance = True Then
Call MsgBox("這個(gè)程序正在運(yùn)行!",_
vbExclamation)
End
End If
--------------------------------------------------------------------------------
怎樣延遲一個(gè)VB程序?
延遲在VB中非常有意義!舉個(gè)例子,有時(shí)你需要等待一個(gè)額外的過程完成,才能運(yùn)行程序下面的代碼。延遲使程序擺脫了CPU的運(yùn)算速度對(duì)程序運(yùn)行速度的影響,但是在VB中卻沒有延遲這個(gè)很多語言都有的現(xiàn)成函數(shù),所以還要依靠API函數(shù),請(qǐng)看以下的代碼:
Declare Sub Sleep Lib "kernel32" _
(ByVal dwMilliseconds As Long)
'延遲1秒
Call Sleep(1000)
--------------------------------------------------------------------------------
怎樣改變雙擊鼠標(biāo)的時(shí)間間隔?
在較短時(shí)間里連續(xù)的點(diǎn)擊兩次鼠標(biāo)就會(huì)造成鼠標(biāo)雙擊事件。你可以調(diào)用API函數(shù)SetDoubleClickTime改變鼠標(biāo)雙擊所需要的時(shí)間,它只有一個(gè)參數(shù),并可精確到毫秒級(jí)。
Declare Function SetDoubleClickTime _
Lib "user32" Alias "SetDoubleClickTime" _
(ByVal wCount As Long) As Long
提示:這種改變將影響到整個(gè)操作系統(tǒng)。
--------------------------------------------------------------------------------
怎樣找到鼠標(biāo)指針的XY坐標(biāo)?
在很多的作圖軟件中都有一個(gè)小的區(qū)域顯示當(dāng)前屏幕上的光標(biāo)位置,這利用API函數(shù)非常容易做到,下面的例子將演示使用代碼如何返回當(dāng)前光標(biāo)的XY的坐標(biāo)值。
步驟:
在VB5中建立一個(gè)新項(xiàng)目文件,F(xiàn)orm1使用默認(rèn)設(shè)置.
選擇菜單的“Project/add Module”,建立一個(gè)新的模塊文件“Moudule1”。
輸入以下代碼聲明API函數(shù)。
Option Explicit
Type POINTAPI ' Declare types
x As Long
y As Long
End Type
Declare Function GetCursorPos Lib "user32" _
(lpPoint As POINTAPI) As Long ' Declare API
把焦點(diǎn)移到Form1,添加兩個(gè)標(biāo)簽對(duì)象(Label)和一個(gè)計(jì)時(shí)器對(duì)象(Timer1),把計(jì)時(shí)器的Interval屬性設(shè)為1,然后雙擊Form1的任何區(qū)域,在代碼窗口中輸入:
Option Explicit
Dim z As POINTAPI ' 聲明變量
Private Sub Timer1_Timer()
GetCursorPos z ' 得到坐標(biāo)
Label1 = "x: " & z.x ' 得到X坐標(biāo)
Label2 = "y: " & z.y ' 得到Y(jié)坐標(biāo)
End Sub
5、按F5運(yùn)行程序,移動(dòng)鼠標(biāo)注意觀察兩個(gè)標(biāo)簽對(duì)象的變化。
--------------------------------------------------------------------------------
怎樣捕捉窗體的鼠標(biāo)?
這個(gè)技巧將向您展示如何使用捕捉光標(biāo)的API函數(shù)阻止鼠標(biāo)指針移出窗體。
注意。喝绻绑w的BorderStyle屬性被設(shè)為sizeable(2或5),則當(dāng)你改變窗體的大小時(shí)鼠標(biāo)就會(huì)“逃脫”程序的監(jiān)控!因此你最好把BorderStyle設(shè)為0、1、3或4。
步驟:
把以下代碼添加如模塊:
Option Explicit
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Declare Function ClipCursor Lib "user32" _
(lpRect As Any) As Long
Public Sub DisableTrap(CurForm As Form)
Dim erg As Long
'聲明過程變量
'設(shè)置新坐標(biāo)
Dim NewRect As RECT
CurForm.Caption = "釋放鼠標(biāo)"
With NewRect
.Left = 0&
.Top = 0&
.Right = Screen.Width / Screen.TwipsPerPixelX
.Bottom = Screen.Height / Screen.TwipsPerPixelY
End With
erg& = ClipCursor(NewRect)
End Sub
Public Sub EnableTrap(CurForm As Form)
Dim x As Long, y As Long, erg As Long
'聲明過程變量
'設(shè)置新坐標(biāo)
Dim NewRect As RECT
'得到TwipsperPixel
'窗體的ScaleMode必須設(shè)為Twips!。
x& = Screen.TwipsPerPixelX
y& = Screen.TwipsPerPixelY
CurForm.Caption = "捕捉鼠標(biāo)"
'設(shè)置光標(biāo)的范圍
With NewRect
.Left = CurForm.Left / x&
.Top = CurForm.Top / y&
.Right = .Left + CurForm.Width / x&
.Bottom = .Top + CurForm.Height / y&
End With
erg& = ClipCursor(NewRect)
End Sub
2、在窗體上添加兩個(gè)命令按鈕(Command Button)。
3、把以下代碼添加如Form1。
Private Sub Command1_Click()
EnableTrap Form1
End Sub
Private Sub Command2_Click()
DisableTrap Form1
End Sub
Private Sub Form_Unload(Cancel As Integer)
'程序結(jié)束時(shí)釋放鼠標(biāo)。
DisableTrap Form1
End Sub
--------------------------------------------------------------------------------
怎樣使我的程序總處于屏幕最前方?(Always on top)
如果你想讓你的程序處于前方,可以使用以下代碼:
Form1.ZOrder
配合計(jì)時(shí)器使用,每隔一段很小的時(shí)間間隔調(diào)用這種方法可以使窗體Form1處于屏幕前方,但是用戶還是可能使別的窗體在短暫的時(shí)間里處于Form1的上方。所以這種方法并不能使窗體真正的實(shí)現(xiàn)Always on top,而要真正的Always on top可以使用API函數(shù)SetWindowPos,代碼如下:
'聲明函數(shù):
Declare Function SetWindowPos Lib "user32" _
(ByVal h%, ByVal hb%, ByVal x%, ByVal y%, _
ByVal cx%,ByVal cy%,ByVal f%) As Integer
Global Const SWP_NOMOVE = 2
Global Const SWP_NOSIZE = 1
Global Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Global Const HWND_TOPMOST = -1
Global Const HWND_NOTOPMOST = -2
'把窗體放在最前面:
res% = SetWindowPos (Form1.hWnd, HWND_TOPMOST, _
0, 0, 0, 0, FLAGS)
'如果res%=0, 就產(chǎn)生錯(cuò)誤
'使窗體恢復(fù)普通模式:
res% = SetWindowPos (Form1.hWnd, HWND_NOTOPMOST, _
0, 0, 0, 0, FLAGS)
--------------------------------------------------------------------------------
怎樣得到文本框(TextBox)中的文本行數(shù)?
計(jì)算文本框中輸入文本的行數(shù)可以使用SendMessage函數(shù)返回,當(dāng)一行文字發(fā)生環(huán)繞時(shí),它將被當(dāng)作新的一行,而被非簡(jiǎn)單的計(jì)算文本中的換行符個(gè)數(shù)。
把以下API函數(shù)的聲明添入模塊文件的general declarations區(qū)域,如果您使用的是VB4-32或VB5,也可以把此聲明添入Form1的general declarations中,并把所有的“Public”更換為“Private”。
Option Explicit
Public Declare Function SendMessageLong Lib _
"user32" Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Public Const EM_GETLINECOUNT = &HBA
Form Code
Sub Text1_Change()
Dim lineCount as Long
On Local Error Resume Next
'得到/顯示文本行數(shù)
lineCount = SendMessageLong(Text1.hwnd, EM_GETLINECOUNT, 0&, 0&)
Label1 = Format$(lineCount, "##,###")
End Sub
注釋:
為了使本程序成功,請(qǐng)?jiān)谠O(shè)計(jì)階段把文本框的Multiline屬性設(shè)為True。
--------------------------------------------------------------------------------
怎樣使程序的標(biāo)題條閃爍?
建立新的項(xiàng)目文件,添加模塊文件,并填寫如下代碼:
Public Declare Function FlashWindow _
Lib "user32" (ByVal hwnd As Long, _
ByVal bInvert As Long) As Long
在窗體中添加兩個(gè)按鈕和一個(gè)計(jì)時(shí)器,并用設(shè)置以下屬性:
command1.caption="開始"
command2.caption="停止"
timer1.interval=500 '每0.5秒閃爍一次
timer1.enabled=false
Private Sub Timer1_Timer()
a& = FlashWindow(Me.hwnd, 1)
End Sub
Private Sub Command1_Click()
Timer1.Enabled = True
End Sub
Private Sub Command2_Click()
Timer1.Enabled = False
End Sub
(責(zé)任編輯:admin)
- ·API函數(shù)詳細(xì)解釋
- ·Access從剪切版里復(fù)制和粘貼數(shù)據(jù)
- ·Access利用api實(shí)現(xiàn)打開/關(guān)閉光驅(qū)
- ·應(yīng)用程序開機(jī)自動(dòng)啟動(dòng)(注冊(cè)表操作技巧
- ·Access VBA 判斷網(wǎng)絡(luò)是否連通的多種辦
- ·什么是ADP,了解ADP的優(yōu)缺點(diǎn)
- ·優(yōu)秀產(chǎn)品大全--通用票據(jù)打印軟件(新)
- ·[技巧分享]多條Shell語句執(zhí)行導(dǎo)致判斷
- ·在access中可以調(diào)用API函數(shù)GetFileInfo
- ·Access API集中營--增加臨時(shí)使用的字體
- ·API ShellExecute 功能說明及應(yīng)用示例
- ·在VB中使用API函數(shù)(什么是API? )
- ·API實(shí)現(xiàn)完美的圖片出現(xiàn)效果(轉(zhuǎn))
- ·API 設(shè)置調(diào)整系統(tǒng)當(dāng)前時(shí)間
- ·如何檢測(cè)以及設(shè)置鍵盤狀態(tài)
- ·不關(guān)閉當(dāng)前數(shù)據(jù)庫COPY當(dāng)前數(shù)據(jù)庫
- ·API函數(shù)詳細(xì)解釋
- ·Access從剪切版里復(fù)制和粘貼數(shù)據(jù)
- ·Access利用api實(shí)現(xiàn)打開/關(guān)閉光驅(qū)
- ·應(yīng)用程序開機(jī)自動(dòng)啟動(dòng)(注冊(cè)表操作技巧)
- ·Access VBA 判斷網(wǎng)絡(luò)是否連通的多種辦法(函
- ·什么是ADP,了解ADP的優(yōu)缺點(diǎn)
- ·優(yōu)秀產(chǎn)品大全--通用票據(jù)打印軟件(新)
- ·[技巧分享]多條Shell語句執(zhí)行導(dǎo)致判斷出錯(cuò)
- ·在access中可以調(diào)用API函數(shù)GetFileInformat
- ·Access API集中營--增加臨時(shí)使用的字體
- 發(fā)表評(píng)論
-
請(qǐng)自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。評(píng)價(jià):
中立
好評(píng)
差評(píng)
匿名?
- 最新評(píng)論 進(jìn)入詳細(xì)評(píng)論頁>>