win32 читает предпочтения Java из кода C ++ - PullRequest
2 голосов
/ 16 апреля 2010

Одна из наших программ записывает информацию о программе (заголовок окна, память и т. Д.) В настройках Java. На окнах это доступно в реестре. Как я могу прочитать значения, написанные программой Java, используя c (или c ++).

Похоже, API, который я должен использовать, это RegGetValue. Гарантируется ли это на 32-битной Windows XP?

Строка, написанная Java, имеет кодировку UTF-8. Как мне прочитать такие строки в Windows (win32 или vc ++)

Ура, Джаян

Ответы [ 3 ]

2 голосов
/ 17 апреля 2010

Я немного углубился в это. RegGetValue () - это новый вызов реестра, который заботится о некоторой скрытности традиционного способа запроса реестра (RegQueryValueEx). Здесь есть хорошая информация о разнице: http://blogs.msdn.com/larryosterman/archive/2006/01/12/512115.aspx

Если вам нужна обратная совместимость, RegGetValue () не будет работать, поэтому вы должны использовать RegQueryValueEx для чтения данных из реестра.

А теперь вернемся к тому, что я думаю:

  1. Что вы получаете, когда используете RegQueryValueEx ()?
  2. Откуда вы знаете, что значения, хранящиеся в реестре, находятся в кодировке utf-8? Хранится ли он в виде байтового массива в реестре или как REG_SZ?
  3. Вы смотрели на значение с помощью regedit? Что ты видишь?

Так что если вопрос заключается в том, как преобразовать строку в кодировке UTF-8 в строку с нулем в конце ascii, то вам, вероятно, следует изменить заголовок вашего вопроса. Для справки я нашел эту библиотеку, которая может быть полезна:

http://utfcpp.sourceforge.net

Когда я попробовал ссылку несколько минут назад, время ожидания сервера истекло - возможно, продолжается обслуживание SF.

Но я бы посоветовал вам убедиться, что значения в реестре уже не сохраняются как записи REG_SZ.

1 голос
/ 17 апреля 2010

RegGetValue - более новый API. Если вы хотите, чтобы ваша программа работала на 32-битной XP (фактически до Windows 2000), используйте RegQueryValueEx

Строка UTF-8 заканчивается NUL, как любая однобайтовая строка ASCII. Однако вам может быть интересно конвертировать его в UTF-16. Для этого вы хотите использовать MultiByteToWideChar , установив CodePage на CP_UTF8. Из UTF-16 вы можете конвертировать в любую другую кодовую страницу, используя WideCharToMultiByte .

0 голосов
/ 16 апреля 2010

Для доступа к реестру в C ++ вас может заинтересовать класс CRegKey ATL .

...