⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24.txt

📁 VB文章集(含API、窗口、数据库、多媒体、系统、文件、等等)
💻 TXT
📖 第 1 页 / 共 2 页
字号:
        程序4所示的代码在“桌面”上为d:\path\appname.exe应用程序建立名为"Shortcut Title"的快捷方式。 
        Private Declare Function fCreateShellLink Lib "STKIT432.DLL" (ByVal lp
strFolderName As String, ByVal lpstrLinkName As String, ByVal lpstrLinkPath As St
ring, ByVal lpstrLinkArgs As String) As Long         Private Sub Form_Click() 
        lResult = fCreateShellLink("....\WINDOWS\DESKTOP", "Shortcut Title", "
d:\path\appname.exe", "")         End Sub         (程序4) 
        如果想在“桌面”上建立快捷方式,则建立的目标目录应该为"....\WINDOWS\DE
SKTOP";如果想在“开始”菜单中建立快捷方式,则建立的目标目录应该为"....\WINDOWS\S
tart 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 MEMORYSTATU
S)         窗体中加入代码如下:         Private Sub Form_Click() 
        Dim m As MEMORYSTATUS         m.dwLength = Len(m) 
        GlobalMemoryStatus m         Print "数据结构的长度", m.dwLength 
        Print "内存使用百分比", m.dwMemoryLoad 
        Print "实际内存总字节数 ", m.dwTotalPhys 
        Print "可用的实际内存字节数", m.dwAvailPhys 
        Print "分页文件总字节数", m.dwTotalPageFile 
        Print "分页文件可用字节数", m.dwAvailPageFile 
        Print "虚拟内存的总字节数", m.dwTotalVirtual 
        Print "可用的虚拟内存字节数", m.dwAvailVirtual         End Sub         读写注册表 
        Win95及NT的注册表数据库(Registry)是系统中非常重要的组成部分,它设置了W
in95及NT的参数,包括用户信息、系统硬件配置和应用程序等信息。注册表系统代替了旧版W
indows中的多个INI文件(警告:如果你对注册表不熟悉,不要随意修改它。如果注册表项目出错,会使机器崩溃,甚至破坏操作系统本身)。 
        Win32 API中Reg函数处理对注册表数据库一般的读写过程如下: 
        1、使用RegOpenKey或RegCreateKey打开或创建一个键; 
        2、如果上一步成功,则使用RegQueryValue(或RegQueryValueEx)读取子键的值
,使用RegSetValue(或RegvSetValueEx)设置子键值,使用RegEnumKey获得所有子键,使用RegDeleteKey删除一个键; 
        3、完成操作后使用RegCloseKey关闭键。 
        下面的程序5演示了如何生成键、存放值并取得注册表数据。在HKEY_LOCAL_MACH
INE键下面生成三个子键Test\Mastering vb5、Windows Width、Windows Height,用于存放上次执行时的窗体尺寸。 
        Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCre
ateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Lon
g         Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDel
eteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long 
        Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegD
eleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long 
        Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "Reg
QueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved
 As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long ' Note that if
 you declare the lpData parameter as String, you must pass it By Value. 
        Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSe
tValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Lo
ng, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long ' Note tha
t if you declare the lpData parameter as String, you must pass it By Value. 
        Const ERROR_SUCCESS = 0&         Const ERROR_BADDB = 1009& 
        Const ERROR_BADKEY = 1010&         Const ERROR_CANTOPEN = 1011& 
        Const ERROR_CANTREAD = 1012&         Const ERROR_CANTWRITE = 1013& 
        Const ERROR_REGISTRY_RECOVERED = 1014& 
        Const ERROR_REGISTRY_CORRUPT = 1015& 
        Const ERROR_REGISTRY_IO_FAILED = 1016& 
        Const HKEY_CLASSES_ROOT = &H80000000 
        Const HKEY_CURRENT_USER = &H80000001 
        Const HKEY_LOCAL_MACHINE = &H80000002 
        Const regkey = "Test\Mastering vb5"          
        Private Sub Form_Load()         Dim retValue As Long 
        Dim result As Long         Dim keyValue As String 
        Dim keyId As Long         Dim subKey As String 
        Dim bufSize As Long         Label6.Caption = regkey 
        retValue = RegCreateKey(HKEY_LOCAL_MACHINE, regkey, keyId) 
        If retValue = 0 Then         subKey = "Windows Width" 
        retValue = RegQueryValueEx(keyId, subKey, 0&, reg_sz, 0&, bufSize) 
         If bufSize < 2 Then          keyValue = Me.Width 
         retValue = RegSetValueEx(keyId, subKey, 0&, reg_sz, ByVal keyValue, L
en(keyValue) + 1)          Else          keyValue = String(bufSize + 1, "") 
         retValue = RegQueryValueEx(keyId, subKey, 0&, reg_sz, bykeyvalue, buf
Size)          keyValue = Left$(keyValue, bufSize - 1) 
         Me.Width = keyValue          End If         Label4.Caption = subKey 
        Label5.Caption = Me.Width         subKey = "Widows Height" 
        retValue = RegQueryValueEx(keyId, subKey, 0&, reg_sz, 0&, bufSize) 
         If bufSize < 2 Then          keyValue = Me.Height 
         retValue = RegSetValueEx(keyId, subKey, 0&, reg_sz, ByVal keyValue, L
en(keyValue) + 1)          Else          keyValue = String(bufSize + 1, "") 
         retValue = RegQueryValueEx(keyId, subKey, 0&, reg_sz, ByVal keyValue,
 bufSize - 1)          Me.Height = keyValue          End If 
        Label8.Caption = subKey         Label7.Caption = Me.Height 
        End If         End Sub          
        Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) 
        Dim keyValue As String         Dim retValue As Long 
        Dim keyId As Long 
        retValue = RegCreateKey(HKEY_LOCAL_MACHINE, regkey, keyId) 
        keyValue = Me.Width 
        retValue = RegSetValueEx(keyId, "Windows Width", 0&, reg_sz, ByVal key
Value, Len(keyValue) + 1)         keyValue = Me.Height 
        retValue = RegSetValueEx(keyId, "Windows Height", 0&, reg_sz, ByVal ke
yValue, Len(keyValue) + 1)         End Sub         (程序5)         在“状态栏”中建立图标 
        Win95中如“音量”、“日期”、“屏幕”等可以在Win95的状态栏(Tray)上建立
图标。如果鼠标停留在图标上,则会显示出相应的工具提示(ToolTip),当用户在图标上单击
(或双击)鼠标左键时程序便会被激活,单击右键时会实现其简捷的功能菜单。 
        Tray编程比较特殊,主要包括三个主要方面:图标、工具提示和消息。它属于Sh
ell编程的一部分,主要是利用Shell API中的Shell_NotifyIcon函数完成的。Shell_NotifyIcon函数是这样声明的: 
        Type NOTIFYICONDATA          cbSize As Long 结构所占的字节数 
         hwnd As Long 接受TRAY托盘图标消息的窗口句柄          uID As Long 由应用程序定义的图标识别符 
         uFlags As Long 标志          uCallbackMessage As Long 由应用程序定义的消息 
         hIcon As Long TRAY 图标句柄          szTip As String * 64 工具提示字符串 
        End Type 
        Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias " Shell_Noti
fyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long 
        这个结构中的uFlags很重要,它有三种取值:NIF_ICON、NIF_MESSAGE和NIF_TIP
,分别表示hIcon、uCallbackMessage和szTip参数有效,用来修改图标、消息和工具提示。这
三个取值可以同时使用(三个参数相或),也可以单独使用。为了实现对用户鼠标操作的响应
,需要在程序中处理uCallbackMessage所定义的消息,该消息的长参数lParam包含Win32所定
义的鼠标消息,如果有多个图标,则短参数wParam表示图标识别符。 
        在vb光盘中\TOOLS\UNSUPPRT\SYSTRAY目录下有SYSTRAY的工程,经编译后生成SYSTRAY.OCX控件。 
        现在我们应用SYSTRAY.OCX控件进行Tray编程。         首先建立一个“工程”,依次选择“工程”、“部件”(或者在“工具箱”上单
击鼠标右键选择“部件”),再复选SYSTEM TRAY CONTROL CSYSTRAY,CSYSTRAY控件即出现在“工具箱”中。 
        SYSTRAY.OCX控件拥有MouseDblClick、MouseDown、MouseMove、MouseUp四个事件
,响应先后顺序为MouseMove、MouseDown、MouseUp、MouseDblClick。程序6很清楚地说明了他们的响应时间次序。 
        Private Sub cSysTray1_MouseDblClick(Button As Integer, Id As Long) 
        MsgBox "Hei!You have DblClick the mouse!"         End Sub 
        Private Sub cSysTray1_MouseDown(Button As Integer, Id As Long) 
        If Button = 2 Then 
        MsgBox "Hei!You have clicked me in right button!"         End If 
        End Sub         Private Sub cSysTray1_MouseMove(Id As Long) 
        MsgBox "Hello!I am here!"         End Sub 
        Private Sub cSysTray1_MouseUp(Button As Integer, Id As Long) 
        MsgBox "Hei!You clicked me just now!"         End Sub 
        Private Sub Form_Load() 
        cSysTray1.TrayTip = "Hello! I am the King of the world!" 
        cSysTray1.InTray = True 
        cSysTray1.TrayIcon = "c:\fittings\FACE.ico"         End Sub 
        (程序6) 
        SYSTRAY控件还拥有InTray、Name、TrayIcon、TrayTip、Parent、Index、Objec
t、Tag属性。InTray设置是否在Win95的状态栏Tray上建立一个快捷图标;Name设置SYSTRAY控
件的名称;TrayIcon设置在Tray上所建立的快捷图标的外观;TrayTip设置了鼠标停留在图标
上时所显示的工具提示(ToolTip)内容;Tag储存程序所需要的附加数据。 
        通过实践发现,在使用VB开发应用程序时,灵活使用API 函数,会更大地发挥VB
 的作用,使开发的软件更专业,功能更强大。本文仅仅是介绍了一下API函数在Win95中的使
用方法,以作抛砖引玉之用。对于真正的API 函数应用,还需要参考更为详尽的资料和广大爱好者更为努力的探索和研究。 
        文中提到的所有程序均在中文Windows 98和 VB5.0中文企业版下调试通过。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -