PB读取硬盘VOLUME序列号源码2则及问题请教?
Function Boolean GetVolumeInformationA( &
ref String ls_Rootpath, &
ref String ls_volumnename, &
Ulong lul_VolumeNameSize, ref Ulong lul_VolumeSerialNumber, &
ref Ulong lul_MaximumComponentLength, &
ref Ulong lul_FileSystemFlags, &
ref String ls_FileSystemNameBuffer, &
Ulong lul_FileSystemNameSize &
) Library "Kernel32.dll"
/******************* 程序代码 ************************/
String ls_Rootpath, ls_volumnename
ls_Rootpath = "C:" // 指定要得到序列号的硬盘,
// 一般情况都是C盘,除非你能保证用户存在其它逻辑盘或物理盘
ls_volumnename = Space(256) // 分配足够的空间,下同
Ulong lul_VolumeNameSize
lul_VolumeNameSize = 256
Ulong lul_VolumeSerialNumber, lul_MaximumComponentLength, lul_FileSystemFlags
lul_MaximumComponentLength = 256
String ls_FileSystemNameBuffer
ls_FileSystemNameBuffer = space(256)
Ulong lul_FileSystemNameSize
lul_FileSystemNameSize = 256
beep(1)
boolean lb_rtn
lb_rtn = False
lb_rtn = GetVolumeInformationA(ls_Rootpath, ls_volumnename, lul_VolumeNameSize,
lul_VolumeSerialNumber, lul_MaximumComponentLength, lul_FileSystemFlags,
ls_FileSystemNameBuffer, lul_FileSystemNameSize)
if lb_rtn = true then
MessageBox("提示","函数调用成功!")
else
MessageBox("提示","函数调用失败!")
end if
sle_1.text = String(lul_VolumeSerialNumber) // 得到硬盘序列号
/********************* 结束 *************************/
以上程序在PB8中调试成功,但得到的VOL的序列号和实际那个8位数字加字母的序列号不同,它得到的全是数字这是怎么回事?
OLEObject PBObject
long ll_status
PBObject = CREATE OLEObject
ll_status = PBObject.ConnectToObject &
("WinMgmts::Win32_LogicalDisk='C:'")
IF ll_status <> 0 THEN
// Handle the error
messagebox("错误", "createobject error! error code:" + string(ll_status))
destroy pbobject
return
end if
sle_1.text = string(PBObject.VolumeSerialNumber)
PBObject.DisconnectObject ( )
destroy pbobject
上面这个是陶清的程序,能够得到和用DIR看到的一模一样的序列号但在XP中不能使用怎样解决?另外这个大侠是否可以分析一下原理。