#c #winapi
#c #winapi
Вопрос:
Как я могу определить путь, подобный «C:/Users /<USER>/AppData/Local/<APPNAME>» для другого имени пользователя и приложения? Как мне настроить это, чтобы автоматически получать пользователя и appname? Спасибо.
Ответ №1:
Вы можете использовать SHGetKnownFolderPath
, чтобы получить полный путь к локальному приложению:
...
#include <KnownFolders.h>
#include <ShlObj.h>
...
SHGetKnownFolderPath(FOLDERID_LocalAppData, KF_FLAG_SIMPLE_IDLIST, NULL, amp;path); // NULL for current user
...
Ответ №2:
Чтобы получить локальный путь AppData для данного пользователя, используйте SHGetFolderPath()
указание CSIDL_LOCAL_APPDATA
или SHGetKnownFolderPath()
specifying FOLDERID_LocalAppData
. Оба используют необязательный пользовательский токен для запроса желаемой учетной записи пользователя. Если вы не предоставляете токен, используется пользователь, связанный с вызывающим потоком.
Ответ №3:
Чтобы получить имя пользователя:
char username[MAX_PATH];
DWORD size = MAX_PATH;
GetUserName(username,amp;size);
Чтобы получить appname (имя исполняемого файла без «.exe»):
char appname[MAX_PATH];
char buffer[MAX_PATH];
GetModuleFileName(NULL, appname,MAX_PATH); //get the string: "PATH\appname.exe"
char *szExe = NULL;
//Remove prefix
GetFullPathName(appname, MAX_PATH, buffer, amp;szExe);
//Remove suffix
strncpy_s(appname, szExe, strlen(szExe) - strlen(".exe"));