Ошибка вычисления длины строки wchar_t - C (СИ)
Формулировка задачи:
Делаю автозагрузку приложения, проблема в lstrlenW(appPath), она не вычисляет полную длину строки, отбрасывает несколько последних символов.
// Получаем путь к приложению
wchar_t appPath[32767];
GetModuleFileNameW(NULL, appPath, 32767);
// Заполняем путь в реестре
wchar_t *autorunPath = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
wchar_t *appName = L"CApplication.exe";
// Объявляем ключ
HKEY hKey = NULL;
// Записываем в реестр
RegOpenKeyExW(HKEY_CURRENT_USER, autorunPath, 0, KEY_WRITE, &hKey);
RegSetValueExW(hKey, appName, 0, REG_SZ, (BYTE *)appPath, lstrlenW(appPath));
RegCloseKey(hKey);
Посоветовали использовать wcslen, ничего не изменилось, так же теряется часть пути.
Решение задачи: «Ошибка вычисления длины строки wchar_t»
textual
Листинг программы
// Автозагрузка
void SetAutorun()
{
// Получаем путь к приложению
wchar_t appPath[32767];
GetModuleFileNameW(NULL, appPath, 32767);
// Заполняем путь в реестре
wchar_t *autorunPath = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
wchar_t *appName = L"CApplication.exe";
// Объявляем ключ
HKEY hKey = NULL;
// Записываем в реестр
RegOpenKeyExW(HKEY_CURRENT_USER, autorunPath, 0, KEY_WRITE, &hKey);
RegSetValueExW(hKey, appName, 0, REG_SZ, (BYTE *)appPath, (lstrlenW(appPath) * sizeof(wchar_t)) + 2);
RegCloseKey(hKey);
}
Объяснение кода листинга программы
- Получение пути к приложению
- Заполнение пути в реестре
- Объявление ключа
- Запись в реестр
- Закрытие ключа