注册 | 登录
收藏 | 帮助
热门文章
编辑推荐
相关文章  
Win XP中震荡波后应采取的措施
Win 2000防毒从安装系统时开始
Win XP SP2拖放IE窗口可能引发黑
Linux系统下的病毒发展及其分类
用WinRAR解析木马病毒的捆绑原理
识破用WinRAR捆绑的木马
走近 WSH(Windows Scripting Hos
利用Windows控制台删除无法删除的
用Windows自带工具打造“免检”木
从Melissa到Zotob:Windows蠕虫1
您现在的位置: 顶尖设计 >> IT学院 >> 编程开发 >> VB >> 文章正文
Win95系统API函数大揭秘
作者:ShowMan  来源:csdn  点击:  更新:2006-12-19
简介:
Win95以其崭新精致的外观、简便快捷的操作方式,让你尽享操作平台之乐趣。同属Microsoft公
司的Visual Basic不仅仅是一门计算机语言,还是一个集应用程序开发、测试、查错功能于一体的功能
强大的集成式开发环境, 数百万的程序员受益于此。
Visual Basic一个强大的特性是它具有调用驻留在动态连接库(DLL)文件中的函数功能,其中包
括由Windows提供和使用的所有函数。对几百个函数以及DLL所包含的其它函数的存取将Visual Basic
的功能进行了大大的扩充,其功能远远超出其它语言,真有种“信手拈来”之神韵,毕竟Visual Basic
是Microsoft公司的“嫡系部队”。 你可以在你的应用程序中利用WINDOWS API提供的数百个API接口
函数进行扩充,加速应用程序的建立,减少程序开发的重复性(比尔.盖茨找你打版权官司可不关我事!
——喔喔!)
所谓API就是“应用程序接口”(Application Programing Interface),是一些用C语言编写由操作系统
自身调用的函数。Windows API函数由许多“动态连接库”或DLL组成。在32位Windows中,核心的Windows
API DLL有如下一些:
gdi32.dll--------图形显示界面的API
kernel32.dll-----处理低级任务(比如内存和任务管理)的API
user32.dll-------处理窗口和消息(Visual Basic程序员能把其中一些当作事件访问)的API
还不断有新的API出现,处理新的操作系统扩展,比如E-MAIL、联网和新的外设。
由于Windows API函数不是Visual Basic内部函数,所以在使用它们之前必须显式地加以声明。要
想得到正确格式化的函数声明,可以访问WINAPI目录下的文件WIN32API.TXT。
    本文只对Win95系统API函数加以说明并调用Win95内置功能。例如,我们可以直接调用标准化的“重
新启动”、“磁盘格式化”、调用并更改标准“关于窗口”、查看“属性”、 设置“墙纸”、 建立快捷键、
确定内存、读写“注册表”、在建立状态栏图标等。   
? 重新启动
有些应用程序安装完毕要求重新启动一次,以使设置生效,可利用ExitWindowsEx函数实现。
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved
As Long) As Long

Private Sub Command1_Click()
ExitWindowsEx &H43, 0
End Sub
? 磁盘格式化
当鼠标右键单击“3.5软盘A”并选择“格式化”时,则弹出标准的“磁盘格式化”窗口。我们
也可以在应用程序中利用函数轻松调用Windows 95标准的“磁盘格式化”窗口,以实现对磁盘相应
的操作功能。
窗体加入如下代码:
Private Sub Form_Click()
FormatFloppy
End Sub
加入代码如下的模块:
Public Const WM_CLOSE = &H10
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal
lpWindowName As Any) As Long
Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal
lpBuffer As String, ByVal nSize 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 GetDesktopWindow Lib "user32" () As Long
Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long
Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Type POINTAPI
X As Long
y As Long
End Type

Const SWP_NOSIZE = &H1
Const SWP_NOZORDER = &H4

Public Sub FormatFloppy()
Dim sBuffer As String, Windir As String, Procs As String, X
Dim lResult As Long
sBuffer = String$(255, 0)
lResult = GetWindowsDirectory(sBuffer, Len(sBuffer))
Windir = Trim(sBuffer)
Procs = Left(Windir, lResult) & "\rundll32.exe shell32.dll,SHFormatDrive"
Call CenterDialog("Format - 3? Floppy (A:)")
X = Shell(Procs, 1)
Call CenterDialog("Format - 3? Floppy (A:)")
k = LockWindowUpdate(0)
End Sub

Public Sub CenterDialog(WinText As String)
DoEvents
On Error Resume Next
Dim D3 As Long
D3 = LockWindowUpdate(GetDesktopWindow())
Dim wdth%
Dim hght%
Dim Scrwdth%
Dim Scrhght%
Dim lpDlgRect As RECT
Dim lpdskrect As RECT
Dim hTaskBar As Long
hTaskBar = FindWindow(0&, WinText)
Call GetWindowRect(hTaskBar, lpDlgRect)
wdth% = lpDlgRect.Right - lpDlgRect.Left
hght% = lpDlgRect.Bottom - lpDlgRect.Top
Call GetWindowRect(GetDesktopWindow(), lpdskrect)
Scrwdth% = lpdskrect.Right - lpdskrect.Left
Scrhght% = lpdskrect.Bottom - lpdskrect.Top
X% = (Scrwdth% - wdth%) / 2
y% = (Scrhght% - hght%) / 2
Call SetWindowPos(hTaskBar, 0, X%, y%, 0, 0, SWP_NOZORDER Or SWP_NOSIZE)
DoEvents
End Sub
? 调用“关于”窗口
在“帮助”菜单选择“关于XXX”会弹出标准“关于”窗口,利用ShellAbout函数不但可以调用
标准“关于”窗口,还可以随意更改其中内容呢!
ShellAbout声明如下:
HWnd设置窗口句柄,szApp设置窗口的“Caption”, szOtherStuff 在“版权所有”和“使用权”
之间的空白处增加额外说明。
Private Declare Function ShellAbout Lib "shell32.dll" Alias "ShellAboutA" (ByVal hWnd As Long,
ByVal szApp As String, ByVal szOtherStuff As String, ByVal hIcon As Long) As Long
Private Sub Form_Load()
Call ShellAbout(hWnd, "何发武天使工作室!", "调用标准的关于窗口" & vbCrLf & "上帝与你同在!
阿弥陀佛!", 0)
End Sub
    你还可以通过对注册表信息“动手术”来改变系统的“版权信息”运行REGEDIT,按照如下路径:
HKEY_LOCAL_MACHINE →SOFTWARE → Microsoft→Windows→ CurrentVersion →Version,就会找到
你计算机中“关于”版本的通用设置,你可以把Version的内容改为你心仪的设置,如“何发武天使工
作室”、“ 何发武野狼工作室”等。
? 查看“属性”
    Win95中增加了一个全新的概念——“属性”,每个对象都拥有自己的“属性”,在“属性”窗口里
是关于对象的详细描述, 并且不同的对象“属性”窗口的说明是不同的。我们可以用ShellExecuteEX函
数直接调用“属性”标准窗口。下述程序功能相当于当鼠标右键单击根目录下的“autoexec.bat”并选
择“属性”时,则弹出标准的“属性”窗口。
窗体加入如下代码:
Private Sub FORM_Click()
Dim r As Long
Dim FileName As String
FileName = "c:\autoexec.bat"
r = ShowProperties(FileName, Me.hwnd)
If r <= 32 Then MsgBox "Error"
End Sub
加入代码如下的模块:
Option Explicit
Type SHELLEXECUTEINFO
cbSize As Long
fMask As Long
hwnd As Long
lpVerb As String
lpFile As String
lpParameters As String
lpDirectory As String
nShow As Long
hInstApp As Long
lpIDList As Long
lpClass As String
hkeyClass As Long
dwHotKey As Long
hIcon As Long
hProcess As Long
End Type
Public Const SEE_MASK_INVOKEIDLIST = &HC
Public Const SEE_MASK_NOCLOSEPROCESS = &H40
Public Const SEE_MASK_FLAG_NO_UI = &H400

Declare Function ShellExecuteEX Lib "shell32.dll" Alias "ShellExecuteEx" _
(SEI As SHELLEXECUTEINFO) As Long
Public Function ShowProperties(FileName As String, OwnerhWnd As Long) As Long
Dim SEI As SHELLEXECUTEINFO
Dim r As Long
With SEI
.cbSize = Len(SEI)
.fMask = SEE_MASK_NOCLOSEPROCESS Or SEE_MASK_INVOKEIDLIST Or SEE_MASK_FLAG_NO_UI
.hwnd = OwnerhWnd
.lpVerb = "properties"
.lpFile = FileName
.lpParameters = vbNullChar
.lpDirectory = vbNullChar
.nShow = 0
.hInstApp = 0
.lpIDList = 0
End With
r = ShellExecuteEX(SEI)
ShowProperties = SEI.hInstApp
End Function
? 设置墙纸
墙纸是显示在桌面的图片或图像,是Win95的一个重要窗口。你可以通过改变列表中的文件来选择多
姿多采的墙纸。墙纸为Win95蒙上了一披美丽的面纱,我们可以利用SystemParametersInfo函数来揭开
它的“神秘面纱”并亲手为她营造异样的风采。
在窗体中增加List1控件,窗体加入如下代码:
Option Explicit
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA"
(ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long)
As Long
Const SPI_SETDESKWALLPAPER = 20
Const SPIF_UPDATEINIFILE = &H1 'update Win.ini Constant
Const SPIF_SENDWININICHANGE = &H2 'update Win.ini and tell everyone
Private Sub Form_Load()
Dim Temp As String
Temp = InputBox("Please Input A Directory", "Changer", "C:\WINDOWS\")
If Temp = "" Then End 'Cancel clicked
If Right$(Temp, 1) <> "\" Then Temp = Temp + "\"
List1.Tag = Temp
Temp = Temp + "*.bmp" 'Set the file filter (path + *.BMP)
Temp = Dir$(Temp)
Do While Temp$ <> ""
Temp = Dir$
    If Temp = "" Then Exit Do
List1.AddItem Temp
Loop
List1.AddItem "(None)"
Show
List1.SetFocus
List1.ListIndex = 0
End Sub
Private Sub list1_dblclick()
Dim Temp As String
Dim BMPFile As String
Temp = Tag
If List1.Text = "(None)" Then
BMPFile = "(none)"
Else
BMPFile = Temp + (List1)
End If
SystemParametersInfo SPI_SETDESKWALLPAPER, 0, ByVal BMPFile, SPIF_UPDATEINIFILE
End Sub

Private Sub List1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then list1_dblclick
End Sub
马上试试,当场把你的墙纸改变啦(不变不收钱)!爽吧!
? 建立快捷键
Win95中快捷方式提供了对常用程序和文档的访问捷径,你可以为桌面或文件夹中的任何程序、文档
或打印机添加快捷方式。VB5中利用fCreateShellLink函数可以为常用程序和文档快速建立建立快捷键。
fCreateShellLink的声明为:
Private Declare Function fCreateShellLink Lib "STKIT432.DLL" (ByVal lpstrFolderName As String,
ByVal lpstrLinkName As String, ByVal lpstrLinkPath As String, ByVal lpstrLinkArgs As String)
As Long
LpstrFolderName设置快捷方式的文件夹名称,lpstrLinkName设置快捷方式的标题名称,lpstrLinkPath
设置快捷方式所指向的应用程序的目录及文件名。简而言之,如下格式:
fCreateShellLink(Destinationpath, Shortcutname, SourcepathAppName, "")
    如下代码在“桌面”上为“d:\path\appname.exe”应用程序建立名为"Shortcut Title"的快捷方
式。
Private Declare Function fCreateShellLink Lib "STKIT432.DLL" (ByVal lpstrFolderName As String,
ByVal lpstrLinkName As String, ByVal lpstrLinkPath As String, ByVal lpstrLinkArgs As String)
As Long
Private Sub Form_Click()
lResult = fCreateShellLink("....\WINDOWS\DESKTOP", "Shortcut Title", "d:\path\appname.exe",
"")
End Sub
技巧:
如果想在“桌面”上建立快捷方式,则建立目标目录应该为“....\WINDOWS\DESKTOP”; 如果想在
“开始”菜单中建立快捷方式,则建立目标目录应该为“....\WINDOWS\Start Menu”; 如果想在“程
序”菜单中建立快捷方式,则建立目标目录应该为相应的“....C:\WINDOWS\Start Menu\Programs”中,
以此类推。
? 确定内存
我们经常要访问Windows管理的内存。对应用程序性能影响最大的因素是可用的内存容量,访问系
统内存在处理类似于位图文件之类的大文件时非常有用,因为程序通过交换文件(Swap)的方法,可以
获得比实际可用内存更大的内存。知道内存如何分配后,就可以读入内存值并操作大型数字文件。可以
用丰富的Win32 API函数确定Windows 的全局内存并操作数据文件,这些对于确定程序能否正常工作非
常有用。
dwLength                 数据结构的长度
dwMemoryLoad             内存使用百分比
dwTotalPhys             实际内存总字节数
dwAvailPhys             可用的实际内存字节数
dwTotalPageFile        分页文件总字节数
dwAvailPageFile        分页文件可用字节数
dwTotalVirtual             虚拟内存的总字节数
dwAvailVirtual             可用的虚拟内存字节数
加入代码如下的模块:
Type MEMORYSTATUS
dwLength As Long
dwMemoryLoad As Long
dwTotalPhys As Long
dwAvailPhys As Long
dwTotalPageFile As Long
dwAvailPageFile As Long
dwTotalVirtual As Long
dwAvailVirtual As Long
End Type
Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTA

[1] [2] 下一页






  • 上一篇文章:
  • 下一篇文章:
  • 分享此文:该页面添加到 Mister Wong 添加到雅虎Yahoo!收藏 Add to:Del.icio.us Post to Furl Digg this 添加到Google书签 reddit spurl blogmarks 365Key 评论  收藏  分享  打印
     我来说两句
    姓名:       验证码:   
    主页: 
    评分: 1分 2分 3分 4分 5分
    本频道近期热评文章:
      关于我们 | 联系我们 | 站点地图 | 广告投放 | 友情链接 | 在线留言 | 版权申明
    版权所有 © 2004-2007 顶尖设计(bobd.cn)
    未经授权禁止转载,摘编,复制本站内容或建立镜像. 沪ICP备07504942号 
    网络110
    报警服务