怎样得到计算机信息

yxq123 2007-04-03 02:30:20
怎样得到本地计算机的相关信息。包括CPU(型号,频率),内存(容量,空闲容量),硬盘(容量,空闲容量),某个程序的安装路径,操作系统(版本)
...全文
513 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
yxq123 2007-04-04
  • 打赏
  • 举报
回复
谢谢各位,大部分已经实现。结贴,不会的在开贴,希望大家多多支持!1
wlp555ren 2007-04-04
  • 打赏
  • 举报
回复
就用LS的方法可行,不过要想得到唯一的硬件标示不是一个简单的API就能实现,而且很多硬件由于局限性,不能得到唯一标示。。。
东文-桑晨 2007-04-04
  • 打赏
  • 举报
回复
读注册表可以到网上找CRegKey相关的资料,看看MSDN有关它的介绍/使用,
一般安装的软件都会在注册表注册的
yxq123 2007-04-04
  • 打赏
  • 举报
回复
TO xyxfly(小虾米 (本命年Happy, Day Day Up!))
这nt5。1
也没什么问题 能解释一下吗?
yxq123 2007-04-04
  • 打赏
  • 举报
回复
TO Y___Y(一叶障目)
你给的代码很好,谢谢!
如果安装的文件没有写进注册表,怎样像搜索一样把它的路径搜索出来?
yxq123 2007-04-04
  • 打赏
  • 举报
回复
TO fyx010641(方怡新)
谢谢你!我的读内存问题已经解决,谢谢!


TO xyxfly(小虾米 (本命年Happy, Day Day Up!))
怎样读注册表?谢谢!能详细点吗?
做鸡真好吃 2007-04-04
  • 打赏
  • 举报
回复
mark~
yjgx007 2007-04-03
  • 打赏
  • 举报
回复
回复人:WingForce(初六,履霜,坚冰至。) ( 五级(中级)) 信誉:100 2007-04-03 18:45:39 得分:0
?
我也请教下,cpuid指令在ring3下能用么?
=========================================
No problem!
长尾巴的悟空 2007-04-03
  • 打赏
  • 举报
回复
优化大师就很厉害嘛
WingForce 2007-04-03
  • 打赏
  • 举报
回复
我也请教下,cpuid指令在ring3下能用么?
xyxfly 2007-04-03
  • 打赏
  • 举报
回复
你的第一个例子我在MSDN上看到过,可是得到的CUP类型只是586,我想得到是就像我的电脑的属性中那样的CPU显示数据。不知道有没有更好的方法!
============
可用cpuid指令


我得到的老是windows NT5.1 ,不是到为什么?
这nt5。1
也没什么问题

你也可以通过注册表来读他
Y___Y 2007-04-03
  • 打赏
  • 举报
回复
1.得到cpu频率
DWORD __cdecl GetCPUFrequency(void) //MHz
{
LARGE_INTEGER CurrTicks, TicksCount;
__int64 iStartCounter, iStopCounter;

DWORD dwOldProcessP = GetPriorityClass(GetCurrentProcess());
DWORD dwOldThreadP = GetThreadPriority(GetCurrentThread());

SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);

QueryPerformanceFrequency(&TicksCount);
QueryPerformanceCounter(&CurrTicks);

TicksCount.QuadPart /= 16;
TicksCount.QuadPart += CurrTicks.QuadPart;

_asm rdtsc
_asm mov DWORD PTR iStartCounter, EAX
_asm mov DWORD PTR (iStartCounter+4), EDX

while(CurrTicks.QuadPart<TicksCount.QuadPart)
QueryPerformanceCounter(&CurrTicks);

_asm rdtsc
_asm mov DWORD PTR iStopCounter, EAX
_asm mov DWORD PTR (iStopCounter + 4), EDX

SetThreadPriority(GetCurrentThread(), dwOldThreadP);
SetPriorityClass(GetCurrentProcess(), dwOldProcessP);

return (DWORD)((iStopCounter-iStartCounter)/62500);
}
2.找出系统中处理器的数目并检查其状态
#include <windows.h>
#include <stdio.h>
#include <conio.h>
int main(int argc, char* argv[])
{
//初始化SYSTEM_INFO数据结构
SYSTEM_INFO si;
GetSystemInfo(&si);
printf("当前有%d个处理器。\n",si.dwNumberOfProcessors);
//检查每个处理器的活动状态
for(DWORD dwPro=0;dwPro<si.dwNumberOfProcessors;dwPro++)
{
printf(" 处理器%d",dwPro);
if((si.dwActiveProcessorMask&(1<<dwPro))!=0)
{
printf("处于活动状态。\n");
}
else
{
printf("处于休眠状态。\n");
}
}
getch();
return 0;
}
3.获取内存信息

MEMORYSTATUS mem;//定义一个内存状态变量

DWORD MemTotal,MemFree,VMemTotal,VMemFree;//存储内存状态信息

GlobalMemoryStatus(&mem); //存储内存状态信息
MemTotal=mem.dwTotalPhys;//得到总内存大小(单位b)
MemFree=mem.dwAvailPhys;//得到剩余内存大小(单位b)
VMemTotal=mem.dwTotalVirtual;//得到总虚拟内存大小(单位b)
VMemFree=mem.dwAvailVirtual;//得到剩余虚拟内存内存大小(单位b)
4.用GetDiskFreeSpace获取硬盘的使用情况
5.读注册表获取程序的安装路径,操作系统(版本)
yxq123 2007-04-03
  • 打赏
  • 举报
回复
to NOLA(每天回2个技术贴)
能够详细点吗?谢谢!!


To Estfania(Estfania) ( )
你给我的例子很有用。谢谢!!!
fyx010641 2007-04-03
  • 打赏
  • 举报
回复
//定义内存信息的各种变量
MEMORYSTATUS memStatus;
char buf[80];
CString memsta="";
memStatus.dwLength=sizeof(MEMORYSTATUS);

GlobalMemoryStatus(&memStatus);

DWORD tom=memStatus.dwTotalPhys;
DWORD mem=memStatus.dwAvailPhys;
DWORD res=memStatus.dwAvailVirtual;

tom=(tom/1024)/1024;
mem=(mem/1024)/1024;
res=(res/1024)/1024;
memsta.Format("总物理内存 %ld MB ;\n可用物理内存 %ld MB; \n虚拟内存 %ld MB。",tom,mem,res);
pview->m_MemoryInfo.m_MemoryStaticInfo.SetText(memsta);



这是得到当前的内存信息,别的基本差不多,
yxq123 2007-04-03
  • 打赏
  • 举报
回复
TO ugg(逸学堂(exuetang.net))
先谢谢你!
你的第一个例子我在MSDN上看到过,可是得到的CUP类型只是586,我想得到是就像我的电脑的属性中那样的CPU显示数据。不知道有没有更好的方法!


To annywoody(如果我是太阳)
OSVERSIONINFO osversioninfo;
osversioninfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(&osversioninfo);
我得到的老是windows NT5.1 ,不是到为什么?
我用
DWORD winVer;
OSVERSIONINFO *osvi;

winVer=GetVersion();
已经成功得到操作系统,但是很简单。
Estfania 2007-04-03
  • 打赏
  • 举报
回复
http://www.vckbase.com/document/viewdoc/?id=1436
可参考
踏实每一步 2007-04-03
  • 打赏
  • 举报
回复
通过WMI很简单,msdn上example
咔咔咔西西 2007-04-03
  • 打赏
  • 举报
回复
装个msdn很多有例子的
annywoody 2007-04-03
  • 打赏
  • 举报
回复
取得操作系统版本的API是GetVersionEx
CathySun118 2007-04-03
  • 打赏
  • 举报
回复
楼上的方法可行,网上有很多类似的方法,lz搜索一下就得
加载更多回复(3)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧