⑴ 用api函数编程获取系统版本,要程序,比如程序运行后出来结果是win7或xp
参考如下程序,主要API是GetVersionEx,但是你需要自己知道Win7和XP的version的值来判断到底是什么系统
#include <windows.h>#include <iostream>using namespace std;int main(){OSVERSIONINFOEX osver;osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);//获取版本信息if (! GetVersionEx((LPOSVERSIONINFO)&osver)){cout<<“Error:”<<GetLastError()<<endl;}//打印版本信息cout<<“System info:”<<endl;cout<<“Version:”<<osver.dwMajorVersion<<“.”<<osver.dwMinorVersion<<” Build “<<osver.dwBuildNumber<<” Service Pack “<<osver.wServicePackMajor<<“.”<<osver.wServicePackMinor<<endl;if (osver.dwMajorVersion >= 5 && osver.dwMajorVersion < 6){cout<<“This is XP”<<endl;}else if (osver.dwMajorVersion > 6.0){cout<<“This is Win7 or above”<<endl;}else{cout<<“This is Win2000 or previous version”<<endl;}system(“pause”);}
⑵ 我见MFC有好几个版本,我怎样知道我机器上是多少版本号
MFCversion6.0(stillmfc42.dll)->VisualC++version6.0MFCversion7.0(mfc70.dll)——>VisualC++.NETMFC自4.2之后改动就不大.软件发行的时候会包含它自己需要的MFC运行时库的,一般不需要自己更新。
⑶ 如何用cmd命令查看Windows系统的详细版本号
首先明确一点: 所有的在cmd命令行下对环境变量的修改只对当前窗口有效,不是永久性的修改。也就是说当关闭此cmd命令行窗口后,将不再起作用。永久性修改环境变量的方法有两种:一种是直接修改注册表(此种方法目前没试验过),另一种是通过我的电脑-〉属性-〉高级,来设置系统的环境变量(查看详细)。 其次,明确一下环境变量的作用。 当启动cmd命令行窗口调用某一命令的时候,经常会出现“xxx不是内部或外部命令,也不是可运行的程序或批处理文件”,如果你的拼写没有错误,同时计算机中确实存在这个程序,那么出现这个提示就是你的path变量没有设置正确,因为你的path路径,也就是默认路径里没有你的程序,同时你有没有给出你程序的绝对路径(因为你只是输入了命令或程序的名称而已),这是操作系统不知道去哪儿找你的程序,就会提示这个问题。 第四:如何修改? 1、查看当前所有可用的环境变量:输入 set 即可查看。 2、查看某个环境变量:输入 “set 变量名”即可,比如想查看path变量的值,即输入 set path 3、修改环境变量 :输入 “set 变量名=变量内容”即可,比如将path设置为“d:\nmake.exe”,只要输入set path="d:\nmake.exe"。注意,此修改环境变量是指用现在的内容去覆盖以前的内容,并不是追加。比如当我设置了上面的path路径之后,如果我再重新输入set path="c",再次查看path路径的时候,其值为“c:”,而不是“d:\nmake.exe”;“c”。 5、给变量追加内容(不同于3,那个是覆盖):输入“set 变量名=%变量名%;变量内容”。如,为path添加一个新的路径,输入“ set path=%path%;d:\nmake.exe”即可将d:\nmake.exe添加到path中,再次执行"set path=%path%;c:",那么,使用set path语句来查看的时候,将会有:d:\nmake.exe;c:,而不是像第3步中的只有c:。如: set PATH=%PATH%;C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib;C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin;C:\Program Files\Microsoft SDKs\Windows\v6.0A\include set INCLUDE=%INCLUDE%;C:\Program Files\Microsoft SDKs\Windows\v6.0A\include set LIB=%LIB%;C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib set LIB=C:\Program Files\Microsoft XML Parser SDK\lib;C:\Program Files\Microsoft Platform SDK\lib\;C:\Program Files\Microsoft Visual Studio\VC98\mfc\lib;C:\Program Files\Microsoft Visual Studio\VC98\lib set PATH=%PATH%;C:\Program Files\Microsoft Visual Studio\Common\Tools; C:\Program Files\Microsoft Visual Studio\Common\Tools\WinNT; C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin; C:\Program Files\Microsoft Visual Studio\VC98\bin set INCLUDE=C:\Program Files\Microsoft XML Parser SDK\Inc; C:\Program Files\Microsoft SDK\Include\; C:\Program Files\Microsoft Visual Studio\VC98\atl\include; C:\Program Files\Microsoft Visual Studio\VC98\mfc\include; C:\Program Files\Microsoft Visual Studio\VC98\include 附录:下面贴上一些常用的环境变量及作用 %ALLUSERSPROFILE% 局部 返回所有“用户配置文件”的位置。 %APPDATA% 局部 返回默认情况下应用程序存储数据的位置。 %CD% 局部 返回当前目录字符串。 %CMDCMDLINE% 局部 返回用来启动当前的 Cmd.exe 的准确命令行。 %CMDEXTVERSION% 系统 返回当前的“命令处理程序扩展”的版本号。 %COMPUTERNAME% 系统 返回计算机的名称。 %COMSPEC% 系统 返回命令行解释器可执行程序的准确路径。 %DATE% 系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关 date 命令的详细信息,请参阅 Date。 %ERRORLEVEL% 系统 返回最近使用过的命令的错误代码。通常用非零值表示错误。 %HOMEDRIVE% 系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。 %HOMEPATH% 系统 返回用户主目录的完整路径。基于主目录值的设置。
⑷ VS2012 MFC程序怎样更改程序版本号
项目-》属性-》应用程序-》程序集信息
⑸ MFC中用什么方法类能获取进行图片、音乐和视频的详细信息咩
CFileFind类肯定不能获取所有文件属性,这个函数只获取与文件系统相关的必要信息。API函数中,GetFileVersionInfo能获取文件属性中,版本信息(信息细节,基本和在资源管理器中右键一个exe文件后的版本页相同)而媒体、图片等类型文件的特殊信息,属于“摘要”,如果要统一方法获取,需要通过shell编程来完成。即通过IShellFolder相关接口的GetDetailsEx方法,可以获取诸如MP3、JPG、AVI等格式文件的信息(就是资源管理器中可以查看的信息,都可以通过壳编程获取)需要注意的事情比较多,具体你可以网络“shell编程 IShellFolder2”
⑹ MFC如何更改软件的版本号
这个是 about 对话框 打开工程–> 资源视图—> xxx.rc—>Dialog —> 找到那个about对话框,直接改就可以了
⑺ mfc/c++获得文件的产品版本号
#include "stdafx.h"#include #include #include using namespace std;struct FileObject{ TCHAR szFileName[MAX_PATH+1]; Dword dwFileSize;};//文件列表vector g_vFileList;int ScanFiles(LPCTSTR lpFilePath){ //设置wcout, 使能输出中文 std::wcout.imbue(std::locale("chs")); //初始化搜索路径 TCHAR szFind[MAX_PATH]; WIN32_FIND_DATAW FindFileData; wcscpy_s(szFind, MAX_PATH, lpFilePath); wcscat_s(szFind,MAX_PATH, L"\\*.*"); HANDLE hFind=::FindFirstFile(szFind,&FindFileData); if(INVALID_HANDLE_VALUE == hFind) { //cout::iterator iter; for (iter = g_vFileList.begin(); iter != g_vFileList.end(); iter++) { wcout<
⑻ 在MFC 中如何更改软件的版本号
在资源视图中有Version文件夹,里面有version_info,双击打开这个。
出现下图:
版本号 只需要修改上面的红色框即可,下面的蓝色框会自动同步上面的。
另外还有公司名什么的。自己修改着看吧
⑼ MFC 怎么获取当前的IE浏览器版本信息
读注册表吧HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Version
⑽ VC++ MFC如何获取CPU ID及硬盘的序列号
// “获得Intel CPU ID”按钮消息处理函数void CIntelCPUIDDlg::OnBtnCPUID() { unsigned long s1,s2; unsigned char vendor_id[]="————";//CPU提供商ID CString str1,str2,str3; // 以下为获得CPU ID的汇编语言指令 _asm // 得到CPU提供商信息 { xor eax,eax // 将eax清0 cpuid // 获取CPUID的指令 mov dword ptr vendor_id,ebx mov dword ptr vendor_id[+4],edx mov dword ptr vendor_id[+8],ecx } str1.Format("%s",vendor_id); _asm // 得到CPU ID的高32位 { mov eax,01h xor edx,edx cpuid mov s2,eax } str2.Format("%08X-",s2); _asm // 得到CPU ID的低64位 { mov eax,03h xor ecx,ecx xor edx,edx cpuid mov s1,edx mov s2,ecx } str3.Format("%08X-%08X\n",s1,s2); str2=str2+str3; m_editVendor.SetWindowText(str1); m_editCPUID.SetWindowText(str2); }// GetHDSerial.cpp: implementation of the CGetHDSerial class.////////////////////////////////////////////////////////////////////////#include "stdafx.h"#include "GetHDSerial.h"char m_buffer[256];WORD m_serial[256];DWORD m_OldInterruptAddress;DWORDLONG m_IDTR;// 等待硬盘空闲static unsigned int WaitHardDiskIdle() { BYTE byTemp;Waiting: _asm { mov dx, 0x1f7 in al, dx cmp al, 0x80 jb Endwaiting jmp Waiting }Endwaiting: _asm { mov byTemp, al } return byTemp; } //中断服务程序void _declspec( naked )InterruptProcess(void){ int byTemp; int i; WORD temp; //保存寄存器值 _asm { push eax push ebx push ecx push edx push esi } WaitHardDiskIdle();//等待硬盘空闲状态 _asm { mov dx, 0x1f6 mov al, 0xa0 out dx, al } byTemp = WaitHardDiskIdle(); //若直接在Ring3级执行等待命令,会进入死循环 if ((byTemp&0x50)!=0x50) { _asm // 恢复中断现场并退出中断服务程序 { pop esi pop edx pop ecx pop ebx pop eax iretd } } _asm { mov dx, 0x1f6 //命令端口1f6,选择驱动器0 mov al, 0xa0 out dx, al inc dx mov al, 0xec out dx, al //发送读驱动器参数命令 } byTemp = WaitHardDiskIdle(); if ((byTemp&0x58)!=0x58) { _asm // 恢复中断现场并退出中断服务程序 { pop esi pop edx pop ecx pop ebx pop eax iretd } } //读取硬盘控制器的全部信息 for (i=0;i<256;i++) { _asm { mov dx, 0x1f0 in ax, dx mov temp, ax } m_serial[i] = temp; } _asm { pop esi pop edx pop ecx pop ebx pop eax iretd } }//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////CGetHDSerial::CGetHDSerial(){}CGetHDSerial::~CGetHDSerial(){}// 读取硬盘序列号函数char* CGetHDSerial::GetHDSerial(){ m_buffer[0]='\n'; // 得到当前操作系统版本 OSVERSIONINFO OSVersionInfo; OSVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx( &OSVersionInfo); if (OSVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT) { // Windows 9x/ME下读取硬盘序列号 WORD m_wWin9xHDSerial[256]; Win9xReadHDSerial(m_wWin9xHDSerial); strcpy (m_buffer, WORDToChar (m_wWin9xHDSerial, 10, 19)); } else { // Windows NT/2000/XP下读取硬盘序列号 DWORD m_wWinNTHDSerial[256]; // 判断是否有SCSI硬盘 if ( ! WinNTReadIDEHDSerial(m_wWinNTHDSerial)) WinNTReadSCSIHDSerial(m_wWinNTHDSerial); strcpy (m_buffer, DWORDToChar (m_wWinNTHDSerial, 10, 19)); } return m_buffer;}// Windows9X/ME系统下读取硬盘序列号void _stdcall CGetHDSerial::Win9xReadHDSerial(WORD * buffer){ int i; for(i=0;i<256;i++) buffer[i]=0; _asm { push eax //获取修改的中断的中断描述符(中断门)地址 sidt m_IDTR mov eax,dword ptr [m_IDTR+02h] add eax,3*08h+04h cli //保存原先的中断入口地址 push ecx mov ecx,dword ptr [eax] mov cx,word ptr [eax-04h] mov dword ptr m_OldInterruptAddress,ecx pop ecx //设置修改的中断入口地址为新的中断处理程序入口地址 push ebx lea ebx,InterruptProcess mov word ptr [eax-04h],bx shr ebx,10h mov word ptr [eax+02h],bx pop ebx //执行中断,转到Ring 0(类似CIH病毒原理) int 3h //恢复原先的中断入口地址 push ecx mov ecx,dword ptr m_OldInterruptAddress mov word ptr [eax-04h],cx shr ecx,10h mov word ptr [eax+02h],cx pop ecx sti pop eax } for(i=0;i<256;i++) buffer[i]=m_serial[i];}// Windows 9x/ME系统下,将字类型(WORD)的硬盘信息转换为字符类型(char)char * CGetHDSerial::WORDToChar (WORD diskdata [256], int firstIndex, int lastIndex){ static char string [1024]; int index = 0; int position = 0; // 按照高字节在前,低字节在后的顺序将字数组diskdata 中内容存入到字符串string中 for (index = firstIndex; index <= lastIndex; index++) { // 存入字中的高字节 string [position] = (char) (diskdata [index] / 256); position++; // 存入字中的低字节 string [position] = (char) (diskdata [index] % 256); position++; } // 添加字符串结束标志 string [position] = '\0'; // 删除字符串中空格 for (index = position – 1; index > 0 && ' ' == string [index]; index–) string [index] = '\0'; return string;}// Windows NT/2000/XP系统下,将双字类型(DWORD)的硬盘信息转换为字符类型(char)char* CGetHDSerial::DWORDToChar (DWORD diskdata [256], int firstIndex, int lastIndex){ static char string [1024]; int index = 0; int position = 0; // 按照高字节在前,低字节在后的顺序将双字中的低字存入到字符串string中 for (index = firstIndex; index <= lastIndex; index++) { // 存入低字中的高字节 string [position] = (char) (diskdata [index] / 256); position++; // 存入低字中的低字节 string [position] = (char) (diskdata [index] % 256); position++; } // 添加字符串结束标志 string [position] = '\0'; // 删除字符串中空格 for (index = position – 1; index > 0 && ' ' == string [index]; index–) string [index] = '\0'; return string;}// Windows NT/2000/XP下读取IDE硬盘序列号BOOL CGetHDSerial::WinNTReadIDEHDSerial(DWORD * buffer){ BYTE IdOutCmd [sizeof (SENDCMDOUTPARAMS) + IDENTIFY_BUFFER_SIZE – 1]; BOOL bFlag = FALSE; int drive = 0; char driveName [256]; HANDLE hPhysicalDriveIOCTL = 0; sprintf (driveName, "\\\\.\\PhysicalDrive%d", drive); // Windows NT/2000/XP下创建文件需要管理员权限 hPhysicalDriveIOCTL = CreateFile (driveName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (hPhysicalDriveIOCTL != INVALID_HANDLE_VALUE) { GETVERSIONOUTPARAMS VersionParams; DWORD cbBytesReturned = 0; // 得到驱动器的IO控制器版本 memset ((void*) &VersionParams, 0, sizeof(VersionParams)); if(DeviceIoControl (hPhysicalDriveIOCTL, IOCTL_GET_VERSION, NULL, 0, &VersionParams, sizeof(VersionParams), &cbBytesReturned, NULL) ) { if (VersionParams.bIDEDeviceMap > 0) { BYTE bIDCmd = 0; // IDE或者ATAPI识别命令 SENDCMDINPARAMS scip; // 如果驱动器是光驱,采用命令IDE_ATAPI_IDENTIFY, command, // 否则采用命令IDE_ATA_IDENTIFY读取驱动器信息 bIDCmd = (VersionParams.bIDEDeviceMap >> drive & 0x10)? IDE_ATAPI_IDENTIFY : IDE_ATA_IDENTIFY; memset (&scip, 0, sizeof(scip)); memset (IdOutCmd, 0, sizeof(IdOutCmd)); // 获取驱动器信息 if (WinNTGetIDEHDInfo (hPhysicalDriveIOCTL, &scip, (PSENDCMDOUTPARAMS)&IdOutCmd, (BYTE) bIDCmd, (BYTE) drive, &cbBytesReturned)) { int m = 0; USHORT *pIdSector = (USHORT *) ((PSENDCMDOUTPARAMS) IdOutCmd) -> bBuffer; for (m = 0; m < 256; m++) buffer[m] = pIdSector [m]; bFlag = TRUE; // 读取硬盘信息成功 } } } CloseHandle (hPhysicalDriveIOCTL); // 关闭句柄 } return bFlag;}// WindowsNT/2000/XP系统下读取SCSI硬盘序列号BOOL CGetHDSerial::WinNTReadSCSIHDSerial (DWORD * buffer){ buffer[0]='\n'; int controller = 0; HANDLE hScsiDriveIOCTL = 0; char driveName [256]; sprintf (driveName, "\\\\.\\Scsi%d:", controller); // Windows NT/2000/XP下任何权限都可以进行 hScsiDriveIOCTL = CreateFile (driveName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (hScsiDriveIOCTL != INVALID_HANDLE_VALUE) { int drive = 0; DWORD mmy; for (drive = 0; drive < 2; drive++) { char buffer [sizeof (SRB_IO_CONTROL) + SENDIDLENGTH]; SRB_IO_CONTROL *p = (SRB_IO_CONTROL *) buffer; SENDCMDINPARAMS *pin = (SENDCMDINPARAMS *) (buffer + sizeof (SRB_IO_CONTROL)); // 准备参数 memset (buffer, 0, sizeof (buffer)); p -> HeaderLength = sizeof (SRB_IO_CONTROL); p -> Timeout = 10000; p -> Length = SENDIDLENGTH; p -> ControlCode = IOCTL_SCSI_MINIPORT_IDENTIFY; strncpy ((char *) p -> Signature, "SCSIDISK", 8); pin -> irDriveRegs.bCommandReg = IDE_ATA_IDENTIFY; pin -> bDriveNumber = drive; // 得到SCSI硬盘信息 if (DeviceIoControl (hScsiDriveIOCTL, IOCTL_SCSI_MINIPORT, buffer, sizeof (SRB_IO_CONTROL) + sizeof (SENDCMDINPARAMS) – 1, buffer, sizeof (SRB_IO_CONTROL) + SENDIDLENGTH, &mmy, NULL)) { SENDCMDOUTPARAMS *pOut = (SENDCMDOUTPARAMS *) (buffer + sizeof (SRB_IO_CONTROL)); IDSECTOR *pId = (IDSECTOR *) (pOut -> bBuffer); if (pId -> sModelNumber [0]) { int n = 0; USHORT *pIdSector = (USHORT *) pId; for (n = 0; n < 256; n++) buffer[n] =pIdSector [n]; return TRUE; // 读取成功 } } } CloseHandle (hScsiDriveIOCTL); // 关闭句柄 } return FALSE; // 读取失败}// Windows NT/2000/XP下读取IDE设备信息BOOL CGetHDSerial::WinNTGetIDEHDInfo (HANDLE hPhysicalDriveIOCTL, PSENDCMDINPARAMS pSCIP, PSENDCMDOUTPARAMS pSCOP, BYTE bIDCmd, BYTE bDriveNum, PDWORD lpcbBytesReturned){ // 为读取设备信息准备参数 pSCIP -> cBufferSize = IDENTIFY_BUFFER_SIZE; pSCIP -> irDriveRegs.bFeaturesReg = 0; pSCIP -> irDriveRegs.bSectorCountReg = 1; pSCIP -> irDriveRegs.bSectorNumberReg = 1; pSCIP -> irDriveRegs.bCylLowReg = 0; pSCIP -> irDriveRegs.bCylHighReg = 0; // 计算驱动器位置 pSCIP -> irDriveRegs.bDriveHeadReg = 0xA0 | ((bDriveNum & 1) << 4); // 设置读取命令 pSCIP -> irDriveRegs.bCommandReg = bIDCmd; pSCIP -> bDriveNumber = bDriveNum; pSCIP -> cBufferSize = IDENTIFY_BUFFER_SIZE; // 读取驱动器信息 return ( DeviceIoControl (hPhysicalDriveIOCTL, IOCTL_GET_DRIVE_INFO, (LPVOID) pSCIP, sizeof(SENDCMDINPARAMS) – 1, (LPVOID) pSCOP, sizeof(SENDCMDOUTPARAMS) + IDENTIFY_BUFFER_SIZE – 1, lpcbBytesReturned, NULL) );}