vb常用函数 下载本文

参数hMenu指定要删除的菜单句柄,调用如: lxn=GetSystemMenu(hwnd,false) DestroyMenu lxn

---------------------------------------- 取得指定菜单所包含菜单项数:GetMenuItemCount函数 声明:

Declare Function GetMenuItemCount Lib \参数简单:hMenu指定1个菜单句柄。 函数返回值为该菜单下包含的子菜单项数。 调用如:

s = GetMenuItemCount(GetSubMenu(GetMenu(form1.hwnd),0)) Print s

上例返回总句柄下第一个子菜单\文件\菜单下包含的子菜单项数。如为7。 --------------------------------------------------- 取得指定菜单下某子菜单项的命令ID号:GetMenuItemID

该函数返回1个菜单下指定位置的1个子菜单项的菜单ID号。如果指定的子菜单项是一分隔符,则函数返回值为0,声明:

Declare Function GetMenuItemID Lib \As Long

参数:hMenu--父菜单句柄。

nPos--子菜单项在父菜单中的位置,第1个子菜单项编号为0。 ----------------------------------------- 改变菜单项函数:ModifyMenuA函数 声明:

Declare Function ModifyMenuA Lib \nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpString As String) as long 参数:hMenu--欲改变的菜单的上级父菜单句柄。

nPosition--欲改变的子菜单项的标识符。如在wFlags参数中指定了MF_BYCOMMAND,这个参数就代表欲改变的子菜单项的命令ID号。如设置的是MF_BYPOSITION,这个参数就代表欲改变菜单项在上级父菜单中的位置(第一个菜单项的位置为零) wFlags--一系列常数标志的组合。详见菜单常数标志表

wIDNewItem--指定欲改变菜单项的新命令ID号。如在wFlags参数中指定MF_POPUP,就应是一个弹出式菜单的句柄。

lpString--如在wFlags参数中指定了MF_STRING标志,就代表欲设置到菜单项的字符串。如设置的是MF_BITMAP,就代表一个Long变量,其中包含了一个位图句柄。如设置的是MF_OWNERDRAW,那么这个值就会包括到DRAWITEMSTRUCT和MEASUREITEMSTRUCT结构中,并由windows在菜单项需要重画的时候发出

注:wFlags参数的下述组合形式是不允许的:MF_BYCOMMAND和MF_BYPOSITION;MF_CHECKED和MF_UNCHECKED;MF_MENUBARBREAK和MF_MENUBREAK;MF_DISABLED,MF_ENABLED和MF_GRAYED;MF_BITMAP,MF_STRING,MF_OWNERDRAW和MF_SEPARATOR 菜单常数标志表:

MF_BITMAP 菜单项是一幅位图。一旦设入菜单,这幅位图就绝对不能删除。所以不应该使用由vb的image属性返回的值

MF_BYCOMMAND 菜单项由菜单的命令ID指定

MF_BYPOSITION 菜单项由其在父菜单中的位置决定。零代表父菜单中的第一个子菜单项 MF_CHECKED 检查指定的菜单项。不能与vb的checked属性兼容 MF_DISABLED 禁止指定的菜单项。不与vb的enabled属性兼容 MF_ENABLED 允许指定的菜单项。不与vb的enabled属性兼容

MF_GRAYED 禁止指定的菜单项,并用浅灰色描述它。不与vb的enabled属性兼容

MF_MENUBARBREAK 在弹出式菜单中,将指定的菜单项放置于一个新列,并用一条垂直线分隔不同的列

MF_MENUBREAK 在弹出式菜单中,将指定的菜单项放置于一个新列。在顶级菜单中,将菜单项放置到一个新行

MF_OWNERDRAW 创建一个物主绘图菜单(由您设计的程序负责描绘每个菜单项) MF_POPUP 将一个弹出式菜单置于指定的菜单项。可用于创建子菜单及弹出式菜单 MF_SEPARATOR 在指定的菜单项处显示一条分隔线

MF_STRING 在指定的菜单项处放置一个字符串。不与vb的caption属性兼容 MF_UNCHECKED 检查指定的菜单项。不能与vb的checked属性兼容 ---------------------------------------------- 1个创建位图菜单的例子,代码如下: Public Const SRCCOPY = &HCC0020 Public Const MF_BYPOSITION = &H400& Public Const MF_BITMAP = &H4&

Private Sub Form_Load()

Dim nLoopCtr, nWidth, nHeight As Integer

Dim lResult, hTempDC, lTempID, hMenuID, lItemCount, hBitmap As Long nWidth = Picture1(nLoopCtr).Width \\ Screen.TwipsPerPixelX nHeight = Picture1(nLoopCtr).Height \\ Screen.TwipsPerPixelY hMenuID = GetSubMenu(GetMenu(Me.hwnd), 0)

hTempDC = CreateCompatibleDC(Picture1(nLoopCtr).hdc) For nLoopCtr = 0 To 3

hBitmap = CreateCompatibleBitmap(Picture1(nLoopCtr).hdc, nWidth, nHeight) lTempID = SelectObject(hTempDC, hBitmap)

lResult = BitBlt(hTempDC, 0, 0, nWidth, nHeight, Picture1(nLoopCtr).hdc, 0, 0, SRCCOPY) lTempID = SelectObject(hTempDC, lTempID) mnubook(nLoopCtr).Caption = \

lResult = ModifyMenuA(hMenuID, nLoopCtr, MF_BYPOSITION Or MF_BITMAP, _ GetMenuItemID(hMenuID, nLoopCtr), hBitmap) Next nLoopCtr

lResult = DeleteDC(hTempDC) End Sub

驱动器类函数

----------------------------------------- 判断指定驱动器的类型:GetDriveTypeA函数

该函数能依据根目录识别1个驱动器是软驱或光驱或硬盘等。声明:

Declare Function GetDriveType Lib \

String) As Long

参数nDrive:驱动器根目录路径的字符串,如\

函数返回值为1个常数,指定驱动器类型:DRIVE_ REMOVABLE=2,软驱; 如果驱动器不能识别,则返回0,如指定目录不 DRIVE_ FIXED=3,硬盘。

存在,则返回1。 DRIVE _REMOTE=4,网络驱动器;

DRIVE _CDROM=5,光驱; DRIVE_ RAMDISK=6虚拟磁盘

调用如:

Private Const DRIVE_CDROM = 5

If GetDriveTypeA(\这是光驱\

--------------------------------------------------- 获得指定驱动器的空间大小:GetDiskFreeSpaceA函数

该函数可获取指定驱动器的簇数和剩余簇数,每簇扇区数,每扇区字节数。声明: Declare Function GetDiskFreeSpaceA Lib \lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long,

lpTtoalNumberOfClusters As Long) As Long

参数 类型及说明

lpRootPathName String,不包括卷名的一个磁盘根路径 lpSectorsPerCluster Long,装载每簇内有多少扇区数的变量 lpBytesPerSector Long,装载每个扇区内有多少字节数的变量 lpNumberOfFreeClusters Long,装载磁盘上剩余簇数的变量 lpTtoalNumberOfClusters Long,装载磁盘上总簇数的变量

调用如: Dim lxn As String

lxn = \Dim a&, b&, c&, d&

GetDiskFreeSpaceA lxn, a&, b&, c&, d&

m& = a& * b& * d&

MsgBox \本驱动器共有字节数:\

n& = a& * b& * c&

MsgBox \本驱动器剩余字节数:\--------------------------------------------

获得指定驱动器的文件系统类型,卷标和序列号:GetVolumeInformationA函数

声明:

Declare Function GetVolumeInformationA Lib \As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber

As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long

参数 类型及说明

lpRootPathName String,指定驱动器的根路径

lpVolumeNameBuffer String,装载卷标的一个字串(缓冲区) nVolumeNameSize Long,lpVolumeNameBuffer字串的长度 lpVolumeSerialNumber Long,装载磁盘序列号的变量

lpMaximumComponentLength Long,指定一个变量,装载文件名每一部分的长度。例如,在\的情况下,它就代表component1或component2名称的长度

lpFileSystemFlags Long,装载一个或多个二进制位标志的变量。这些标志如下:●FS_CASE_IS_PRESERVED:文件名的大小写记录于文件系统;●FS_CASE_SENSITIVE:文件名要

区分大小写 ●FS_UNICODE_STORED_ON_DISK:文件名保存为Unicode格式 ●FS_PERSISTANT_ACLS:文件系统支持文件的访问控制列表(ACL)安全机制

●FS_FILE_COMPRESSION:文件系统支持逐文件的进行文件压缩 ●FS_VOL_IS_COMPRESSED:整个

磁盘都是压缩的

lpFileSystemNameBuffer String,指定一个缓冲区,用于装载文件系统的类型名称(如FAT,

NTFS以及其他)

nFileSystemNameSize Long,lpFileSystemNameBuffer字串的长度

有8个参数:第1个指明驱动器,第2,3个指明卷标字符串缓冲区及其长度,第4个返回磁盘

序列号,第7,8个指明文件系统类型字符串缓冲区及其长度。调用如:

Private Sub Command2_Click()

Dim sType As String Dim sLabel As String

sType = Space(20): sLabel = Space(20)

Dim lxn As Long

GetVolumeInformationA \

MsgBox \该驱动器卷标为\MsgBox \该驱动器文件系统类型为\MsgBox \该驱动器序列号为\

End Sub

--------------------------------------------- 查找本机上都有哪些驱动器:GetLogicalDriveStringsA函数

该函数的第2个参数返回包含本机全部驱动器根路径的字符串组合,从中分离即可得到每个驱动

器,第1个参数指定第2个参数的缓冲区长度。

声明:

Declare Function GetLogicalDriveStringsA Lib \Long,

ByVal lpBuffer As String) As Long

参数:

nBufferLength Long,lpBuffer字串的长度

LpBuffer String,用于装载可用驱动器名称的字串。每个名字都用一个ASC码值为0的字符(NULL)分隔,在最后一个名字后面连同其本身规律的那个\\0,就有了两个ASCII 0终止。

函数返回值为写入字符串缓冲区的实际长度。

调用如:

Private Sub Command3_Click()

Dim lxn As String lxn = String(255, \

m% = GetLogicalDriveStrings(255, lxn)

lxn = Left(lxn, m%)

For x = 1 To m% '由于ASC码值0会使其后的字符不显示,所以要改为空格32。

a = Asc(Mid(lxn, x, 1)) If a = 0 Then a = 32