Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: WinAPI и системное программирование > узнать Application Data текущего пользователя |
Автор: cyberovskij 5.2.2011, 21:04 | ||
Есть код:
который выполняется в системной службе в WINXP. При вызове GetUserAppPath какого то дьяволя возвращает "C:\Documents and Settings\LocalService\Application Data" а не того пользователя, под которым сеанс? ![]() Еще меня смущает , то что в Дельфийской реализации WTSQueryUserToken второй параметр имеет тип не указатель на Thandle (msdn PHANDLE) а THandle? Причем всюду по форумах в образцах кодов все получив от функции WTSQueryUserToken указатель на токен как это описано в мсдн(PHANDLE) сразу используют его там где нужно подставлять токен(HANDLE)? |
Автор: cyberovskij 6.2.2011, 00:11 | ||||
Вот переделал. Результат тот же
|
Автор: cyberovskij 6.2.2011, 00:31 |
И еще я заметил что функции SHGetFolderPath вообще все равно что я пишу в третий параметр. Она всегда выдает один результат - проклатый "C:\Documents and Settings\LocalService\Application Data" Может как то влияет то, что я использую в uses SHFolder;? |
Автор: cyberovskij 6.2.2011, 01:17 | ||
Точно!!! вот на странице с описанием функции в коментах написано: "If you are using the function from SHFolder.dll:Parameter hToken and dwFlags are ignored in the ANSI version of the function. They always become zero (0)." Вопрос теперь: Откуда ее взять и как правильно импортировать? |
Автор: kami 6.2.2011, 15:24 | ||
Используйте Unicodу версию ![]() Изменить-то нужно всего ничего
Кстати, а какая версия Delphi? |
Автор: cyberovskij 7.2.2011, 15:59 | ||||
У меня Delphi 7. Попробовал я SHGetFolderPathW вот такой код:
Выдает 'E_FAIL' - такой папки не существует ![]() |
Автор: kami 7.2.2011, 18:26 | ||
Аналогично. Мой код(а вернее, Ваш ![]()
|
Автор: cyberovskij 7.2.2011, 21:49 | ||
И у меня кстати мой (вернее Ваш) код выдает: C:\Documents and Settings\user2\Application Data ![]() в чем разница?
А мой, ну тот что совсем мой - нет? |
Автор: CodeMonkey 7.2.2011, 22:23 | ||
Эээ, батенька.
Это что ещё такое? Ну и куда hh указывает? Правильно, в космос. |
Автор: cyberovskij 7.2.2011, 23:14 | ||||
А как правильно с Phandle работать? |
Автор: CodeMonkey 8.2.2011, 10:34 | ||
В данном случае - никак. Он не нужен. Что такое PHandle? Указатель на THandle. По определению. На какой THandle? В вашем коде - ни на какой. Вы ж его не присвоили. А на какой должен указывать? Ну, на тот, куда результат записывать. Так и напишем:
Читать http://www.transl-gunsmoker.ru/2009/09/blog-post.html. |
Автор: cyberovskij 8.2.2011, 17:32 |
P.S. кстати с PHandle это была не единственная проблема. Кроме того кривым было еще и объявление path: array [0..MAX_PATH] of char; а нужно было path: array[0..MAX_PATH] of WideChar; Поскольку в первом случае возвращался результат: "С" вместо нужного. |
Автор: kami 8.2.2011, 19:16 | ||||
гхм...
|
Автор: CodeMonkey 8.2.2011, 19:41 |
Ну всё, застремали человека ![]() |
Автор: cyberovskij 8.2.2011, 20:45 | ||||
ага . А это я оказывается "открыл Америку" ![]() |