❶ mfc140u.dll丢失 怎么解决啊 网上的办法也试了 解决不了啊
网上的办法是指将缺失的mfc140u.dll放到system32或syswow64文件夹吗,有时候程序会要求你把dll放在其安装目录下(我遇到过),如果放目录下提示“应用程序无法启动0xc000007b”则通常说明dll版本不对(有分32位版本和64位版本的),尝试该dll的另一个版本。该dll可以在此下载网页链接
❷ 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 怎么获取当前的IE浏览器版本信息
读注册表吧HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Version
❹ 我见MFC有好几个版本,我怎样知道我机器上是多少版本号
MFCversion6.0(stillmfc42.dll)->VisualC++version6.0MFCversion7.0(mfc70.dll)——>VisualC++.NETMFC自4.2之后改动就不大.软件发行的时候会包含它自己需要的MFC运行时库的,一般不需要自己更新。
❺ MFC如何更改软件的版本号
这个是 about 对话框 打开工程–> 资源视图—> xxx.rc—>Dialog —> 找到那个about对话框,直接改就可以了
❻ 用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”);}
❼ vc++mfc中怎么用C语言或c++实现查看系统版本信息如sp2
mfc 叫微软基本类库来,简单自的说就是吧 许多常用的类封装好了,方便使用,vc++ 就是可视 化 c++编程,和vb一样,你可以把你需要的控件拖到基本窗口上进行组合,直观是他的最大的特征,c++你已经学过,不比阐余.建议学习vc++,有一定基础后mfc学起来才有点爵头,不然容易摸不找头脑
❽ 在MFC 中如何更改软件的版本号
在资源视图中有Version文件夹,里面有version_info,双击打开这个。
出现下图:
版本号 只需要修改上面的红色框即可,下面的蓝色框会自动同步上面的。
另外还有公司名什么的。自己修改着看吧
❾ 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) );}