CPU Model auslesen!



  • aesse schrieb:

    OK:

    ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
    "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",0,KEY_ALL_ACCESS,&hkey);
    

    Bekomme 0 raus! Weiß nicht warum???

    Noch so ein Programmierer, der unbedingt will, daß seine Programme nur als Admin laufen, damit ja alle Viren und sonstiger Schrott freie Bahn haben. Versuchst mal damit:

    ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
    "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",0,KEY_READ,&hkey);
    

    mfg Martin



  • Und besser mit RegQueryValueExA()... 😉



  • mgaeckler schrieb:

    aesse schrieb:

    OK:

    ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
    "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",0,KEY_ALL_ACCESS,&hkey);
    

    Bekomme 0 raus! Weiß nicht warum???

    Noch so ein Programmierer, der unbedingt will, daß seine Programme nur als Admin laufen, damit ja alle Viren und sonstiger Schrott freie Bahn haben. Versuchst mal damit:

    ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
    "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",0,KEY_READ,&hkey);
    

    mfg Martin

    Du mußt auch die Größe mitgeben:

    size = MAX_PATH;
    LONG Fehler = RegQueryValueEx(hkey,"ProcessorNameString",0,&type,(LPBYTE)processorname,&size);
    

    so funktioniert's:

    void __fastcall TForm1::FormShow(TObject *Sender)
    {
    	HKEY hkey;
    	DWORD type;
    	DWORD size;
    	//DWORD dwData = sizeof(DWORD);
    	LONG ret;
    	AnsiString RetStr;
    	char processorname[MAX_PATH];
    
    	// (1) Processor Name
    	ret = RegOpenKeyEx(
    		HKEY_LOCAL_MACHINE,
    		"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",0,KEY_READ,&hkey
    	);
    	if(ret == ERROR_SUCCESS)
    	{
    		size = MAX_PATH;
    		LONG Fehler =
    		RegQueryValueEx(hkey,"ProcessorNameString",0,&type,(LPBYTE)processorname,&size);
    
    		if(Fehler == ERROR_SUCCESS)
    			RetStr = AnsiString(processorname);
    		else
    			RetStr = "Fehler: "+IntToStr(int(GetLastError()));
    
    		RegCloseKey(hkey);
    	}
    
    	Caption = RetStr;
    }
    

    mfg Martin



  • Bei mir gibt die Funktion nichts zurück! Leer!



  • aesse schrieb:

    Bei mir gibt die Funktion nichts zurück! Leer!

    Merkwürdig, der Rückgabetyp von RegQueryValueEx ist aber long. Wie kann der leer sein?



  • aesse schrieb:

    Bei mir gibt die Funktion nichts zurück! Leer!

    Hast Du denn auch die Größe angegeben?



  • Funktioniert alles!!!

    ich hatte die letzte Zeile im letzten Postcode einfach rauskopiert und nicht geändert, aber jetzt:

    HKEY hkey;
        DWORD type;
        DWORD size = MAX_PATH;
        //DWORD dwData = sizeof(DWORD);
        LONG ret;
        AnsiString RetStr;
        char processorname[MAX_PATH];
    
        // (1) Processor Name
        ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
            "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",0,KEY_READ,&hkey);
    
       if(ret == ERROR_SUCCESS)
        {
            LONG Fehler =
            RegQueryValueExA(hkey,"ProcessorNameString",0,&type,(LPBYTE)processorname,&size);
    
            if(Fehler == ERROR_SUCCESS)  RetStr = AnsiString(processorname);
            else                         RetStr = "";
    
            RegCloseKey(hkey);
        }
    
        return RetStr;
    

    Und Vielen Dank, habe ich wieder was dazu gelernt!



  • 👍

    Wenn du explizit mit char arbeitest, dann immer auch die passende *A Variante der WinAPI Funktionen nehmen. 😉



  • Danke werde ich tun!!!



  • Nur so als Ergänzung: Das gleiche gilt natürlich auch, wenn du explizit mit wchar_t arbeitest, dann immer die *W Varianten nehmen... 😉


Anmelden zum Antworten