Страница: 1 |
Вопрос: Процессор | Добавлено: 25.07.06 12:07 |
Автор вопроса: ![]() |
Как определить имя процессора? |
Ответы | Всего ответов: 5 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 246 Ответов: 3333 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 25.07.06 12:53 |
С помощью API функций. |
Номер ответа: 2 Автор ответа: ![]() ![]() ICQ: 827887 Вопросов: 13 Ответов: 142 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 25.07.06 13:00 |
Путь: HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0
Параметр: ProcessroNameString |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 304238252 Вопросов: 52 Ответов: 927 |
Профиль | Цитата | #3 | Добавлено: 25.07.06 19:11 |
С помощью API функций. например?
|
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Лидер форума ICQ: 216865379 Вопросов: 106 Ответов: 9979 |
Web-сайт: Профиль | Цитата | #4 | Добавлено: 26.07.06 03:03 |
#include <windows.h>
#include <cstdio> #define REG_EAX reg[0] #define REG_EBX reg[1] #define REG_ECX reg[3] #define REG_EDX reg[2] // В inline-ассемблере числа в [] означают байты #define ASM_EAX reg[0] #define ASM_EBX reg[1*4] #define ASM_ECX reg[3*4] #define ASM_EDX reg[2*4] int reg[5]; char *vendor; //Функция проверяет установлен ли бит номер flag в reg void check_flag(int reg, int flag){ int mask = 1; mask <<= flag; if(reg & mask) printf("FOUND\n" ![]() else printf("NOT FOUND\n" ![]() } //Функция выполняет инструкцию CPUID, и сохраняет после нее //регистры в REG_EAX, REG_EBX, REG_ECX и REG_EDX void cpuid(int arg){ try{ __asm{ push ebx mov eax, arg cpuid mov ASM_EAX, eax mov ASM_EBX, ebx mov ASM_ECX, ecx mov ASM_EDX, edx pop ebx } } catch(...){ MessageBox(GetDesktopWindow(), "Error while CPUID. Maybe you have earlier version of x486 processor", "Error!", MB_ICONERROR); exit(-1); } } int main(){ reg[5] = 0; //Если выполнить cpuid с EAX=0, то: //EAX - максимальное значение, с которым можно выполнять cpuid //EBX:EDX:ECX - строка - 12-байтный идентификатор производителя cpuid(0); //vendor = (char *)REG_EBX; printf("Vendor: %s\n", ®_EBX); int max_cpuid_arg = REG_EAX; //Если в EAX=1, то cpuid установит регистры в соответствии с //с возможностями процессора. cpuid(1); //В EAX находится информация о типе ,модели, семействе // и модификации процессора printf("Family: %i\n", (REG_EAX & 0xF00) >> 8); //EAX bits 11-8 printf("Model: %i\n", (REG_EAX & 0xF0) >> 4); //EAX bits 7-4 printf("Stepping: %i\n", REG_EAX & 0xF); //EAX bits 3-0 printf("Type: " ![]() switch((REG_EAX & 0x3000) >> 12){ case 0: printf("OEM\n" ![]() break; case 1: printf("Overdrive\n" ![]() break; case 2: printf(" ![]() ![]() break; } //Проверяем установлены ли определенные биты в регистре EDX //от них зависит, присутствуют ли некоторые возможности //процессора printf(" FPU : " ![]() printf(" VMode Extensions : " ![]() printf(" Debugging Extensions : " ![]() printf(" 4-Megabyte Pages : " ![]() printf(" RDTSC Instruction : " ![]() printf(" Machine-Specific Registers : " ![]() printf(" Extended Physical Addressing : " ![]() printf(" Machine-Check Exception : " ![]() printf(" CMPXCHG8B Instruction : " ![]() printf(" APIC : " ![]() printf(" SYSENTER, SYSEXIT Instructions : " ![]() printf(" Memory Type Range Registers (MTRR): " ![]() printf(" Global Pages : " ![]() printf(" Machine Check Architecture : " ![]() printf(" CMOVcc, FCMOV Instructions : " ![]() printf(" Page Attributes Table : " ![]() printf(" MMX : " ![]() printf(" FXSAVE, FXRSTOR Instructions : " ![]() printf(" SSE : " ![]() printf(" SSE2 : " ![]() char buff[128]; int t; cpuid(0x80000002); t = reg[2]; reg[2] = reg[3]; reg[3] = t; memcpy(buff, reg, sizeof(int) * 4); cpuid(0x80000003); t = reg[2]; reg[2] = reg[3]; reg[3] = t; memcpy(&buff[16], reg, sizeof(int) * 4); cpuid(0x80000004); t = reg[2]; reg[2] = reg[3]; reg[3] = t; memcpy(&buff[32], reg, sizeof(int) * 4); buff[48] = 0; printf("Processor Brand String: %s\n", buff); return 0; } |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #5 | Добавлено: 26.07.06 11:43 |
Private Sub Form_Load() Dim ProcWMISetting, TmpObj, colSWbemObjectSet Set objWMIService = GetObject("winmgmts:\\" ![]() Set colProcSettings = objWMIService.InstancesOf("Win32_Processor" ![]() For Each colSWbemObjectSet In colProcSettings For Each ProcWMISetting In colSWbemObjectSet.Properties_ List1.AddItem ProcWMISetting.Name & Space(10) & ProcWMISetting.Value Next ProcWMISetting Next colSWbemObjectSet End Sub |
Страница: 1 |
|