计算机信息收集小程序

  星期一,领导安排统计公司的计算机设备以便建立台账,领导的意思是录入到EXCEL表里再进行统计分析,可是这样的话,两个地方有200多台计算机,每台计算机都需要打开计算机设备信息进行核对录入,工作量不小,关键是这个星期就要见到统计数据。

  用C#写无疑最快,在C#里用它本身的类、调用API、调用注册表都可以实现,问题是编译成可执行文件到XP、Win32位、Win64位的计算机上有些麻烦,为了尽快完成任务,安装了Powerbuilder 6.5和Ms Sql Server数据库,Powerbuilder 6.5可是15年前的编程工具了,忘得差不多了,折腾了3天,完成了信息收集和入库。

  即将5个程序文件放到网上,通知单位人员下载运行,用户只需要输入用户名进入后点击【提取计算机信息】,然后保存就好了。

  实现方法比较简单,首先在注册表里收集到具体的硬件信息,记录下来,然后在Powerbuilder去提取,这些除了内存和硬盘是用了API,其他的(显卡、网卡、IP地址、子网掩码、网关等信息)都是在注册表里提出来的,没有分写代码方便记录。

string S1,S2,SInfo,STEMP
long LBuf
long IFOR,I1
RegistryGet("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName","ComputerName",Regstring!,S1)
dw_1.setitem(dw_1.getrow(),"c05",S1)

//设备ID
RegistryGet("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS","SystemManufacturer",Regstring!,S1)
long retVal,a
ulong ll_retval
string	ls_format = "0000",str,s_harddiskhex,s_harddiskhex_DB
integer	i_len
n_cst_numerical my_hex

//取得SComputerDISKID
str = space(256)
ll_retval = GetVolumeInformationA("c:\", str, 256, RetVal, a, a, str, 256)

s_harddiskhex = my_hex.of_hex(retval)
If len(s_harddiskhex) > 4 then
	i_len = len(s_harddiskhex) - 4
	s_harddiskhex = upper(left(ls_format, 4 - i_len) + left(s_harddiskhex , i_len) + "-" + right(s_harddiskhex, 4))
End If

S1=S1+"||"+s_harddiskhex
dw_1.setitem(dw_1.getrow(),"c03",S1)

//计算机出厂型号
RegistryGet("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS","SystemProductName",Regstring!,S1)
dw_1.setitem(dw_1.getrow(),"c02",S1)

//操作系统
RegistryGet("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\","ProductName",Regstring!,S1)
//判断是32位还是64位系统
RegistryGet("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment","PROCESSOR_ARCHITECTURE",Regstring!,S2)
choose case S2
	case "AMD64"
		S2="64位"
	case "x86"
		S2="32位"
end choose

dw_1.setitem(dw_1.getrow(),"c07",S1+" ["+S2+"]")
/计算机的配置参数
//CPU
RegistryGet("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0","ProcessorNameString",Regstring!,S1)
SInfo=S1
S1=""

//硬盘信息
ulong L1,L2
RegistryGet("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Disk\Enum\","Count",REGuLong!,L1)
for L2=0 to L1 - 1
	RegistryGet("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Disk\Enum\",string(L2),Regstring!,S1)
	//去掉无用的信息
	S1=right(S1,len(S1) - 14)
	S1=left(S1,len(S1) - 20)
	SInfo=S1+"  "+SInfo
Next

//内存
strMemory strMemory1
decimal dec1
GlobalMemoryStatus(strMemory1)
dec1=(strMemory1.ultotalsize)/(1024*1024*1024)
dec1=dec1*2
S1=string(Round(dec1,0))+"G"
SInfo=S1+" |||| "+SInfo

//显卡
RegistryGet("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\nvlddmkm\Device0","Device Description",Regstring!,S1)
SInfo=S1+" |||| "+SInfo
dw_1.setitem(dw_1.getrow(),"c04",SInfo)

//网络信息
String SSubkeylist[],SNetInfo[]
RegistryKeys("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\TCPIP\Parameters\Interfaces\",SSubkeylist)

for IFOR=1 to upperbound(SSubkeylist)
	STEMP=SSubkeylist[IFOR]
	//IP地址
	RegistryGet("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\TCPIP\Parameters\Interfaces\"+STEMP,"IPAddress",RegMultiString!,SNetInfo)
	dw_1.setitem(dw_1.getrow(),"c10",SNetInfo[1])
	SNetInfo[1]=''
	//子网掩码
	RegistryGet("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\TCPIP\Parameters\Interfaces\"+STEMP,"SubnetMask",RegMultiString!,SNetInfo)
	dw_1.setitem(dw_1.getrow(),"c11",SNetInfo[1])
	SNetInfo[1]=''
	//网关
	RegistryGet("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\TCPIP\Parameters\Interfaces\"+STEMP,"DefaultGateway",RegMultiString!,SNetInfo)
	S1=SNetInfo[1]
	dw_1.setitem(dw_1.getrow(),"c12",SNetInfo[1])
	if not ( IsNULL(S1) or S1="" ) then 
		goto Label1
	end if
next
Label1:

//取最大值
select Max(c01) into :L1 from computerlist using XXSDB;
L1=L1+1
dw_1.setitem(dw_1.getrow(),"c01",L1)

datetime MyDT
MyDT=gf_getserverdatetime()
dw_1.setitem(dw_1.getrow(),"c17",MyDT)
dw_1.setitem(dw_1.getrow(),"c16",SServerUser)

  API信息:

PUBLIC Subroutine GlobalMemoryStatus(ref strmemory lpBuffer) LIBRARY "kernel32.dll"
Function ulong GetVolumeInformationA ( string lpRootPathName , ref string pVolumeNameBuffer , long nVolumeNameSize , ref long lpVolumeSerialNumber , ref long lpMaximumComponentLength , ref long lpFileSystemFlags , ref string lpFileSystemNameBuffer , long nFileSystemNameSize ) Library "kernel32" 
  还有结构体声明:

  最后就是编译为一个可执行文件,编译前一定做好备份,否则一点点的错误就会导致文件被破坏,比较麻烦。

  发行的文件为绿色文件,没做安装包,总共5个文件包括可执行文件:CMIMS.exe、pbvm60.dll、pbmss60.dll、pbdwe60.dll、ntwdblib.DLL。目前,在WinXP、Win7-32位|64位、Win10的计算机上运行正常。

  数据库是MS Sql Server 2000。

  

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 广东工业大学计算机学院的操作系统课程设计程序是一项重要的实践环节,旨在让学生通过自主设计和实现一个简单的操作系统,加深对操作系统原理与实践的理解。 在这个课程设计程序中,学生将按照指导书上的要求,主要分为以下几个步骤进行: 1. 环境搭建:首先,学生需要在自己的计算机上搭建实验环境,包括安装虚拟机软件,创建虚拟机实例,并为操作系统提供所需的基本功能和接口。 2. 软件设计:接下来,学生需要根据自己的理解和学习,设计一个简单的操作系统。这个操作系统可能包括进程管理、内存管理、文件系统等基本功能模块,学生需要对这些功能的实现进行规划与设计。 3. 编码实现:在设计完成后,学生需要用编程语言来实现自己设计的操作系统。这个过程中,学生需要灵活运用所学的编程知识,将设计思想转化为代码,并进行测试和调试,确保系统的正确性和稳定性。 4. 反馈与改进:在完成编码实现后,学生需要进行测试,并收集和整理实验过程中的反馈意见和自己的感受,对操作系统的功能、性能和易用性进行评估,并根据评估结果对程序进行改进和优化。 通过这个课程设计程序,学生可以不仅理论联系实际,深入了解操作系统的原理与实践,同时也提高了自己的编程能力和问题解决能力。这种实践性质的课程设计,不仅锻炼了学生的实际动手能力,也为他们今后从事相关工作打下了坚实的基础。 ### 回答2: 广东工业大学计算机学院"操作系统"课程设计的目标是帮助学生深入理解操作系统的原理和实践,并培养学生解决操作系统相关问题的能力。在这门课程的设计中,学院设立了一系列任务和项目,旨在让学生在实践中掌握操作系统的概念和技术。 在"操作系统"课程设计中的一个具体项目是设计并实现一个基于C语言的简单操作系统。该项目要求学生在课程的指导下,独立完成一个包含多个模块的操作系统。学生需要自主选择设计的范围和功能,并实现核心功能,如进程管理、内存管理、文件系统和设备驱动等。此外,该项目还要求学生编写代码文档,设计并进行测试,并在最后进行演示和展示。通过这个项目,学生可以集中精力理解和掌握操作系统的核心概念和技术。 为了帮助学生更好地完成这个项目,学院为学生提供了丰富的资源和指导。学生可以参考教材和相关的学术资源,同时与教师和同学进行交流和讨论。此外,学院还会组织一系列辅导课程和实验室实践,以便帮助学生解决遇到的问题和困难。 总之,广东工业大学计算机学院"操作系统"课程设计以设计并实现一个基于C语言的简单操作系统为目标,旨在帮助学生深入理解操作系统的原理和实践,并培养解决操作系统相关问题的能力。学院为学生提供了各种资源和指导,以支持学生成功完成这个项目。 ### 回答3: 广东工业大学计算机学院的OS课程设计任务是设计一个操作系统程序。操作系统是计算机系统中的关键组成部分,为用户和应用程序提供了各种功能和服务,如资源管理、进程调度、文件系统等。因此,OS课程设计程序需要包含这些基本功能,以满足实际应用的需求。 在设计过程中,首先需要实现进程管理功能。这包括进程的创建、调度和终止等操作。可以使用优先级调度算法来决定进程的执行顺序,确保高优先级的进程能够优先执行。 其次,需要实现内存管理功能。操作系统需要负责内存的分配和释放,以及对内存的管理和保护。可以采用分页式内存管理方式,将内存划分成固定大小的页面,并通过页表来实现虚拟地址到物理地址的映射。 另外,文件系统也是OS课程设计程序中重要的组成。文件系统负责管理硬盘上的文件和目录,并提供相应的文件操作接口。可以采用磁盘块分配表的方式来管理文件,实现文件的读写和修改等功能。 此外,为了保证操作系统的稳定性和安全性,还需要实现中断处理和异常处理机制。中断是在计算机工作过程中无法预测的事件,如外部设备的中断请求等。异常是指程序在执行过程中出现的错误或非法操作。在发生中断或异常时,操作系统需要能够及时进行处理,保证系统的正常运行。 综上所述,广东工业大学计算机学院OS课程设计程序需要包含进程管理、内存管理、文件系统、中断处理等功能。通过实现这些功能,可以加深对操作系统原理和实现的理解,并提高软件开发和系统优化的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值