Доступ к реестру Windows под GCC / C ++ - PullRequest
1 голос
/ 26 марта 2011

Я пытаюсь получить доступ к реестру Windows, используя стандартные API Windows. Я использую компилятор Mingw C ++.

Пожалуйста, скажите, почему этот код сходит с ума в строке (X)

HKEY hKey;
DWORD dwDisp = 0;
LPDWORD lpdwDisp = &dwDisp;

QString value = "String Value";

LONG iSuccess = RegCreateKeyEx(
      HKEY_CURRENT_USER,
      TEXT("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"),
      0L,
      NULL,
      REG_OPTION_NON_VOLATILE,
      KEY_ALL_ACCESS,
      NULL,
      &hKey,
      lpdwDisp);

if(iSuccess == ERROR_SUCCESS)
{
(X)    RegSetValueEx(hKey, TEXT("1234"), 0, REG_SZ, (LPBYTE)4, 4+1);
}

Отладчик показывает ошибку сегментации в этой строке.

Большое спасибо за помощь. Я новичок в Windows API.

Ответы [ 3 ]

3 голосов
/ 26 марта 2011

Посмотрите снова на описание функции .

Если вы хотите установить значение по умолчанию для клавиши, вам нужно сделать что-то вроде этого:1007 * Если вы действительно хотите указать имя значения:

TCHAR szData[] = TEXT("1234")
RegSetValueEx(hKey, TEXT("valuename"), 0, REG_SZ, (LPBYTE)szData, sizeof(szData));

Реестр имеет несколько запутанную терминологию.Ключ в этом контексте в основном означает «папка».Каждая папка имеет значение по умолчанию и может содержать другие значения с указанными именами.Вы передаете null, если хотите установить значение по умолчанию, и строку, если хотите назвать это значение.Эти значения отображаются как «файлы» в ключе «папка» при просмотре в редакторе регистров.

2 голосов
/ 26 марта 2011

Броски плохие.

Что вы ожидаете от (LPBYTE)3? Как вы думаете, зачем вам это нужно?

Разве не здесь value следует использовать? Возможно, как value.ascii() или value.constData() (в зависимости от того, определено ли UNICODE)? (ПРИМЕЧАНИЕ: QString value таинственно исчез из вопроса)

0 голосов
/ 26 марта 2011

Удалите HKEY_LOCAL_MACHINE \ из второго параметра, и он должен работать нормально.HKEY_LOCAL_MACHINE должен быть установлен в первом параметре.

...