Win95系统API函数大揭秘[3]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 showman 的 blog

declare sub globalmemorystatus lib "kernel32" (lpbuffer as memorystatus)
窗体中加入如下代码:
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)是系统中非常重要的组成部分,它设置了win95及nt的参数,
包括用户信息、系统硬件配置和应用程序等信息。注册表系统代替了旧版windows中的多个ini文件。(警
告:如果你对注册表不熟悉,不要随意修改它。如果注册表项目出错,会使机器崩溃,甚至破坏操作系
统本身。)
win32 api中reg函数处理对注册表数据库一般的读写过程如下:
1、使用regopenkey或regcreatekey打开或创建一个键;
2、如果上一步成功,使用regqueryvalue(或regqueryvalueex)读取子键的值,使用regsetvalue(或
regvsetvalueex)设置子键值,使用regenumkey获得所有子键,使用regdeletekey删除一个键;
3、完成操作后使用regclosekey关闭键。
下述应用程序演示了如何生成键、存放值并取得注册表数据。在hkey_local_machine键下面生成三
个子键test\mastering vb5、    windows width、windows height,用于存放上次执行时的窗体尺寸。
private declare function regcreatekey lib "advapi32.dll" alias "regcreatekeya" (byval hkey as
long, byval lpsubkey as string, phkresult as long) as long
private declare function regdeletekey lib "advapi32.dll" alias "regdeletekeya" (byval hkey as
long, byval lpsubkey as string) as long
private declare function regdeletevalue lib "advapi32.dll" alias "regdeletevaluea" (byval hkey
as long, byval lpvaluename as string) as long
private declare function regqueryvalueex lib "advapi32.dll" alias "regqueryvalueexa" (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 "regsetvalueexa" (byval hkey
as long, byval lpvaluename as string, byval reserved as long, byval dwtype as long, lpdata as
any, byval cbdata as long) as long ' note that 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, len(keyvalue) + 1)
else
keyvalue = string(bufsize + 1, "")
retvalue = regqueryvalueex(keyid, subkey, 0&, reg_sz, bykeyvalue, bufsize)
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, len(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 keyvalue, len(keyvalue) +
1)
keyvalue = me.height
retvalue = regsetvalueex(keyid, "windows height", 0&, reg_sz, byval keyvalue, len(keyvalue)
+ 1)
end sub
? 在“状态区”中建立图标
    win95中如“音量”、“日期”、“屏幕”等可以在win95的状态栏(tray)上建立快捷图标。如果鼠
标停留在图标上,会显示出相应的工具提示(tooltip),当用户在图标上单击(或双击)鼠标左键时,软
件会实现相应的功能,单击右键时会实现其简捷的功能。
tray也称作systray、trayicon、notifyicon、status area等,它是win95/nt的任务条上一个特殊区
域,许多软件运行时在tray中加入自己的图标,这个区域的另一个特殊之处在于你可以从资源管理器内
拖文件然后放在这个区域。正是由于这些特性,tray编程在win95/nt中有特殊的地位。
tray编程比较特殊,主要包括三个主要方面:图标、工具提示和消息。它属于shell编程的一部分,
主要是利用shell api中的shell_notifyicon函数完成的。shell_notifyicon函数是这样声明的:
type notifyicondata
cbsize as long 结构所占的字节数
hwnd as long 接受tray托盘图标消息的窗口句柄

本文关键:vb
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top