Как использовать класс AcadAppInfo для чтения и записи информации из реестра
Вопрос:
Как можно использовать класс AcadAppInfo для чтения и записи информации из (в) реестр?
Ответ:
Следующий код подразумевает, что вы загрузили пример POLYSAMP в AutoCAD. (Вы можете найти этот пример в каталоге ObjectARX SDK\Samples\entity\). Измените имя приложения в аргументе функции setAppName() чтобы получить собственную информацию вашего приложения из реестра.
Вы можете использовать утилиту RegEdit для того чтобы увидеть что производит тестовый код с ветками AutoCAD реестра.
ПРИМЕЧАНИЯ:
- Вы должны создать для загрузки по требованию вашего конкретного приложения ветки и вложенные ключи и назначить правильные значения, как показано ниже во фрагменте кода. В противном случае будет выведено сообщение об ошибке в первом блоке кода при получении информации из реестра. Это делается в фрагменте, который озаглавлен как “Создаем ключи и значения для загрузки по требованию при запуске команды”.
- Приложение не может создавать ключи в ветках. Обратитесь к документации MSDN по функции RegCreateKeyEx() для более подробной информации.
- static void testregisterinfo()
- {
- ////////////////////////////////////////////
- // Читаем информацию из реестра для примера POLYSAMP.
- ////////////////////////////////////////////
- AcadAppInfo info ;
- // Устанавливаем имя приложения
- info.setAppName (L"AsdkPolyCAD");
- // Читаем информацию из реестра
- assert( Acad::eOk == info.readFromRegistry () );
- // Выводим имя файла приложения
- acutPrintf(L"Имя модуля :%s", info.moduleName());
- ////////////////////////////////////// /
- // Создаем ключи и значения для загрузки
- // по требованию при запуске команды
- /////////////////////////////////////
- const TCHAR pAppRegPath[] =
- L"SOFTWARE\\MyComany\\MyProduct\\MyApp\\";
- HKEY rkey;
- DWORD result;
- LONG status = RegCreateKeyEx(
- HKEY_LOCAL_MACHINE,
- (LPCWSTR)pAppRegPath, 0, L"",
- REG_OPTION_NON_VOLATILE,
- KEY_WRITE,
- NULL,
- &rkey,
- &result);
- if (status != ERROR_SUCCESS)
- return;
- MessageBox(NULL,L"Тест",L"Тест",0);
- HKEY prodKey;
- status = RegCreateKeyEx(rkey,
- L"TestApp1",
- 0,
- L"",
- REG_OPTION_NON_VOLATILE,
- KEY_WRITE,
- NULL,
- &prodKey,
- &result);
- RegCloseKey(rkey);
- if (status != ERROR_SUCCESS)
- return;
- HKEY cmdKey;
- status = RegCreateKeyEx(prodKey,
- L"Commands",
- 0,
- L"",
- REG_OPTION_NON_VOLATILE,
- KEY_WRITE,
- NULL,
- &cmdKey,
- &result);
- if (status == ERROR_SUCCESS) {
- RegSetValueEx(cmdKey,
- L"MyCommand1",
- 0,
- REG_SZ,
- (const unsigned char*)"CMD1",
- 5);
- RegSetValueEx(cmdKey, L"MyCommand2",
- 0,
- REG_SZ,
- (const unsigned char*)"CMD2",
- 5);
- RegCloseKey(cmdKey);
- }
- HKEY loaderKey;
- status = RegCreateKeyEx(prodKey,
- L"Loader",
- 0,
- L"",
- REG_OPTION_NON_VOLATILE,
- KEY_WRITE,
- NULL,
- &loaderKey,
- &result);
- if (status == ERROR_SUCCESS) {
- RegSetValueEx(loaderKey,
- L"MODULE",
- 0,
- REG_SZ,
- (const unsigned char*)"C:\\TEMP\\MyApp.ARX",
- sizeof("C:\\TEMP\\MyApp.ARX")+1);
- RegCloseKey(loaderKey);
- }
- HKEY nameKey;
- status = RegCreateKeyEx(prodKey,
- L"Name",
- 0,
- L"",
- REG_OPTION_NON_VOLATILE,
- KEY_WRITE,
- NULL,
- &nameKey,
- &result);
- RegCloseKey(prodKey);
- if (status != ERROR_SUCCESS)
- return;
- RegSetValueEx(nameKey,
- L"MyApp Name",
- 0,
- REG_SZ,
- (const unsigned char*)"MyCAD", 6);
- RegCloseKey(nameKey);
- /////////////////////////////////////////////////
- // Запишем нашу собственную информацию в реестр.
- /////////////////////////////////////////////////
- AcadAppInfo info2 ;
- // AppName находится под ключом AutoCAD\Applications.
- // Устанавливаем имя приложения
- info2.setAppName (L"TestApp1");
- // Это просто строка, содержимое которой не имеет значения.
- info2.setAppDesc(L"Описание моего приложения.");
- // Устанавливаем путь загрузки.
- info2.setModuleName(L"C:\\TEMP\\MyApp.ARX");
- // Определим в каких случаях приложение должно автоматически загружаться.
- info2.setLoadReason( AcadApp::LoadReasons(
- AcadApp::kOnProxyDetection |
- AcadApp::kOnCommandInvocation |
- AcadApp::kOnLoadRequest) );
- assert( Acad::eOk == info2.writeToRegistry() );
- }
Обсуждение: http://adn-cis.org/forum/index.php?topic=129.0
Отредактировано 04.08.2013 в 16:34:17