pb获得系统基本信息.doc_第1页
pb获得系统基本信息.doc_第2页
pb获得系统基本信息.doc_第3页
pb获得系统基本信息.doc_第4页
pb获得系统基本信息.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

获得系统基本信息 当一个应用program在工作时,会不可避免地和操作系统发生数据交换,虽然在PB中提供了Environment对象来获得系统的一些信息,然而这些信息往往是不够的,例如CPU、本机IP地址等,这些内容只有用Windows API来获得了. 1、建立一个工作空间(workspace),取名为:systeminfo. 2、建立一个应用(application),取名为:systeminfo. 3、创建用户对象u_sysinfo,并添加Microsoft Winsock OCX Control . 4、定义u_sysinfo的实例变量. public: string cpuid,cpuprovider string filesystem,volumename ulong VolumeSerialNumber,MaxComponentLength,FileSystemFlags long dlength,dmemoryload,dtotalphys,davailphys,dtotalpagefile long davailpagefile,dtotalvirtual,davailvirtual ulong dwoemid,dwpagesize,lpminappaddress,lpmaxappaddress,dwactiveprocessormask ulong dwnumberofprocessors,dwprocessortype,dwallocationgranularity,dwreserved ulong sectorspercluster,bytespersector,numberoffreeclusters,totalnumberofclusters ulong mbtotal,mbfree 5、定义u_sysinfo的局部外部函数 PUBLIC FUNCTION ulong GetComputerName(ref string lpBuffer,ref ulong nSize) LIBRARY kernel32.dll ALIAS FOR GetComputerNameA PUBLIC FUNCTION ulong GetDriveType(string nDrive) LIBRARY kernel32.dll ALIAS FOR GetDriveTypeA FUNCTION ulong GetDiskFreeSpace(ref string lpRootPathName,ref ulong lpSectorsPerCluster,ref ulong lpBytesPerSector,ref ulong lpNumberOfFreeClusters,ref ulong lpTtoalNumberOfClusters) LIBRARY kernel32.dll ALIAS FOR GetDiskFreeSpaceA PUBLIC FUNCTION ulong GetTickCount() LIBRARY kernel32.dll PUBLIC Subroutine GetSystemInfo(ref ws_info lpSystemInfo) LIBRARY kernel32.dll PUBLIC FUNCTION ulong waveOutGetNumDevs() LIBRARY winmm.dll PUBLIC FUNCTION ulong WNetGetUser(ref string lpName,ref string lpUserName,ref ulong lpnLength) LIBRARY mpr ALIAS FOR WNetGetUserA PUBLIC FUNCTION ulong GetSystemMetrics(ulong nIndex) LIBRARY user32.dll PUBLIC FUNCTION ulong GetWindowsDirectory(ref string lpBuffer,ulong nSize) LIBRARY kernel32.dll ALIAS FOR GetWindowsDirectoryA PUBLIC FUNCTION ulong GetSystemDirectory(ref string lpBuffer,ulong nSize) LIBRARY kernel32.dll ALIAS FOR GetSystemDirectoryA PUBLIC FUNCTION ulong GetTempPath(ulong nBufferLength,ref string lpBuffer) LIBRARY kernel32.dll ALIAS FOR GetTempPathA PUBLIC FUNCTION ulong GetKeyboardType(ulong nTypeFlag) LIBRARY user32.dll PUBLIC FUNCTION ulong QueryPerformanceFrequency(ref double lpFrequency) LIBRARY kernel32.dll PUBLIC FUNCTION ulong QueryPerformanceCounter(ref ulong lpPerformanceCount) LIBRARY kernel32.dll /PUBLIC FUNCTION ulong EnumPrinterDrivers(ref string pName,ref string pEnvironment,ulong Level,ref Byte pDriverInfo,ulong cdBuf,ref ulong pcbNeeded,ref ulong pcRetruned) LIBRARY winspool.drv ALIAS FOR EnumPrinterDriversA PUBLIC Subroutine GlobalMemoryStatus(ref ws_memory lpBuffer) LIBRARY kernel32.dll /FUNCTIONon ulong GlobalReAlloc(ulong hMem,ulong dwBytes,ulong wFlags) LIBRARY kernel32.dll PUBLIC FUNCTION ulong RegOpenKey(ulong hKey,ref string lpSubKey,ref ulong phkResult) LIBRARY advapi32.dll ALIAS FOR RegOpenKeyA PUBLIC FUNCTION ulong RegCloseKey(ulong hKey) LIBRARY advapi32.dll PUBLIC FUNCTION ulong RegQueryValueEx(ulong hKey,ref string lpValueName,ulong lpReserved,ref ulong lpType,ref long lpData,ref ulong lpcbData) LIBRARY advapi32.dll ALIAS FOR RegQueryValueExA /Function ulong EnumDisplaySettingsA(ulong xx,ulong modenum,ref DEVMODE lpdevmode)Librarykernel32.dll /PUBLIC FUNCTION ulong DeviceCapabilities(ref string lpDeviceName,ref string lpPort,ulong iIndex,ref string lpOutput,ref DEVMODE lpDevMode) LIBRARY winspool.drv ALIAS FOR DeviceCapabilitiesA PUBLIC FUNCTION ulong GetVolumeInformation(string lpRootPathName,ref string lpVolumeNameBuffer, ulong nVolumeNameSize,ref ulong lpVolumeSerialNumber,ref ulong lpMaximumComponentLength, ref ulong lpFileSystemFlags,ref string lpFileSystemNameBuffer,ulong nFileSystemNameSize) LIBRARY kernel32.dll ALIAS FOR GetVolumeInformationA FUNCTION long GetMACAddress(long lana,ref long addr6) Library utils.dll FUNCTION long GetLanaID(ref long lana254) LIBRARY utils.dll Function ulong GetMHZ()Librarymydll.dll 6、用户对象级函数 1)、of_GetComputerName(),获得计算机的标识(即计算机名). ulong ll_comsize ulong ll_flag ll_comsize = 256 string ls_computerName /获得计算机的名称 ll_flag = GetComputerName(ls_computerName,ll_comsize) If ll_flag 1 then return Get Computer Failure else return ls_computerName End if 2)、of_GetCpuInfo(),获得CPU一些基本信息. ws_cpuinfo lstr_cpu string ls_temp RegistryGet(HKEY_LOCAL_MACHINEHardwareDescriptionSystemCentralProcessor0,Identifier,RegString!,ls_temp) lstr_cpu.cpuid = ls_temp cpuid = ls_temp RegistryGet(HKEY_LOCAL_MACHINEHardwareDescriptionSystemCentralProcessor0,VendorIdentifier,RegString!,ls_temp) lstr_cpu.cpuprovider = ls_temp cpuprovider = ls_temp 3)、of_GetCpuStatus(),获得CPU当前的使用频率,是从0%到100%之间的一个常数. ulong ls_username,lpcbData,lpType lpcbData = 4 lpType = 4 ulong phkResult ls_username = 0 string lbSubkey long lpData lbSubkey = PerfStatsStatData ls_username = RegOpenKey(16*16*16*16*16*16*16*8+6,lbSubKey,phkResult)/The first parameters is HKEY_DYN_DATA = &80000006(HANDLE) string lpValueName lpValueName = KERNELCPUUsage ls_username = RegQueryValueEx(phkResult,lpValueName,0,lpType,lpData,lpcbData) ls_username = RegCloseKey(phkResult) return lpdata 4)、of_GetDiskVolume(),获得磁盘空间大小. ulong ll_MBFree ulong ll_MBTotal ulong ll_sectorspercluster / Sectors/Cluster ulong ll_bytespersector / Bytes/Sector ulong ll_numberoffreeclusters / Number of Free Clusters ulong ll_toalnumberofclusters / Total Number of Clusters GetDiskFreeSpace(as_driver, ll_sectorspercluster, ll_bytespersector,ll_numberoffreeclusters, ll_toalnumberofclusters) sectorspercluster=ll_sectorspercluster bytespersector=ll_bytespersector numberoffreeclusters=ll_numberoffreeclusters totalnumberofclusters=ll_toalnumberofclusters mbfree = (ll_sectorspercluster * ll_bytespersector * (ll_numberoffreeclusters / 1024) / 1024 mbtotal = (ll_sectorspercluster * ll_bytespersector * (ll_toalnumberofclusters / 1024) / 1024 5)、of_GetDriverType(),获得各个磁盘的种类. ulong ul_drivetype string ls_drive ul_drivetype = GetDriveType(a_drivename) choose case ul_drivetype case 0 ls_Drive = Unknown Driver Case 1 ls_Drive = Drive Does Not exist Case 2 ls_Drive = Floppy driver Case 3 ls_Drive = HardDisk driver Case 4 ls_Drive = Network driver Case 5 ls_Drive = CD-ROM driver Case 6 ls_Drive = RAM driver End choose Return ls_drive 8)、GetMhz: sle_mhz.text = String(uo_1.of_GetMhz() 9)、GetOSVersion: sle_osversion.text = uo_1.of_getosversion() 10)、GetServicePack: sle_servicePack.text = uo_1.of_GetServicePack() 11)、GetSystemDir: sle_systemdir.text = uo_1.of_getSystemDir() 12)、GetTempDir: sle_tempdir.text = uo_1.of_gettemppath() 13)、GetSystemInfo: uo_1.of_GetsystemInfo() ddlb_systeminfo.additem(OemID = +string(uo_1.dwoemid) ddlb_systeminfo.additem(PageSize = +string(uo_1.dwPagesize) ddlb_systeminfo.additem(MinAppAddress = +string(uo_1.lpminappaddress) ddlb_systeminfo.additem(MaxAppAddress = +string(uo_1.lpmaxappaddress) ddlb_systeminfo.additem(ActiveProcessorMask = +string(uo_1.dwactiveprocessormask) ddlb_systeminfo.additem(NumberofProcessors = +string(uo_1.dwnumberofprocessors) ddlb_systeminfo.additem(ProcessorType = +string(uo_1.dwprocessortype) ddlb_systeminfo.additem(AllocationGranularity = +string(uo_1.dwallocationgranularity) ddlb_systeminfo.additem(Reserved = +string(uo_1.dwreserved) ddlb_systeminfo.selectitem(5) 14)、GetTickCount: sle_tickcount.text = uo_1.of_GetTickCount() 15)、GetKeyBoardType: choose case uo_1.of_GetKeyboardType() case 1 sle_keyboard.text = IBM PC/XT( ) or compatible (83-key) keyboard case 2 sle_keyboard.text = Olivetti ICO (102-key) keyboard case 3 sle_keyboard.text = IBM PC/AT (84-key) or similar keyboard case 4 sle_keyboard.text = IBM enhanced (101- or 102-key) keyboard case 5 sle_keyboard.text = N搞定ia 1050 and similar keyboards case 6 sle_keyboard.text = N搞定ia 9140 and similar keyboards case 7 sle_keyboard.text = Japanese keyboard case else sle_keyboard.text = Hardware dependent and specified by the OEM End choose 16)、GetWindowMode: sle_windowmode.text = uo_1.of_getwindowmode() 17)、GetWindowDir: sle_windowdir.text = uo_1.of_getwindowdir() 18)、GetWaveDevice: sle_wavedevice.text = string(uo_1.of_getwavedevice() 19)、GetIPAddress: sle_ipaddress.text = uo_1.of_getipaddress() 20)、GetNetCard: sle_netcard.text = uo_1.of_getnetcard() 21)、GetDiskInfo: lv_1.deletecolumns() lv_1.deleteitems() lv_1.addcolumn(Driver,Left!,250) lv_1.addcolumn(FileSystem,Left!,350) lv_1.addcolumn(VolumeName,Left!,400) lv_1.addcolumn(VolumeSerialNumber,Left!,650) lv_1.addcolumn(MaxComponentLength,Left!,650) lv_1.addcolumn(FileSystemFlags,Left!,500) lv_1.addcolumn(SectorsPerCluster,Left!,600) lv_1.addcolumn(BytesPerSector,Left!,500) lv_1.addcolumn(NumberofFreeClusters,Left!,700) lv_1.addcolumn(TotalNumberofClusters,Left!,750) lv_1.addcolumn(FreeDiskVolume,Left!,600) lv_1.addcolumn(TotalDiskVolume,Left!,650) lv_1.addcolumn(Used Ratio,Left!,350) String ls_drive,ls_status ls_drive = abcdefghijklmnopqrstuvwxyz Integer li_i For li_i = 1 to 26 ls_status = uo_1.of_getdrivetype(mid(ls_drive,li_i,1)+:) if ls_status Drive Does Not exist Then uo_1.of_getvolumeInfo(mid(ls_drive,li_i,1)+:) uo_1.of_getdiskvolume(mid(ls_drive,li_i,1)+:) Choose case lower(ls_status) case floppy driver if uo_1.mbtotal = 0 Then lv_1.Additem(mid(ls_drive,li_i,1)+:+t+trim(string(uo_1.FileSystem)+t+trim(string(uo_1.VolumeName)+t+string(uo_1.VolumeSerialNumber)+t+string(uo_1.MaxComponentLength)+t+string(uo_1.FileSystemFlags)+t+string(uo_1.SectorsPerCluster)+t+string(uo_1.BytesPerSector)+t+string(uo_1.NumberofFreeClusters)+t+string(uo_1.TotalNumberofClusters)+t+string(uo_1.mbfree)+MB+t+string(uo_1.mbtotal)+MB+t+0%,1) else lv_1.Additem(mid(ls_drive,li_i,1)+:+t+trim(string(uo_1.FileSystem)+t+trim(string(uo_1.VolumeName)+t+string(uo_1.VolumeSerialNumber)+t+string(uo_1.MaxComponentLength)+t+string(uo_1.FileSystemFlags)+t+string(uo_1.SectorsPerCluster)+t+string(uo_1.BytesPerSector)+t+string(uo_1.NumberofFreeClusters)+t+string(uo_1.TotalNumberofClusters)+t+string(uo_1.mbfree)+MB+t+string(uo_1.mbtotal)+MB+t+String(Long(uo_1.mbtotal - uo_1.mbfree)/uo_1.mbtotal)*100)+%,1) End if Case harddisk driver if uo_1.mbtotal = 0 Then lv_1.Additem(mid(ls_drive,li_i,1)+:+t+trim(string(uo_1.FileSystem)+t+trim(string(uo_1.VolumeName)+t+string(uo_1.VolumeSerialNumber)+t+string(uo_1.MaxComponentLength)+t+string(uo_1.FileSystemFlags)+t+string(uo_1.SectorsPerCluster)+t+string(uo_1.BytesPerSector)+t+string(uo_1.NumberofFreeClusters)+t+string(uo_1.TotalNumberofClusters)+t+string(uo_1.mbfree)+MB+t+string(uo_1.mbtotal)+MB+t+0%,2) else lv_1.Additem(mid(ls_drive,li_i,1)+:+t+trim(string(uo_1.FileSystem)+t+trim(string(uo_1.VolumeName)+t+string(uo_1.VolumeSerialNumber)+t+string(uo_1.MaxComponentLength)+t+string(uo_1.FileSystemFlags)+t+string(uo_1.SectorsPerCluster)+t+string(uo_1.BytesPerSector)+t+string(uo_1.NumberofFreeClusters)+t+string(uo_1.TotalNumberofClusters)+t+string(uo_1.mbfree)+MB+t+string(uo_1.mbtotal)+MB

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论