所謂API就是“應用程序接口”(ApplicationProgramingInterface),是一些用C語言編寫,由操作系統自身調用的函數。WindowsAPI函數由許多“動態鏈接庫”或DLL組成。在32位Windows中,核心的Windows
APIDLL有如下一些:
gdi32.dll----圖形顯示界面的API。
kernel32.dll----處理低級任務(比如內存和任務管理)的API。
user32.d11----處理窗口和消息(VisualBasic程序員能把其中一些當作事件訪問)的API。
還不斷有新的API出現,處理新的操作系統擴展,比如E-MAIL、聯網和新的外設。
由於WindowsAPI函數不是VisualBasic的內部函數,所以在使用它們之前必須顯式地加以聲明。要想得到正確格式化的函數聲明,可以訪問WINAPI目錄下的文件WIN32API.TXT。
本文只對Win95系統的API函數加以說明並調用Win95的內置功能。
重新啟動計算機的實現
在Windows下安裝過程序的用戶可能都有這樣的體會,當安裝完某些應用程序後,安裝程序會要求重新啟動計算機以使設置生效。那麼,如果要用VB程序重新啟動計算機該如何實現呢?其實利用ExitWindowsEx函數即可。
程序的編寫
1.首先運行VB,然後新建一個工程(工程類型為標准EXE),然後雙擊Form1窗體,進入代碼(Code)輸入框,在其中輸入:
PrivateDeclareFunctionExitWindowsExLib"user32"(ByValuFlagsAsLong,ByValdwReserved
AsLong)AsLong
2.點擊“工具箱”中的commandbutton(命令按鈕)工具,即可在窗體Form1中加入一個命令按鈕,然後將該按鈕屬性中的Caption值定義為“重新啟動”。完成之後雙擊該按鈕,進入代碼(code)輸入框輸入以下代碼:
PrivateSubCommand1_Click()
ExitWindowsEx&H43,0
EndSub
程序的執行
程序輸入完成後,點擊VB“運行”菜單中的“啟動”或“全面編譯”命令,然後點擊“重新啟動”按鈕,即可重新啟動計算機。
磁盤格式化
在Windows9X中,當用鼠標右鍵單擊“我的電腦”中的“3.5軟盤A”然後在出現的右鍵菜單中選擇“格式化”選項,就將彈出標准的“磁盤格式化”窗口。下面我們來看看如何在應用程序中利用函數輕松調用Windows95標准的“磁盤格式化”窗口,實現對磁盤相應的操作功能。
程序的編寫
1.與上例相同,首先運行VB,新建一個標准工程,然後利用“工具箱”在Form1窗體中加入一個命令按鈕對象,將該命令按鈕屬性中的Caption值定義為“軟盤格式化”。完成之後雙擊該按鈕,在代碼輸入框中輸入以下代碼:
PrivateSubCommand1_Click()
CallFormatFloppy'調用FormatFloppy過程
EndSub
2.然後用鼠標右擊窗體,選擇右鍵菜單中的“添加/添加模塊”選項,然後在出現的選擇框中選擇“模塊”類型,接著在出現的模塊代碼輸入框中加入以下代碼:(注:模塊是指一組聲明的集合,其後為過程)
'通用聲明
PublicConstWM_CLOSE=&H10
DeclareFunctionFindWindowLib"user32"Alias"FindWindowA"(ByVallpClassNameAsAny,ByVal
lpWindowNameAsAny)AsLong
DelareFunctionGetWindowsDirectoryLib"kernel32"Alias"GetWindowsDirectoryA"(ByVallpBuffer
AsString,ByValnSizeAsLong)AsLong
DeclareFunctionSetWindowPosLib"user32"(BvValhwndAsLongByValhWndInsertAfterAsLong,
ByValXAslong,ByValyAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsAsLong)AsLong
DeclareFunctionGetDesktopWindowLib"user32"()AsLong
DeclareFunctionLockWindowUpdateLib"user32"(ByValhwndLockAsLong)AsLong
DeclareFunctionGetWindowRectLib"user32"(ByVayhwndAsLong,lpRectAsRECT)AsLong
DeclareSubSleepLib"kernel32"(ByValdwMillisecondsAsLong)
TypeRECT
LeftAsLong
TopAsLong
RightAsLong
BottomAsLong
EndType
TypePOINTAPI
XAsLong
yAsLong
EndType
ConstSWP_NOSIZE=&H1
ConstSWP_NOZORDER=&H4
'FormatFloppy()過程聲明
PublicSubFormatFloppy()
DimsBufferAsString,WindirAsString,ProcsAsString,X
DimlResultAsLong
sBuffer=String$(255,0)
lResult=GetWindowsDirectory(sBuffer,Len(sBuffer))
Windir=Trim(sBuffer)
Procs=Left(Windir,lResult)&"
undll32.exeshell32.dll,SHFormatDrive"
CallCenterDialog("Format-3?Floppy(A:)")
X=Shell(Procs,1)
CallCenterDialog("Format-3?Floppy(A:)")
k=LockWindowUpdate(0)
EndSub
'CenterDialog過程聲明
PublicSubCenterDialog(WinTextAsString)
DoEvents
OnErrorResumeNext
DimD3AsLong
D3=LockWindowUpdate(GetDesktopWindow())
Dimwdth
Dimhght
DimScrwdth
DimScrhght
DimlpDlgRectAsRECT
DimlpdskrectAsRECT
DimhTaskBarAsLong
hTaskBar=FindWindow(0&,WinText)
CallGetWindowRect(hTaskBar,lpDlgRect)
wdth=lpDlgRect.Right-lpDlgRect.Left
hght=lpDlgRect.Bottom-lpDlgRect.Top
CallGetWindowRect(GetDesktopWindow(),lpdskrect)
Scrwdth=lpdskrect.Right-lpdskrect.Left
Scrhght=lpdskrect.Bottom-lpdskrect.Top
X=(Scrwdth-wdth)/2
y=(Scrhght-hght)/2
CallSetWindowPos(hTaskBar,0,X,y,0,0,SWP_NOZORDEROrSWP_NOSIZE)
DoEvents
EndSub
程序的執行
程序輸入完成後,點擊VB“運行”菜單中的“啟動”或“全面編譯”命令,點擊“軟盤格式化”按鈕後選擇要格式化的容量,即可對3.5英寸盤進行格式化操作。
調用版本信息框
在Windows程序中,點擊“幫助”菜單中的“關於XXX”選項後,就會彈出該程序的版本信息框。其實,在
VB中,調用shellAbout函數不但可以實現標准的軟件版本信息框,還可以隨意更改其中的內容呢!
程序的編寫
1.與前面類似,首先運行VB並新建一個標准工程,然後雙擊Form1窗口,在代碼輸入框中輸入ShellAbout過
程代碼:
PrivateDeclareFunctionShellAboutLib"shell32.dlI"Alias"ShellAboutA"(ByValhWndAsLong,ByValszAppAsString,ByValszOtherStuffAsString,ByValhIconAsLong)AsLong
其中ShellAbout聲明如下:
HWnd設置窗口句柄,szApp設置窗口的“Caption”,szOtherStuff在“版權所有”和“使用權”之間的空白
處增加額外說明。
2.然後利用“工具箱”在Form1窗體中加入一個命令按鈕對象,將該命令按鈕屬性中的Caption值定義為“版
本信息框”。完成之後雙擊該按鈕,在代碼輸入框輸入以下代碼:
PrivateSubCommand1_Click()
CallShellAbeut(hWnd,"何發武天使工作室!","版本信息框"&VbCrLf&"上帝與你同在!阿彌陀佛!",0)
EndSub
程序的執行
程序輸入完成後,點擊VB“運行”菜單中的“啟動”或“全面編譯”命令,點擊“版本信息框”按鈕,即可查看當前軟件的版本信息。
查看“屬性”
在Windows9X中,增加了一個全新的概念--“屬性”,每個對象都擁有自己的“屬性”,在“屬性”窗口裡是關於對象的詳細描述,並且不同的對象“屬性”窗口的說明是不同的。我們可以用ShellExecuteEX函數直接調用“屬性”標准窗口。下面的程序功能相當於用鼠標右鍵單擊根目錄下的“Autoexec.bat”並選擇“屬性”時,彈出的標准“屬性”窗口。
程序的編寫
1.首先運行VB,然後新建一個標准工程,然後利用“工具箱”在Form1窗體中加入一個命令按鈕對象,將該命令按鈕屬性中的Caption值定義為“屬性按鈕”。完成之後雙擊該按鈕,在代碼輸入框中輸入以下代碼:
PrivateSubCommand1_Click()
DimrAsLong
DimFileNameAsString
FileName="c:autoexec.bat"
r=ShowProperties(FileName,Me.hwnd)
Ifr<=32ThenMsgBox"Error!NOc:autoexec.batFile"
EndSuB
2.然後用鼠標右擊窗體,選擇右鍵菜單中的“添加/添加模塊”選項,然後在出現的選擇框中選擇“模塊”類型,接著在出現的模塊代碼輸入框中加入以下代碼:
'通用聲明
OptionExplicit
TypeSHELLEXECUTEINFO
cbSizeAslong
FmaskAsLong
hwndAsLong
lpVerbAsString
lpFileAsString
lpParametersAsString
lpDirectoryAsString
nShowAsLong
hInstAppAsLong
lpIDListAsLong
lpClassAsString
hkeyClassAsLong
dwHotKeyAsLong
hIconAsLong
hProcessAsLong
EndType
PublicConstSEE_MASK_INVOKEIDLIST=&HC
PublicConstSESE_MASK_NOCLOSEPROCESS=&H40
PublicConstSEE_MASK_FLAG_NO_UI=&H400
DeclareFunctionShellExecuteEXLib"shell32.dll"Alias"ShellExecuteEx"(SEIAsSHELLEXECUTEINFO)AsLong
'ShowProperties過程
PublicFunctionShowProperties(FileNameAsString,OwnerhWndAsLong)AsLong
DimSEIASSHELLEXECUTEINFO
DimrAsLong
WithSEI
.cbSize=Len(SEI)
.fMask=SEE_MASK_NOCLOSEPROCESSOrSEE_MASK_INVOKEIDLISTOrSEE_MASK_FLAG_NO_UI
.hwnd=OwnerhWnd
.lpVerb="properties"
.lpFile=FileName
.lpParameters=vbNullChar
.lpDirectory=vbNullChar
.nShow=0
.hInstApp=0
.lpIDList=0
EndWith
r=ShellExecuteEX(SEI)
ShowProperties=SEI.hInstApp
EndFunction
程序的執行
程序輸入完成後,點擊VB“運行”菜單中的“啟動”或“全面編譯”命令,點擊“屬性按鈕”按鈕,即可查看C:AUTOEXEC.BAT的屬性。->