System Hardware Information Finder

This article is an update to my previous articles on the same topic. I started this utility to get some basic information about the hardware. After that I have received some emails from some of our fellow programmers, who are frequent visitors of this site, asking to extend this utility to spit out some more information. In this update I have added the information about CPU vendor (Intel, Cyrix, AMD, etc.) ,CPU speed, and Physical memory status of sustem .

CPU Information:

To get CPU information I could not find any direct and simple API call. Then I thought of our friendly Registry, which contains all the system information. And there it was all the information I wanted. If you look under HKEY_LOCAL_MACHINE/Hardware/Description/System/CentralProcessor/0 key in registry, you will find the answers to your questions. ~MHz subkey gives the CPU speed and VendorIdentifier gives the vendor information. We will make use of RegQueryValueEx API call to get the information.

LONG RegQueryValueEx(
HKEY hKey, 			// handle to key to query
LPTSTR lpValueName, 	// address of name of value to query
LPDWORD lpReserved, 	// reserved
LPDWORD lpType, 		// address of buffer for value type
LPBYTE lpData, 		// address of data buffer
LPDWORD lpcbData 		// address of data buffer size
); 

Before making this call, it is necessary to create the handle to registry key which needs to be queried. For this make use of RegCreateKeyEx API call.

This is how the code looks like in the included code for this utility.


// Get the processor speed info.

result = ::RegOpenKeyEx (HKEY_LOCAL_MACHINE,
	"Hardware\\Description\\System\\CentralProcessor\\0", 0, KEY_QUERY_VALUE, &hKey);

// Check if the function has succeeded.

if (result == ERROR_SUCCESS) {
	result = ::RegQueryValueEx (hKey, _T("~MHz"), NULL, NULL,
		(LPBYTE)&data, &dataSize);
		
	m_stCPUSpeed.Format ("%d", data);
	m_stCPUSpeed += _T (" MHz");

	dataSize = sizeof (vendorData);

	result = ::RegQueryValueEx (hKey, _T("VendorIdentifier"), NULL, NULL,
		(LPBYTE)vendorData, &dataSize);

	m_stVendorInfo.Format ("%s", vendorData);
}

// Make sure to close the reg key

RegCloseKey (hKey);

Since I don't have access to any other CPU than Intel. So I couldn't test this code on CPU's from Cyrix, AMD, etc.

Physical Memory Status:

To get the information about the memory status of the system we can take routes. First one, which is not easy for a person who does not know assembly language, involves getting the required information from CMOS data. Second one which simply involves making GlobalMemoryStatus API call. And I chose the second one (Ofcourse I am not assembly language pro).

VOID GlobalMemoryStatus (
LPMEMORYSTATUS lpBuffer // pointer to the memory status structure
);

The information is returned in MEMORYSTATUS data structure.

typedef struct _MEMORYSTATUS { // mst
 DWORD dwLength; // sizeof(MEMORYSTATUS)
 DWORD dwMemoryLoad; // percent of memory in use
 DWORD dwTotalPhys; // bytes of physical memory
 DWORD dwAvailPhys; // free physical memory bytes
 DWORD dwTotalPageFile; // bytes of paging file
 DWORD dwAvailPageFile; // free bytes of paging file
 DWORD dwTotalVirtual; // user bytes of address space
 DWORD dwAvailVirtual; // free user bytes
} MEMORYSTATUS, *LPMEMORYSTATUS; 

The information returned by the GlobalMemoryStatus function is volatile. There is no guarantee that two sequential calls to this function will return the same information. This API call has been made in GetMemoryInfo function of the application attached. I gets the information for memory usage, total physical memory instaled, physical memory available, and total virtual memory.

Download source - 27 KB



Comments

  • Hidden Icon at VNC Software Informer

    Posted by iconuf.com on 12/12/2012 10:44am

    By WebOsPublisher Download free 'Up arrow ' icon in transparent PNG or icon in different sizes and in best quality Up arrow : Icons and PNG image on icones.pro Chercher en françaisfr Search in englishen Buscar en españoles Cerca in italianoit Suche auf Deutschde Search Size : All the sizes at least 256px at least 128px at least 96px at least 64px at least 48px at least 32px Commercial use : Yes Whatever Colors : Add the filter black Add the filter grey Add the filter white Add the filter yellow Add the filter orange Add the filter red Add the filter pink Add the filter purple Add the filter blue Add the filter green -- iconsFarm-Fresh Web IconsUp arrow icon background color : size : 32px x 32px weight : 0.65 Ko 16px x 16px About this icon Author : FatCow Pack : Farm-Fresh Web Icons Views : 111 views Rate : Loading ... Download Download Copyright Licence : Creative Commons Commercial use : No (you can contact the author to apply). The related icons on : All the icons on 'Up arrow ' The icons of the pack Farm-Fresh Web Icons : All icons in this pack Farm-Fresh Web Icons Some related terms icon arrow, icon auxiliary, icon basic tops, icon below, icon common, icon dart, icon dominant, icon elegant, icon elevated, icon eminent, icon erect, icon first, icon head, icon head low, icon height, icon high, icon important, icon javelin, icon lance, icon low, icon noble, icon part, icon peak, icon reduced, icon reigning above, icon ridge eminence, icon rule, icon Saget, icon secondary, icon set, icon short, icon small, icon spear, icon spire height, icon summit, icon superior, icon superiority, icon top, icon transcendental, icon up, icon upper, icon vulgar About ● Help ● Contact ● Suggest your icons ● The most searched ● expérience utilisateur ● Follow @FredCozic Fan on Facebook Twitter -- :: © 2009-2012 Icones.pro ● Designed and developed by Frédéric Cozic and edited by Ligorus ::

    Reply
  • sugestion

    Posted by Dropfish on 08/29/2004 11:49pm

    it will be much better if u implement the getSysInformation inside the CSysInformation but the CXXXdlg

    Reply
  • System Information

    Posted by chandra.mohan on 08/11/2004 01:08am

    How can I get the serial number of Video Controller from c# programming

    Reply
  • Which API return the CPU serial Number?

    Posted by Legacy on 02/21/2004 12:00am

    Originally posted by: Shaghayegh

    Hi
    
    I want to write a program in Delphi that return CPU serial Number or BIOS serial number but I Don't khonw what to do?
    Please help me

    My E-mial is: sharif@baharnet.net

    Reply
  • BIOS

    Posted by Legacy on 02/17/2004 12:00am

    Originally posted by: Meena

    I want to write a code in vb that would read the DMI information in BIOS. Could anyone help me? Thank You.
    - Meena.

    Reply
  • hardware configuration & installed softwares information using MFC

    Posted by Legacy on 02/09/2004 12:00am

    Originally posted by: Ajit

    How do get machines hardware configuration & installed softwares  info using MFC
    
    Are there any APIs or classes for it.

    Reply
  • how to retrive info from registry in jsp

    Posted by Legacy on 01/21/2004 12:00am

    Originally posted by: Indu

    iam indu iam doing a project
    in which i have to retrive info of hardware & software of systems in a Lan igot some functions like
    RegQueryValueEx()
    RegOpenKeyEx()...etc but not able to use then appropriately
    can u plz help!.

    Reply
  • Get me unique hardware identifier

    Posted by Legacy on 01/08/2004 12:00am

    Originally posted by: Philip Jacob

    Development on VB 6.0
    We are aware of GetVolumeInformation Win32 API and found it is not physical serial number embedded in the hardware units.
    we will appreciate any suggestions to obtain a unique hardware identifer through API.

    Reply
  • multitasking in c programming

    Posted by Legacy on 01/01/2004 12:00am

    Originally posted by: rajendra


    I want source code for multitasking in c programming
    Plese if u know something send me mail on id .

    Reply
  • Disable/Enable Hardware Acceleration..

    Posted by Legacy on 12/10/2003 12:00am

    Originally posted by: Dillip

    Hi.!,
    How do I Enable/Disable Hardware Acceleration of Display card programmatically available under Display Properties->Settings->Advanced->Troubleshooting..?

    Any code snipte would be highly appreciated.!

    Thanks & Regards.,
    DILLIP.

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • On-demand Event Event Date: December 18, 2014 The Internet of Things (IoT) incorporates physical devices into business processes using predictive analytics. While it relies heavily on existing Internet technologies, it differs by including physical devices, specialized protocols, physical analytics, and a unique partner network. To capture the real business value of IoT, the industry must move beyond customized projects to general patterns and platforms. Check out this webcast and join industry experts as …

  • Today's agile organizations pose operations teams with a tremendous challenge: to deploy new releases to production immediately after development and testing is completed. To ensure that applications are deployed successfully, an automatic and transparent process is required. We refer to this process as Zero Touch Deployment™. This white paper reviews two approaches to Zero Touch Deployment--a script-based solution and a release automation platform. The article discusses how each can solve the key …

Most Popular Programming Stories

More for Developers

RSS Feeds