Hallo
Warum gibt dieser Code immer 0 zurück und nicht die korrekte MHz Zahl?
Ich bin langsam am verzweifel, hab schon etwa 100 verschieden Varianten probiert und es hat einfach nichts geklappt.
Manchmal waren es auch einfach irgendwelche kryptischen Zeichen :-(
Hab etwa 4 verschieden Foren gefunden, wo diese Problem mal diskutiert wurde und es konnte immer gelöst werden.. nur bei mir geht das nicht :-(
Ihr seid meine letzte Hoffnung!
std::string CHardwareInfo::GetCpuSpeed(void)
{
HKEY hKey;
std::string strString;
std::stringstream strStream;
DWORD dwValue = 0;
DWORD dwSize = sizeof(dwValue);
DWORD dwType;
if( ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"Hardware\\\\Description\\\\System\\\\CentralProcessor\\\\0",
0,
KEY_QUERY_VALUE,
&hKey ))
{
return "Unknown";
}
if( ERROR_SUCCESS != RegQueryValueEx (hKey, "~MHz",
NULL, &dwType,
(LPBYTE)dwValue, &dwSize))
{
MessageBox(NULL,"RegQueryValueEx MHz: Failed","ERROR", MB_OK);
return "Unknown";
}
float fValue = (float)dwValue;
strStream strStream >> strString;
return strString;
}
Schon mal vielen Dank an alle, die sich das etwas genauer anschauen!
Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge
So, gerade mal etwas näher den Source angeschaut, dazu fallen mir eine Menge Anmerkungen ein :)
Falls Du VC++ 7.0 oder höher im Einsatz hast, benutz doch die Klasse CRegKey aus der MFC, damit ist der Umgang viel bequemer. Nix gegen Win32 API, aber warum muss mans sich unbedingt schwerer machen als nötig? :)
Zum Zweiten fehlt da ein & in der Zeile:
if( ERROR_SUCCESS != RegQueryValueEx (hKey, "~MHz",
NULL, &dwType,
(LPBYTE)dwValue, &dwSize))
Das muesste naemlich eigentlich (LPBYTE)&dwValue heissen :)
Zum zweiten wäre es im Sinne einer defensiven Programmierung, hier einen Buffer vorzusehen, erst in den Buffer auszulesen und dann die ersten vier Bytes des Buffers einfach per casting in ein DWORD zu übertragen.
Aber zuerstmal sollte es vom Prinzip her funktionieren, dann sehen wir weiter :)
Was ich auch ueberhaupt nicht verstehe, ist dann das Gefrickel mit dem float am Ende. Warum benutzt Du nicht einfach sprintf? Damit kannst Du Dir einen ganzen Haufen Aufwand sparen :)