vc获取硬盘物理序列号
#pragma once
#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
#include "resource.h"// 主符號
// CgetinfoApp:
// 有關(guān)此類的實現(xiàn),請參閱 getinfo.cpp
//
class CgetinfoApp : public CWinApp
{
public:
CgetinfoApp();
// 重寫
public:
virtual BOOL InitInstance();
// 實現(xiàn)
DECLARE_MESSAGE_MAP()
};
extern CgetinfoApp theApp;
// getinfoDlg.h : 頭文件
//
#pragma once
// CgetinfoDlg 對話框
class CgetinfoDlg : public CDialog
{
// 構(gòu)造
public:
CgetinfoDlg(CWnd* pParent = NULL);// 標(biāo)準構(gòu)造函數(shù)
// 對話框數(shù)據(jù)
enum { IDD = IDD_GETINFO_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV 支持
// 實現(xiàn)
protected:
HICON m_hIcon;
// 生成的消息映射函數(shù)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedOk();
};
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by getinfo.RC
//
#define IDR_MAINFRAME128
#define IDM_ABOUTBOX0x0010
#define IDD_ABOUTBOX100
#define IDS_ABOUTBOX101
#define IDD_GETINFO_DIALOG102
#define IDR_MANIFESTCREATEPROCESS_MANIFEST_RESOURCE_ID
// 新對象的下一組默認值
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE129
#define _APS_NEXT_CONTROL_VALUE1000
#define _APS_NEXT_SYMED_VALUE101
#define _APS_NEXT_COMMAND_VALUE32771
#endif
#endif
// stdafx.h : 標(biāo)準系統(tǒng)包含文件的包含文件,
// 或是經(jīng)常使用但不常更改的
// 項目特定的包含文件
#pragma once
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN// 從 Windows 標(biāo)頭中排除不常使用的資料
#endif
// 如果您必須使用下列所指定的平臺之前的平臺,則修改下面的定義。
// 有關(guān)不同平臺的相應(yīng)值的最新信息,請參考 MSDN。
#ifndef WINVER// 允許使用 Windows 95 和 Windows NT 4 或更高版本的特定功能。
#define WINVER 0x0400//為 Windows98 和 Windows 2000 及更新版本改變?yōu)檫m當(dāng)?shù)闹怠?/span>
#endif
#ifndef _WIN32_WINNT// 允許使用 Windows NT 4 或更高版本的特定功能。
#define _WIN32_WINNT 0x0400//為 Windows98 和 Windows 2000 及更新版本改變?yōu)檫m當(dāng)?shù)闹怠?/span>
#endif
#ifndef _WIN32_WINDOWS// 允許使用 Windows 98 或更高版本的特定功能。
#define _WIN32_WINDOWS 0x0410 //為 Windows Me 及更新版本改變?yōu)檫m當(dāng)?shù)闹怠?/span>
#endif
#ifndef _WIN32_IE// 允許使用 IE 4.0 或更高版本的特定功能。
#define _WIN32_IE 0x0400//為 IE 5.0 及更新版本改變?yōu)檫m當(dāng)?shù)闹怠?/span>
#endif
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS// 某些 CString 構(gòu)造函數(shù)將是顯式的
// 關(guān)閉 MFC 對某些常見但經(jīng)常被安全忽略的警告消息的隱藏
#define _AFX_ALL_WARNINGS
#include <afxwin.h> ? ? ? ? // MFC 核心和標(biāo)準組件
#include <afxext.h> ? ? ? ? // MFC 擴展
#include <afxdisp.h> ? ? ? ?// MFC 自動化類
#include <afxdtctl.h>// Internet Explorer 4 公共控件的 MFC 支持
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>// Windows 公共控件的 MFC 支持
#endif // _AFX_NO_AFXCMN_SUPPORT
// getinfo.cpp : 定義應(yīng)用程序的類行為。
//
#include "stdafx.h"
#include "getinfo.h"
#include "getinfoDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CgetinfoApp
BEGIN_MESSAGE_MAP(CgetinfoApp, CWinApp)
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
// CgetinfoApp 構(gòu)造
CgetinfoApp::CgetinfoApp()
{
// TODO: 在此處添加構(gòu)造代碼,
// 將所有重要的初始化放置在 InitInstance 中
}
// 唯一的一個 CgetinfoApp 對象
CgetinfoApp theApp;
// CgetinfoApp 初始化
BOOL CgetinfoApp::InitInstance()
{
// 如果一個運行在 Windows XP 上的應(yīng)用程序清單指定要
// 使用 ComCtl32.dll 版本 6 或更高版本來啟用可視化方式,
//則需要 InitCommonControls()。否則,將無法創(chuàng)建窗口。
InitCommonControls();
CWinApp::InitInstance();
AfxEnableControlContainer();
CgetinfoDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO:在此放置處理何時用“確定”來關(guān)閉
//對話框的代碼
}
else if (nResponse == IDCANCEL)
{
// TODO:在此放置處理何時用“取消”來關(guān)閉
//對話框的代碼
}
// 由于對話框已關(guān)閉,所以將返回 FALSE 以便退出應(yīng)用程序,
// 而不是啟動應(yīng)用程序的消息泵。
return FALSE;
}
// getinfoDlg.cpp : 實現(xiàn)文件
//
#include "stdafx.h"
#include "getinfo.h"
#include "getinfoDlg.h"
//下面兩句是我們增加的
#include "MMSystem.h"
#pragma comment(lib,"Winmm.lib")
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 用于應(yīng)用程序“關(guān)于”菜單項的 CAboutDlg 對話框
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// 對話框數(shù)據(jù)
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); ? ?// DDX/DDV 支持
// 實現(xiàn)
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// CgetinfoDlg 對話框
CgetinfoDlg::CgetinfoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CgetinfoDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CgetinfoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CgetinfoDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDOK, OnBnClickedOk)
END_MESSAGE_MAP()
// CgetinfoDlg 消息處理程序
BOOL CgetinfoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 將\“關(guān)于...\”菜單項添加到系統(tǒng)菜單中。
// IDM_ABOUTBOX 必須在系統(tǒng)命令范圍內(nèi)。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 設(shè)置此對話框的圖標(biāo)。當(dāng)應(yīng)用程序主窗口不是對話框時,框架將自動
// ?執(zhí)行此操作
SetIcon(m_hIcon, TRUE);// 設(shè)置大圖標(biāo)
SetIcon(m_hIcon, FALSE);// 設(shè)置小圖標(biāo)
// TODO:在此添加額外的初始化代碼
return TRUE; ?// 除非設(shè)置了控件的焦點,否則返回 TRUE
}
void CgetinfoDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// 如果向?qū)υ捒蛱砑幼钚』粹o,則需要下面的代碼
// ?來繪制該圖標(biāo)。對于使用文檔/視圖模型的 MFC 應(yīng)用程序,
// ?這將由框架自動完成。
void CgetinfoDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于繪制的設(shè)備上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使圖標(biāo)在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 繪制圖標(biāo)
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
//當(dāng)用戶拖動最小化窗口時系統(tǒng)調(diào)用此函數(shù)取得光標(biāo)顯示。
HCURSOR CgetinfoDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CgetinfoDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知處理程序代碼
CString cs;
FILE *fp;
fp = fopen("c:\\getinfo.ini","w+");
//獲得CPU的信息
char s[20];
//結(jié)構(gòu)LPSYSTEM_INFO包含當(dāng)前計算機信息,包括處理器的結(jié)構(gòu)、類型和數(shù)量等。
LPSYSTEM_INFO mysys;
mysys = new SYSTEM_INFO;
GetSystemInfo(mysys);
// dwNumberOfProcessors為系統(tǒng)中CPU的數(shù)量。
_itoa(mysys->dwNumberOfProcessors,s,10);
cs.Format("CPU的數(shù)量為:%s\n",s);
fwrite(cs,1,cs.GetLength(),fp);
// dwProcessorType為CPU的類型。
_itoa(mysys->dwProcessorType,s,10);
cs.Format("CPU的類型為:%s\n",s);
fwrite(cs,1,cs.GetLength(),fp);
switch (mysys->wProcessorLevel)
{
?case 3:
? ?cs = "Intel 80386";
break;
case 4:
cs = "Intel 80486";
break;
?case 5:
cs = "Pentium";
break;
?default:
cs = "未知的CPU";
break;
}
cs = "CPU的型號為:" + cs + "\n";
fwrite(cs,1,cs.GetLength(),fp);
// wProcessorRevision為CPU的修訂版本。Windows 95/98系統(tǒng)不用。
_itoa(mysys->wProcessorRevision,s,10);
cs.Format("CPU的修訂版本為:%s\n",s);
fwrite(cs,1,cs.GetLength(),fp);
delete mysys;
//獲取內(nèi)存情況
//結(jié)構(gòu)MEMORYSTATUS包含了物理內(nèi)存和虛擬內(nèi)存的當(dāng)前狀態(tài)。
MEMORYSTATUS *mymem;
//獲得系統(tǒng)內(nèi)存情況
mymem = new MEMORYSTATUS;
mymem->dwLength = sizeof(mymem); //初始化
GlobalMemoryStatus(mymem);
// dwMemoryLoad標(biāo)識當(dāng)前內(nèi)存可利用率,取值在0到100之間。
_itoa(mymem->dwMemoryLoad,s,10);
//內(nèi)存可利用率
? ?cs.Format("當(dāng)前可用內(nèi)存的百分比:%s%%\n",s);
fwrite(cs,1,cs.GetLength(),fp);
// dwTotalPhys為實際整個物理內(nèi)存的容量,以字節(jié)為單位。
_itoa(mymem->dwTotalPhys/1024,s,10);
//物理內(nèi)存總量,以KB為單位
cs.Format("物理總量為:%s KB\n",s);
fwrite(cs,1,cs.GetLength(),fp);
// dwTotalPageFile為全部頁面文件大小,以字節(jié)為單位。
_itoa(mymem->dwTotalPageFile/1024,s,10);
//頁面文件的大小,以KB為單位
cs.Format("頁面文件的大小:%s KB\n",s);
fwrite(cs,1,cs.GetLength(),fp);
// dwAvailPageFile為可用的頁面文件大小,以字節(jié)為單位。
_itoa(mymem->dwAvailPageFile/1024,s,10);
//可用頁面文件大小,以KB為單位
cs.Format("可用頁面文件大小:%s KB\n",s);
fwrite(cs,1,cs.GetLength(),fp);
// dwTotalVirtual所有用戶進程的虛擬內(nèi)存大小,以字節(jié)為單位。
? ?_itoa(mymem->dwTotalVirtual/1024,s,10);
//虛擬內(nèi)存總量,以KB為單位
cs.Format("虛擬內(nèi)存總量:%s KB\n",s);
fwrite(cs,1,cs.GetLength(),fp);
// dwAvailVirtual為可用虛擬內(nèi)存大小。
_itoa(mymem->dwAvailVirtual/1024,s,10);
//可用虛擬內(nèi)存大小,以KB為單位
cs.Format("可用虛擬內(nèi)存大小:%s KB\n",s);
fwrite(cs,1,cs.GetLength(),fp);
delete mymem;
//獲得磁盤情況
DWORD sector, byte, cluster, free;
long int freespace,totalspace;
UINT type;
char name;
//0—未知盤、1—不存在、2—可移動磁盤、3—固定磁盤、4—網(wǎng)絡(luò)磁盤、
//5—CD-ROM、6—內(nèi)存虛擬盤
char volname[255], filename[100];
DWORD sno, maxl, fileflag;
//循環(huán)檢測A~Z
for (name = 'A'; name <= 'Z'; name++)
{
? ? //獲得磁盤類型
cs.Format("%c:",name);
type = GetDriveType(cs);
switch(type)
{
case DRIVE_UNKNOWN:
cs.Format("未知類型磁盤:%c\n",name);
? ? ? fwrite(cs,cs.GetLength(),1,fp);
break;
? case DRIVE_REMOVABLE:
? ? ? ?cs.Format("可移動類型磁盤:%c\n",name);
? ? ? ?fwrite(cs,cs.GetLength(),1,fp);
break;
? ? ? ?case DRIVE_FIXED:
cs.Format("固定磁盤:%c\n",name);
? ? ? ?fwrite(cs,cs.GetLength(),1,fp);
break;
? ? ? ? ? ?
case DRIVE_REMOTE:
cs.Format("網(wǎng)絡(luò)映射磁盤:%c\n",name);
? ? ? ? ? ?fwrite(cs,cs.GetLength(),1,fp);
break;
? ? ? ? ? ? ? ? ?
case DRIVE_CDROM:
cs.Format("光驅(qū):%c\n",name);
? ? ? fwrite(cs,cs.GetLength(),1,fp);
break;
? ? ? ?case DRIVE_RAMDISK:
cs.Format("內(nèi)存虛擬磁盤:%c\n",name);
? ? ? ?fwrite(cs,cs.GetLength(),1,fp);
? ? ? ? ? ?break;
}
//獲得磁盤容量信息
cs.Format("%c:\\",name);
//獲得磁盤卷標(biāo)和序號信息
if(GetVolumeInformation(cs, volname,255,&sno,&maxl,&fileflag,filename,100))
{
//磁盤的卷標(biāo)信息
cs.Format("%c盤卷標(biāo)為:%s\n",name,volname);
? ? fwrite(cs,cs.GetLength(),1,fp);
//磁盤序號
cs.Format("%c盤序號為:%d\n",name,sno);
? ? fwrite(cs,cs.GetLength(),1,fp);
//計算磁盤剩余空間
//獲得返回參數(shù),其中cluster指磁盤總簇數(shù),free指空余的簇數(shù),sector指每簇扇區(qū)數(shù),byte指每扇區(qū)字節(jié)數(shù)
? ? GetDiskFreeSpace(cs,§or,&byte,&free,&cluster);
//計算總?cè)萘?#xff0c;以MB為單位
totalspace = cluster*byte*sector/1024/1024; ?
//計算可用空間,以MB為單位
freespace = free*byte*sector/1024/1024;
//總空間
cs.Format("%c盤總空間(MB):%d\n",name,totalspace);
fwrite(cs,cs.GetLength(),1,fp);
//可用空間
cs.Format("%c盤可用空間(MB):%d\n",name,freespace);
fwrite(cs,cs.GetLength(),1,fp);
}
}
//獲取音樂設(shè)備信息
int wavedevice,mididevice;
WAVEOUTCAPS wavecap;
// MIDIOUTCAPS結(jié)構(gòu)體的成員跟WAVEOUTCAPS的差不多
MIDIOUTCAPS midicap;
//波形設(shè)備信息
wavedevice = (int)waveOutGetNumDevs();
// MIDI設(shè)備信息
mididevice = (int)midiOutGetNumDevs(); ?
//波形設(shè)備
if (wavedevice != 0)
{
waveOutGetDevCaps(0,&wavecap,sizeof(WAVEOUTCAPS));
cs.Format("當(dāng)前波形設(shè)備:%s\n",wavecap.szPname);
? ? ? ?fwrite(cs,cs.GetLength(),1,fp);
}
//MIDI設(shè)備
if (mididevice != 0)
{
midiOutGetDevCaps(0,&midicap,sizeof(MIDIOUTCAPS));
? ? ? ?cs.Format("當(dāng)前MIDI設(shè)備:%s\n",midicap.szPname);
? ? ? ?fwrite(cs,cs.GetLength(),1,fp);
}
//獲取屏幕信息
//獲得屏幕分辨率,x為水平像素,y為垂直像素。
int x = GetSystemMetrics(SM_CXSCREEN);
int y = GetSystemMetrics(SM_CYSCREEN);
cs.Format("當(dāng)前分辨率為:%d * %d\n",x,y);
fwrite(cs,cs.GetLength(),1,fp);
//獲得Windows信息
char windir[MAX_PATH];
//獲得Windows目錄
GetWindowsDirectory(windir,MAX_PATH);
cs.Format("Windows所在的目錄是:%s\n",windir);
fwrite(cs,cs.GetLength(),1,fp);
//獲得Windows系統(tǒng)目錄
GetSystemDirectory(windir,MAX_PATH);
cs.Format("Windows的系統(tǒng)目錄是:%s\n",windir);
fwrite(cs,cs.GetLength(),1,fp);
//結(jié)構(gòu)OSVERSIONINFO包含操作系統(tǒng)的版本信息。
OSVERSIONINFO osvi;
CString os;
//獲得操作系統(tǒng)信息
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx (&osvi);
switch(osvi.dwPlatformId)
{
case VER_PLATFORM_WIN32s:
os = "Windows 3.x";
break;
case VER_PLATFORM_WIN32_WINDOWS:
os = "Windows 95/98/Me";
break;
case VER_PLATFORM_WIN32_NT:
os = "Windows NT/2000/XP";
break;
default:
os = "未知的操作系統(tǒng)";
break;
}
// dwMajorVersion為版本高位,dwMinorVersion為版本低位。例如:如果操作系統(tǒng)是Windows NT 3.52,則dwMajorVersion等于3,dwMinorVersion等于52。
//DwBuildNumber為操作傳統(tǒng)的編譯號。
cs.Format("操作系統(tǒng)是:%s,",os);
fwrite(cs,cs.GetLength(),1,fp);
cs.Format("版本號:%d.%d 編譯號:%d",osvi.dwMajorVersion,osvi.dwMinorVersion,osvi.dwBuildNumber);
fwrite(cs,cs.GetLength(),1,fp);
fclose(fp);
OnOK();
}
// stdafx.cpp : 只包括標(biāo)準包含文件的源文件
// getinfo.pch 將是預(yù)編譯頭
// stdafx.obj 將包含預(yù)編譯類型信息
#include "stdafx.h"
?
總結(jié)
以上是生活随笔為你收集整理的vc获取硬盘物理序列号的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Cytoscape的NetworkA
- 下一篇: 谷歌和哈佛团队用深度学习预测余震;谷歌移