C++ Registry Einträge
-
Hallo, wie man Registry Einträge schreibt bzw. liest, ist mir aufgrund der Microsoft Doku klar.
Das Ding ist, wenn ich versuche einen Eintrag mit der Value 1 zu schreiben, wird dieser nicht als 1 erkannt. Ich denke es ist so, da ein const char* übergeben werden muss, und kein int.
Mein Ziel ist es aus Testzwecken den TaskMgr zu deaktivieren. Wenn ich es von Hand mache, ist es kein Problem. Es muss ja ein REG_EXPAND_SZ mit dem Namen DisableTaskMgr und der Value 1 angelegt werden. Wenn ich es aber über C++ mache, wird genau das gleiche geschrieben, aber es funktioniert halt nicht. Ich denke wie gesagt, dass es daran liegt, dass ich einen char übergebe und keinen int. Das Ding ist, die Funktion verlangt einen const char*. Daher habe ich versucht, einen Int darin zu casten und anders rum, welches leider nicht funktioniert hat. Hier ist mein Code:#include <windows.h> #include <iostream> void registry_write(LPCTSTR subkey, LPCTSTR name, DWORD type, const char* value) { HKEY key; RegOpenKey(HKEY_CURRENT_USER, subkey, &key); RegSetValueEx(key, name, 0, type, (LPBYTE)value, strlen(value) * sizeof(char)); RegCloseKey(key); } int main(int argc, char** argv[]) { // Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System registry_write(TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"), TEXT("DisableTaskMgr"), REG_EXPAND_SZ, "1"); }
Danke im Voraus.
-
Nein, der Eintrag ist kein REG_EXPAND_SZ, sondern
DWORD
. Steht auch so in der Doku. WieRegSetValueEx
denlpData
Parameter interpretiert hängt vom ParameterdwType
ab.Probier´s mal mit
DWORD value = 1; RegSetValueEx( key, name, 0, REG_DWORD, (LPBYTE) &value, sizeof( value ) );
-
#include <windows.h> void registry_write(LPCTSTR subkey, LPCTSTR name, DWORD type, BYTE const *data, DWORD size) { HKEY key; RegCreateKey(HKEY_CURRENT_USER, subkey, &key); RegSetValueEx(key, name, 0, type, data, size); RegCloseKey(key); } int main() { int data = 1; registry_write(TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"), TEXT("DisableTaskMgr"), REG_DWORD, reinterpret_cast<BYTE const *>(&data), sizeof(data)); }
Rückgabewerte von Funktionen prüfen wäre auch nicht verkehrt.
-
Die Nutzung der ATL Klassen CRegKey macht so etwas einfacher.