如何得到 CPU 信息

onlinedown 2006-08-18 10:18:18
VB 下如何得到 CPU 信息,比如厂商是 Intel 还是 AMD,频率多少,一共有几个逻辑 CPU,是否支持 SSE 等等?
...全文
326 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
onlinedown 2006-08-19
  • 打赏
  • 举报
回复
感谢大家讨论
threenewbee 2006-08-19
  • 打赏
  • 举报
回复
然后在 VB 里面添加一个模块,添加如下代码:

Private Declare Function GetCPUCount Lib "cpu.dll" () As Long
Private Declare Function GetCPUFrequency Lib "cpu.dll" () As Long
Private Declare Sub GetCPUString Lib "cpu.dll" (ByRef ch17rtn As Byte)
Private Declare Sub GetCPUStdVendor Lib "cpu.dll" (ByRef ch48rtn As Byte)

Public Function GetCPUFullDescription() As String
On Error GoTo ErrProc:
Dim strCPUString As String
Dim strCPUStdVendor As String
Dim ch17rtn(17) As Byte
Dim ch48rtn(48) As Byte
Dim i As Long
GetCPUStdVendor ch17rtn(0)
GetCPUString ch48rtn(0)
For i = 0 To 17
strCPUStdVendor = strCPUStdVendor & Chr(ch17rtn(i))
Next
For i = 0 To 48
strCPUString = strCPUString & Chr(ch48rtn(i))
Next
strCPUStdVendor = Trim(Replace(strCPUStdVendor, Chr(0), " "))
strCPUString = Trim(Replace(strCPUString, Chr(0), " "))
If Len(strCPUString) < 10 Then
strCPUString = strCPUStdVendor & " CPU"
End If
GetCPUFullDescription = GetCPUCount & " * " & strCPUString & " @ " & GetCPUFrequency & " MHz"
Exit Function
ErrProc:
Debug.Print Err.Description
End Function

Public Function GetShortCPUName() As String
On Error GoTo ErrProc:
Dim strCPUString As String
Dim strCPUStdVendor As String
Dim ch17rtn(17) As Byte
Dim ch48rtn(48) As Byte
Dim i As Long
GetCPUStdVendor ch17rtn(0)
GetCPUString ch48rtn(0)
For i = 0 To 17
strCPUStdVendor = strCPUStdVendor & Chr(ch17rtn(i))
Next
For i = 0 To 48
strCPUString = strCPUString & Chr(ch48rtn(i))
Next
strCPUStdVendor = Trim(Replace(strCPUStdVendor, Chr(0), " "))
strCPUString = Trim(Replace(strCPUString, Chr(0), " "))
If Len(strCPUString) < 10 Then
strCPUString = strCPUStdVendor & " CPU"
End If
GetShortCPUName = strCPUString
Exit Function
ErrProc:
Debug.Print Err.Description
End Function
threenewbee 2006-08-19
  • 打赏
  • 举报
回复
#include <windows.h>

void __stdcall GetCPUStdVendor(char * szVendor)
{
union {
char CPUVendorString[13];
struct {
unsigned int dw00b;
unsigned int dw00c;
unsigned int dw00d;
char ch0;
} dws;
} CPUVendorData;

CPUVendorData.dws.ch0 = '\0';

_asm {
xor eax, eax
cpuid
mov CPUVendorData.dws.dw00b, ebx
mov CPUVendorData.dws.dw00d, ecx
mov CPUVendorData.dws.dw00c, edx
}
strcpy((char *)szVendor, CPUVendorData.CPUVendorString);
}

int __stdcall GetCPUCount()
{
SYSTEM_INFO info;
info.dwNumberOfProcessors = 0;
GetSystemInfo (&info);
return info.dwNumberOfProcessors;
}

int __stdcall GetCPUFrequency()
{
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 (int)((iStopCounter-iStartCounter)/62500);
}

void __stdcall GetCPUString(char * szCPUName)
{
union {
char CPUNameString[48];
struct {
unsigned int dw02a;
unsigned int dw02b;
unsigned int dw02c;
unsigned int dw02d;
unsigned int dw03a;
unsigned int dw03b;
unsigned int dw03c;
unsigned int dw03d;
unsigned int dw04a;
unsigned int dw04b;
unsigned int dw04c;
unsigned int dw04d;
} dws;
} CPUNameData;

_asm {
xor eax, eax
mov eax, 80000002H
cpuid
mov CPUNameData.dws.dw02a, eax
mov CPUNameData.dws.dw02b, ebx
mov CPUNameData.dws.dw02c, ecx
mov CPUNameData.dws.dw02d, edx
xor eax, eax
mov eax, 80000003H
cpuid
mov CPUNameData.dws.dw03a, eax
mov CPUNameData.dws.dw03b, ebx
mov CPUNameData.dws.dw03c, ecx
mov CPUNameData.dws.dw03d, edx
xor eax, eax
mov eax, 80000004H
cpuid
mov CPUNameData.dws.dw04a, eax
mov CPUNameData.dws.dw04b, ebx
mov CPUNameData.dws.dw04c, ecx
mov CPUNameData.dws.dw04d, edx
}
strcpy((char *)szCPUName, CPUNameData.CPUNameString);
}

把上面的文件编译成 dll,比如 cpu.dll
一笑拔剑 2006-08-18
  • 打赏
  • 举报
回复
GetCpuInfo(获取CPU信息)
详细说明: 文件包含一个dll文件VC源码+vb示例程序
dll文件需要VC编译 〕

http://www.xingworld.net/show.html?root=1&branch=6&leaf=36&id=2519

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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