显示器的厂家和型号,以及显示器的一些基本的显示特性和能力,比如尺寸是17寸,21寸,是CRT,还是LCD,等等;
显卡的厂家和型号,显卡的一些基本的显示特性和能力,比如显卡内部的DAC转换表是8位还是10位的,等等;
还有CPU,内存,
请问有没有什么比较容易的方法。请给段MSVC WIN32API或者MFC程序。非常感谢。
显卡的厂家和型号,显卡的一些基本的显示特性和能力,比如显卡内部的DAC转换表是8位还是10位的,等等;
还有CPU,内存,
请问有没有什么比较容易的方法。请给段MSVC WIN32API或者MFC程序。非常感谢。
解决方案 »
- button的消息循序
- 对话框上控件关联变量后,出现Access Violation
- 请问多媒体广告需要学习那些东西?
- 动态生成的frame,工具栏的tooltip出不来
- 使用Window的api如何更改一个窗口最大化时侯的尺寸?
- 如何加一个类(新新手提问,请不要笑)
- VB的窗体能不能透明呀。或是在设置了BorderStyle为0后。能不能在改变其形状。
- 为什么错了!!!!!!!!!!!
- partition magic重新分區,數據會不會丟失?
- HOOK API...
- 如何制作一个虚拟摄像头,就像softcam151一样?
- win2000工作组中,从服务中启动一个调用word打印的dll,为什么word不打印?
HRESULT ddrval;
CoInitialize(NULL);
ddrval = CoCreateInstance(CLSID_DirectDraw,
NULL, CLSCTX_ALL, IID_IDirectDraw2, (void**)&lpdd);
if(!FAILED(ddrval))
{
ddrval = IDirectDraw2_Initialize(lpdd, NULL);
}
DDCAPS ddcaps;
ddcaps.dwSize = sizeof DDCAPS;
lpdd->GetCaps(&ddcaps, NULL);
lpdd->Release();
DWORD dwMem = ddcaps.dwVidMemTotal; int iMem = dwMem/1024/1024; CString strMem;
strMem.Format(_T("display memory is %d MB"),iMem); AfxMessageBox(strMem);
CoUninitialize();
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum 有所有信息
/*
GetCurComputerInfo.h
*/
#ifndef __GETCURCOMPUTERINFO_H__
#define __GETCURCOMPUTERINFO_H__//CCurComputerInfo Class
#define MAXBUFSIZE 2000
class CGetCurComputerInfo
{
public:
CGetCurComputerInfo();
~CGetCurComputerInfo();
char* GetCurComputerName(char* szPCName, char* szRetCode);
char* GetCurUserName(char* szUserName, char* szRetCode);
char* GetCurOSVer(char* szOSVer, char* szRetCode);
char* GetCurCPUInfo(char* szCPUInfo, char* szRetCode);
char* GetCurMemSize(char* szMemSize);
protected:
BOOL GetOSVersion(char* szOSVer);
char* Trim(char* pStr);
private:
DWORD dwSize;
};#endif //~__GETCURCOMPUTERINFO_H__
/*
GetCurComputerInfo.h
*/
#include "GetCurComputerInfo.h"
//Implementation of Class CGetCurComputerInfo
CGetCurComputerInfo::CGetCurComputerInfo()
{
dwSize = 256;
}CGetCurComputerInfo::~CGetCurComputerInfo()
{
}char* CGetCurComputerInfo::GetCurComputerName(char* szPCName, char* szRetCode)
{
BOOL bRet; if (szPCName == NULL || szRetCode == NULL)
{
return NULL;
} bRet = GetComputerName(szPCName, &dwSize);
if (!bRet)
{
sprintf(szRetCode, "GetComputerName failed: %d", GetLastError());
return szRetCode;
} return szPCName;
}char* CGetCurComputerInfo::GetCurUserName(char* szUserName, char* szRetCode)
{
BOOL bRet;
DWORD cchBuff = 256; if (szUserName == NULL || szRetCode == NULL)
{
return NULL;
}
//the second para cannot use &dwSize: why?
bRet = GetUserName(szUserName, &cchBuff);
if (!bRet)
{
sprintf(szRetCode, "GetUserName failed: %d", GetLastError());
return szRetCode;
}
return szUserName;
}
BOOL CGetCurComputerInfo::GetOSVersion(char* szOSVer)
{
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx;
char szBuf[MAXBUFSIZE]; // Try calling GetVersionEx using the OSVERSIONINFOEX structure.
//
// If that fails, try using the OSVERSIONINFO structure. if (szOSVer == NULL)
{
return FALSE;
} ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
{
// If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO. osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )
return FALSE;
} switch (osvi.dwPlatformId)
{
case VER_PLATFORM_WIN32_NT: // Test for the product. if ( osvi.dwMajorVersion <= 4 )
sprintf(szOSVer, "Microsoft Windows NT "); if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
sprintf(szOSVer, "Microsoft Windows 2000 "); if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
sprintf(szOSVer, "Microsoft Windows XP "); // Test for product type.
/*
if( bOsVersionInfoEx )
{
if ( osvi.wProductType == VER_NT_WORKSTATION )
{
if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
printf ( "Personal " );
else
printf ( "Professional " );
} else if ( osvi.wProductType == VER_NT_SERVER )
{
if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
printf ( "DataCenter Server " );
else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
printf ( "Advanced Server " );
else
printf ( "Server " );
}
}
else
*/ {
HKEY hKey;
char szProductType[80];
DWORD dwBufLen; RegOpenKeyEx( HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Control\\ProductOptions",
0, KEY_QUERY_VALUE, &hKey );
RegQueryValueEx( hKey, "ProductType", NULL, NULL,
(LPBYTE) szProductType, &dwBufLen);
RegCloseKey( hKey );
if ( lstrcmpi( "WINNT", szProductType) == 0 )
strcat(szOSVer, "Professional " );
if ( lstrcmpi( "LANMANNT", szProductType) == 0 )
strcat(szOSVer, "Server " );
if ( lstrcmpi( "SERVERNT", szProductType) == 0 )
strcat(szOSVer, "Advanced Server " );
} // Display version, service pack (if any), and build number. if ( osvi.dwMajorVersion <= 4 )
{
sprintf(szBuf, "version %d.%d %s (Build %d)\n",
osvi.dwMajorVersion,
osvi.dwMinorVersion,
osvi.szCSDVersion,
osvi.dwBuildNumber & 0xFFFF); strcat(szOSVer, szBuf);
}
else
{
sprintf(szBuf, "%s (Build %d)\n",
osvi.szCSDVersion,
osvi.dwBuildNumber & 0xFFFF); strcat(szOSVer, szBuf);
}
break; case VER_PLATFORM_WIN32_WINDOWS: if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
{
sprintf(szOSVer, "Microsoft Windows 95 ");
if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' )
strcat(szOSVer, "OSR2 " );
} if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
{
sprintf(szOSVer, "Microsoft Windows 98 ");
if ( osvi.szCSDVersion[1] == 'A' )
strcat(szOSVer, "SE " );
} if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
{
sprintf(szOSVer, "Microsoft Windows Me ");
}
break; case VER_PLATFORM_WIN32s: sprintf(szOSVer, "Microsoft Win32s ");
break;
} return TRUE;
}
char* CGetCurComputerInfo::GetCurOSVer(char* szOSVer, char* szRetCode)
{
BOOL bRet; if (szOSVer == NULL || szRetCode == NULL)
{
return NULL;
}
bRet = GetOSVersion(szOSVer);
if (!bRet)
{
sprintf(szRetCode, "GetUserName failed: %d", GetLastError());
return szRetCode;
}
return szOSVer;
}char* CGetCurComputerInfo::GetCurMemSize(char* szMemSize)
{
MEMORYSTATUS msStat;
if (szMemSize == NULL)
{
return NULL;
}
GlobalMemoryStatus (&msStat); sprintf(szMemSize, "%ldKB Free/%ldKB Total(Physical)", msStat.dwAvailPhys/1024, msStat.dwTotalPhys/1024);
return szMemSize;
}char* CGetCurComputerInfo::GetCurCPUInfo(char* szCPUInfo, char* szRetCode)
{
HKEY hKey;
LPCTSTR lpSubkey = "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0";
BYTE bBuf[100];
DWORD dwBufSize = 100;
DWORD dwType = REG_SZ;
long lRet; ZeroMemory(bBuf, sizeof(bBuf));
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubkey, 0, KEY_READ, &hKey);
if (lRet != ERROR_SUCCESS)
{
sprintf(szRetCode, "RegOpenKeyEx Failed: %d", GetLastError());
return szRetCode;
} lRet = RegQueryValueEx(hKey, "ProcessorNameString", NULL, &dwType, bBuf, &dwBufSize);
if (lRet != ERROR_SUCCESS)
{
sprintf(szRetCode, "RegQueryValueEx Failed: %d", GetLastError());
RegCloseKey(hKey);
return szRetCode;
} sprintf(szCPUInfo, "%s", bBuf);
Trim(szCPUInfo); RegCloseKey(hKey);
return szCPUInfo;
}char* CGetCurComputerInfo::Trim(char* pStr)
{
char* pBegin;
char* pEnd;
long len;
if (pStr == NULL)
{
return NULL;
}
len=strlen(pStr);
if(len<=0)
{
return pStr;
}
pBegin = pStr;
pEnd = pStr + len - 1;
while (isspace(*pBegin) && *pBegin != '\0')
pBegin ++;
while (isspace(*pEnd) && pEnd > pBegin)
pEnd --;
len = pEnd - pBegin + 1;
strncpy(pStr, pBegin, len);
pStr[len] = '\0';
return pStr;
}//Implementation of CGetCurComputerInfo end
========================
//声明 HEKY hk;
//Step 1 打开注册表的具体键RegOpenKeyEx
//Step 2 对注册表操作,RegQueryValueEx,RegSetValueEx.................
//关闭 ::RegCloseKey(hk); 前期准备
======== 声明方法: HEKY hk;
//可以换你喜欢的变量,MD说了一句废话 关于键的值的类型: 就是下面的 data_Get 的类型是 LPCTSTR 关于返回值: 例如下面的 ret0 可以通过ERROR_SUCCESS判断,大家可以看下面的示例代码 关于调用的API的参数问题:不要客气,打开MSDN,写得很清楚明白。访问注册表数据的例子
====================
//----------------------------------------------------------------
//获取WIN98版本
//---------------------------------------------------------------- HKEY hk; LPCTSTR data_Get="Software\\Microsoft\\Windows\\CurrentVersion";//在注册表里的位置 long ret0=::RegOpenKeyEx(HKEY_LOCAL_MACHINE,
//根 data_Get, 0,
//必须为0,保留 KEY_READ,
//安全访问屏蔽字,具体见MSDN,列出了所有的值 &hk);
//通过ERROR_SUCCESS判断打开是否成功。 if(ret0!=ERROR_SUCCESS) MessageBox("打开注册表出现错误!","错误"); LPBYTE win_version=new BYTE[80];DWORD type=REG_SZ;DWORD cbData=80; long ret1=::RegQueryValueEx(hk,"VersionNumber",
//请求得到的键的名称NULL,
//保留,必须为NULL&type,
//值的类型,具体见MSDNwin_version,
//接受值的缓冲区 &cbData);
//缓冲区大小if(ret1!=ERROR_SUCCESS){ MessageBox("读取注册表键值出现错误!","错误"); } CString str_winversion=CString(win_version); delete[] win_version;::RegCloseKey(hk);
//----------------------------------------------------------------
用API访问注册表就是一段套话,大家可以按照我的框架来写自己的访问注册表的代码。在进行VC编程的时候要有MSDN,在改写注册表的时候要先备份你的注册表。
在MFC中访问注册表
=================
MFC在类CWinApp里提供了一个成员函数SetRegistryKey(),调用它后就可以用访问.ini文件的成员函数访问注册表了。CWinApp::SetRegistryKey() 格式:void SetRegistryKey(LPCTSTR lpszRegistryKey);lpszRegistryKey 的含义:HKEY_CURRENT_USER\SoftWare 下的子键名称。调用后下面的函数就可以访问注册表了。CWinApp::GetProfileInt(...) CWinApp::GetProfileString(...) CWinApp::WriteProfileInt(...) CWinApp::WriteProfileString(...)例子:
//----------------------------------------------------------------
//在HKEY_CURRENT_USER\SoftWare下建立mykey主键,然后在它下面建立串
//值my_string_value 和 DWORD 键值 my_int_value
//---------------------------------------------------------------- CString strKey=mykey; CString strStringItem=my_string_value; CString strIntItem=my_int_value; CWinApp* pApp=AfxGetApp();pApp->SetRegistryKey(strkey);pApp->WriteProfileString(strKey,strStringItem,hello);CString strValue;strValue=pApp->GetProfileString(strKey,strStringItem,"默认值");ASSERT(strValue==test);int nValue;nValue=pApp->GetProfileInt(strKey,strIntItem,0); ASSERT(nValue==1111);
//End That's all.--
我顶:)