📄 vm_sys_info_win32.c
字号:
/*
//
// INTEL CORPORATION PROPRIETARY INFORMATION
// This software is supplied under the terms of a license agreement or
// nondisclosure agreement with Intel Corporation and may not be copied
// or disclosed except in accordance with the terms of that agreement.
// Copyright(c) 2003-2005 Intel Corporation. All Rights Reserved.
//
*/
#include "vm_sys_info.h"
#if defined(_WIN32) || defined(_WIN64)
void vm_sys_info_get_date(vm_char *m_date, DateFormat df)
{
SYSTEMTIME SystemTime;
/* check error(s) */
if (NULL == m_date)
return;
GetLocalTime(&SystemTime );
switch (df)
{
case DDMMYY:
vm_string_sprintf(m_date,
VM_STRING("%.2d/%.2d/%d"),
SystemTime.wDay,
SystemTime.wMonth,
SystemTime.wYear);
break;
case MMDDYY:
vm_string_sprintf(m_date,
VM_STRING("%.2d/%.2d/%d"),
SystemTime.wMonth,
SystemTime.wDay,
SystemTime.wYear);
break;
case YYMMDD:
vm_string_sprintf(m_date,
VM_STRING("%d/%.2d/%.2d"),
SystemTime.wYear,
SystemTime.wMonth,
SystemTime.wDay);
break;
default:
vm_string_sprintf(m_date,
VM_STRING("%2d/%.2d/%d"),
SystemTime.wMonth,
SystemTime.wDay,
SystemTime.wYear);
break;
}
} /* void vm_sys_info_get_date(vm_char *m_date, DateFormat df) */
void vm_sys_info_get_time(vm_char *m_time, TimeFormat tf)
{
SYSTEMTIME SystemTime;
/* check error(s) */
if (NULL == m_time)
return;
GetLocalTime(&SystemTime);
switch (tf)
{
case HHMMSS:
vm_string_sprintf(m_time,
VM_STRING("%.2d:%.2d:%.2d"),
SystemTime.wHour,
SystemTime.wMinute,
SystemTime.wSecond);
break;
case HHMM:
vm_string_sprintf(m_time,
VM_STRING("%.2d:%.2d"),
SystemTime.wHour,
SystemTime.wMinute);
break;
case HHMMSSMS1:
vm_string_sprintf(m_time,
VM_STRING("%.2d:%.2d:%.2d.%d"),
SystemTime.wHour,
SystemTime.wMinute,
SystemTime.wSecond,
SystemTime.wMilliseconds / 100);
break;
case HHMMSSMS2:
vm_string_sprintf(m_time,
VM_STRING("%.2d:%.2d:%.2d.%d"),
SystemTime.wHour,
SystemTime.wMinute,
SystemTime.wSecond,
SystemTime.wMilliseconds / 10);
break;
case HHMMSSMS3:
vm_string_sprintf(m_time,
VM_STRING("%.2d:%.2d:%.2d.%d"),
SystemTime.wHour,
SystemTime.wMinute,
SystemTime.wSecond,
SystemTime.wMilliseconds);
break;
default:
vm_string_sprintf(m_time,
VM_STRING("%.2d:%.2d:%.2d"),
SystemTime.wHour,
SystemTime.wMinute,
SystemTime.wSecond);
break;
}
} /* void vm_sys_info_get_time(vm_char *m_time, TimeFormat tf) */
void vm_sys_info_get_os_name(vm_char *os_name)
{
OSVERSIONINFO osvi;
BOOL bOsVersionInfo;
/* check error(s) */
if (NULL == os_name)
return;
ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
bOsVersionInfo = GetVersionEx((OSVERSIONINFO *) &osvi);
if (!bOsVersionInfo)
{
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if (!GetVersionEx((OSVERSIONINFO *) &osvi))
{
vm_string_sprintf(os_name, VM_STRING("Unknown"));
return;
}
}
switch (osvi.dwPlatformId)
{
case 2:
/* test for the specific product family. */
if ((5 == osvi.dwMajorVersion) && (2 == osvi.dwMinorVersion))
vm_string_sprintf(os_name, VM_STRING("Win2003"));
if ((5 == osvi.dwMajorVersion) && (1 == osvi.dwMinorVersion))
vm_string_sprintf(os_name, VM_STRING("WinXP"));
if ((5 == osvi.dwMajorVersion) && (0 == osvi.dwMinorVersion))
vm_string_sprintf(os_name, VM_STRING("Win2000"));
if (4 >= osvi.dwMajorVersion)
vm_string_sprintf(os_name, VM_STRING("WinNT"));
break;
/* test for the Windows 95 product family. */
case 1:
if ((4 == osvi.dwMajorVersion) && (0 == osvi.dwMinorVersion))
{
vm_string_sprintf(os_name, VM_STRING("Win95"));
if (('C' == osvi.szCSDVersion[1]) || ('B' == osvi.szCSDVersion[1]))
vm_string_strcat(os_name, VM_STRING("OSR2" ));
}
if ((4 == osvi.dwMajorVersion) && (10 == osvi.dwMinorVersion))
{
vm_string_sprintf(os_name, VM_STRING("Win98"));
if ('A' == osvi.szCSDVersion[1])
vm_string_strcat(os_name, VM_STRING("SE"));
}
if ((4 == osvi.dwMajorVersion) && (90 == osvi.dwMinorVersion))
{
vm_string_sprintf(os_name,VM_STRING("WinME"));
}
break;
case 3:
/* get platform string */
/* SystemParametersInfo(257, MAX_PATH, os_name, 0); */
if ((4 == osvi.dwMajorVersion) && (20 == osvi.dwMinorVersion))
{
vm_string_sprintf(os_name, VM_STRING("PocketPC 2003"));
}
if ((4 == osvi.dwMajorVersion) && (21 == osvi.dwMinorVersion))
{
vm_string_sprintf(os_name, VM_STRING("WinMobile2003SE"));
}
if ((5 == osvi.dwMajorVersion) && (0 == osvi.dwMinorVersion))
{
vm_string_sprintf(os_name, VM_STRING("WinCE 5.0"));
}
break;
/* Something else */
default:
vm_string_sprintf(os_name, VM_STRING("Win..."));
break;
}
} /* void vm_sys_info_get_os_name(vm_char *os_name) */
void vm_sys_info_get_program_name(vm_char *program_name)
{
vm_char tmp[_MAX_PATH] = {0,};
int i = 0;
/* check error(s) */
if (NULL == program_name)
return;
GetModuleFileName(NULL, tmp, _MAX_PATH);
i = (int) (vm_string_strrchr(tmp, (vm_char)('\\')) - tmp + 1);
vm_string_strncpy(program_name,tmp + i, vm_string_strlen(tmp) - i);
} /* void vm_sys_info_get_program_name(vm_char *program_name) */
void vm_sys_info_get_program_path(vm_char *program_path)
{
vm_char tmp[_MAX_PATH] = {0,};
int i = 0;
/* check error(s) */
if (NULL == program_path)
return;
GetModuleFileName(NULL, tmp, _MAX_PATH);
i = (int) (vm_string_strrchr(tmp, (vm_char)('\\')) - tmp + 1);
vm_string_strncpy(program_path, tmp, i - 1);
} /* void vm_sys_info_get_program_path(vm_char *program_path) */
vm_var32 vm_sys_info_get_cpu_num(void)
{
SYSTEM_INFO siSysInfo;
ZeroMemory(&siSysInfo, sizeof(SYSTEM_INFO));
GetSystemInfo(&siSysInfo);
return siSysInfo.dwNumberOfProcessors;
} /* vm_var32 vm_sys_info_get_cpu_num(void) */
vm_var32 vm_sys_info_get_mem_size(void)
{
MEMORYSTATUS m_memstat;
ZeroMemory(&m_memstat, sizeof(MEMORYSTATUS));
GlobalMemoryStatus(&m_memstat);
return (vm_var32)((double)m_memstat.dwTotalPhys / (1024 * 1024 * 2) + 0.95) * 2;
} /* vm_var32 vm_sys_info_get_mem_size(void) */
#if !defined(_WIN32_WCE)
#pragma comment(lib, "Setupapi.lib")
#include <setupapi.h>
void vm_sys_info_get_vga_card(vm_char *vga_card)
{
SP_DEVINFO_DATA sp_dev_info;
HDEVINFO DeviceInfoSet;
vm_char string1[] = VM_STRING("Display");
DWORD dwIndex = 0;
vm_char data[256] = {0,};
/* check error(s) */
if (NULL == vga_card)
return;
ZeroMemory(&sp_dev_info, sizeof(SP_DEVINFO_DATA));
ZeroMemory(&DeviceInfoSet, sizeof(HDEVINFO));
DeviceInfoSet = SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_ALLCLASSES | DIGCF_PRESENT);
sp_dev_info.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
while (SetupDiEnumDeviceInfo(DeviceInfoSet, dwIndex, &sp_dev_info))
{
SetupDiGetDeviceRegistryProperty(DeviceInfoSet,
&sp_dev_info,
SPDRP_CLASS,
NULL,
(unsigned char *) data,
256,
NULL);
if (!vm_string_strcmp((vm_char*)data, string1))
{
SetupDiGetDeviceRegistryProperty(DeviceInfoSet,
&sp_dev_info,
SPDRP_DEVICEDESC,
NULL,
(PBYTE) vga_card,
256,
NULL);
break;
}
dwIndex++;
}
SetupDiDestroyDeviceInfoList(DeviceInfoSet);
} /* void vm_sys_info_get_vga_card(vm_char *vga_card) */
void vm_sys_info_get_cpu_name(vm_char *cpu_name)
{
HKEY hKey;
vm_char data[256] = {0,};
DWORD dwSize = sizeof(data);
int i = 0;
LONG lErr;
/* check error(s) */
if (NULL == cpu_name)
return;
lErr = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
VM_STRING("Hardware\\Description\\System\\CentralProcessor\\0"),
0,
KEY_QUERY_VALUE,
&hKey);
if (ERROR_SUCCESS == lErr)
{
RegQueryValueEx(hKey,
_T("ProcessorNameString"),
NULL,
NULL,
(LPBYTE)&data,
&dwSize);
/* error protection */
data[sizeof(data) - 1] = 0;
while (data[i++] == ' ');
vm_string_strcpy(cpu_name, (vm_char *)(data + i - 1));
RegCloseKey (hKey);
}
else
vm_string_sprintf(cpu_name, VM_STRING("Unknown"));
} /* void vm_sys_info_get_cpu_name(vm_char *cpu_name) */
vm_var32 vm_sys_info_get_cpu_speed(void)
{
HKEY hKey;
vm_var32 data = 0;
DWORD dwSize = sizeof(vm_var32);
LONG lErr;
lErr = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
VM_STRING("Hardware\\Description\\System\\CentralProcessor\\0"),
0,
KEY_QUERY_VALUE,
&hKey);
if (ERROR_SUCCESS == lErr)
{
RegQueryValueEx (hKey, _T("~MHz"), NULL, NULL, (LPBYTE)&data, &dwSize);
RegCloseKey(hKey);
return data;
}
else
return 0;
} /* vm_var32 vm_sys_info_get_cpu_speed(void) */
void vm_sys_info_get_computer_name(vm_char *computer_name)
{
vm_char data[256] = {0,};
DWORD dwSize = sizeof(data);
/* check error(s) */
if (NULL == computer_name)
return;
GetComputerName(data, &dwSize);
vm_string_sprintf(computer_name, VM_STRING("%s"), data);
} /* void vm_sys_info_get_computer_name(vm_char* computer_name) */
#elif defined(_WIN32_WCE)
#include <winioctl.h>
BOOL KernelIoControl(DWORD dwIoControlCode,
LPVOID lpInBuf,
DWORD nInBufSize,
LPVOID lpOutBuf,
DWORD nOutBufSize,
LPDWORD lpBytesReturned);
#define IOCTL_PROCESSOR_INFORMATION CTL_CODE(FILE_DEVICE_HAL, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
typedef struct _PROCESSOR_INFO
{
vm_var16 wVersion;
vm_char szProcessCore[40];
vm_var16 wCoreRevision;
vm_char szProcessorName[40];
vm_var16 wProcessorRevision;
vm_char szCatalogNumber[100];
vm_char szVendor[100];
vm_var32 dwInstructionSet;
vm_var32 dwClockSpeed;
} PROCESSOR_INFO;
void vm_sys_info_get_vga_card(vm_char *vga_card)
{
/* check error(s) */
if (NULL == vga_card)
return;
vm_string_sprintf(vga_card, VM_STRING("Unknown"));
} /* void vm_sys_info_get_vga_card(vm_char *vga_card) */
void vm_sys_info_get_cpu_name(vm_char *cpu_name)
{
PROCESSOR_INFO pi;
DWORD dwBytesReturned;
vm_var32 dwSize = sizeof(PROCESSOR_INFO);
BOOL bResult;
/* check error(s) */
if (NULL == cpu_name)
return;
ZeroMemory(&pi, sizeof(PROCESSOR_INFO));
bResult = KernelIoControl(IOCTL_PROCESSOR_INFORMATION,
NULL,
0,
&pi,
sizeof(PROCESSOR_INFO),
&dwBytesReturned);
vm_string_sprintf(cpu_name,
VM_STRING("%s %s"),
pi.szProcessCore,
pi.szProcessorName);
} /* void vm_sys_info_get_cpu_name(vm_char *cpu_name) */
void vm_sys_info_get_computer_name(vm_char *computer_name)
{
vm_char data[256] = {0,};
DWORD dwSize = sizeof(data);
/* check error(s) */
if (NULL == computer_name)
return;
SystemParametersInfo(SPI_GETOEMINFO, dwSize, data, 0);
vm_string_sprintf(computer_name, VM_STRING("%s"), data);
} /* void vm_sys_info_get_computer_name(vm_char *computer_name) */
vm_var32 vm_sys_info_get_cpu_speed(void)
{
PROCESSOR_INFO pi;
vm_var32 res = 400;
DWORD dwBytesReturned;
vm_var32 dwSize = sizeof(PROCESSOR_INFO);
BOOL bResult;
ZeroMemory(&pi,sizeof(PROCESSOR_INFO));
bResult = KernelIoControl(IOCTL_PROCESSOR_INFORMATION,
NULL,
0,
&pi,
sizeof(PROCESSOR_INFO),
&dwBytesReturned);
if (pi.dwClockSpeed)
res = pi.dwClockSpeed;
return res;
} /* vm_var32 vm_sys_info_get_cpu_speed(void) */
#endif /* defined(_WIN32_WCE) */
#endif /* defined(_WIN32) || defined(_WIN64) */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -