Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/16: Рейтинг темы: голосов - 16, средняя оценка - 4.75
159 / 16 / 0
Регистрация: 14.09.2010
Сообщений: 421
Записей в блоге: 6
1
FASM

Известные папки Windows - получить путь к "%USERPROFILE%\AppData\LocalLow"

13.05.2021, 22:46. Показов 3031. Ответов 5

Author24 — интернет-сервис помощи студентам
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
include '%fasm%/win64ax.inc'
section '.code' executable
start:
        sub rsp,8
 
        invoke SHGetKnownFolderPath,'FOLDERID_LocalAppDataLow',NULL,NULL,a
        invoke PathAddBackslash,a
        invoke lstrcat,a,'Mozilla'
 
        mov [lpFileOp.wFunc],FO_DELETE
        mov [lpFileOp.fFlags],FOF_SILENT + FOF_NOCONFIRMATION
 
        mov [lpFileOp.pFrom],a
        invoke SHFileOperation,lpFileOp
 
        invoke RtlZeroMemory,a,MAX_PATH
 
        invoke SHGetSpecialFolderPath,NULL,a,CSIDL_LOCAL_APPDATA,NULL
        invoke PathAddBackslash,a
        invoke lstrcat,a,'Mozilla'
 
        mov [lpFileOp.wFunc],FO_DELETE
        mov [lpFileOp.fFlags],FOF_SILENT + FOF_NOCONFIRMATION
 
        mov [lpFileOp.pFrom],a
        invoke SHFileOperation,lpFileOp
exit:
        invoke ExitProcess,NULL
 
        FO_DELETE = 0x0003
        FOF_SILENT = 0x0004
        FOF_NOCONFIRMATION = 0x0010
 
section '.data' readable writeable
 
        a rb MAX_PATH
 
struct LPSHFILEOPSTRUCT
 
        hwnd dq NULL
        wFunc dq NULL
        pFrom dq NULL
        pTo dq NULL
        fFlags dq NULL
        fAnyOperationsAborted dq NULL
        hNameMappings dq NULL
        lpszProgressTitle dq NULL
ends
        lpFileOp LPSHFILEOPSTRUCT
 
section '.idata' import readable
 
        library kernel32,'KERNEL32.DLL',shell32,'SHELL32.DLL',shlwapi,'SHLWAPI.DLL'
        include '%fasm%/api/kernel32.inc'
        include '%fasm%/api/shell32.inc'
        include '%fasm%/api/shlwapi.inc'
Два часа бился, так и не смог найти папку %USERPROFILE%\AppData\LocalLow
Сдаюсь! Может кто ещё попробует?

У меня в shell32.inc добавлено:
import shell32,\
...
SHGetKnownFolderPath,'SHGetKnownFolderPath'
...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.05.2021, 22:46
Ответы с готовыми решениями:

Получить путь до папки appdata
использую uses SHFolder; function GetSpecialFolderPath(folder : integer) : string; const...

Путь до папки local (appdata)
Проблема, работаю на Windows 10, использую Environment.GetEnvironmentVariable("LocalAppData") +...

Как узнать путь до папки temp, которая в appdata
Как узнать путь к этой папке, чтобы туда все временные файлы кидать(вариант "найти путь самому" не...

Как получить путь к AppData C++/CLI
Клакаю на VC2010, в среде C++/CLI. Мне нужна функция, возвращающая путь к раб. столу, аппдата и...

Не удается найти файл %USERPROFILE%\AppData\Local\Discord\app.ico
Уже долгое время не могу решить проблему отсутствия значка дискорд (вместо него белый квадратный...

5
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
15.05.2021, 22:50 2
Судя по https://stackoverflow.com/ques... on-working и https://docs.microsoft.com/en-... folderpath
первый параметр - указатель (адрес) на переменную в памяти, содержащую GUID искомой папки.

А здесь приведены GUID
https://docs.microsoft.com/ru-... dfrom=MSDN
Для FOLDERID_LocalAppDataLow
{A520A1A4-1780-4FF6-BD18-167343C5AF16}
1
159 / 16 / 0
Регистрация: 14.09.2010
Сообщений: 421
Записей в блоге: 6
16.05.2021, 19:00  [ТС] 3
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
include '%fasm%/win64ax.inc'
section '.code' executable
start:
        sub rsp,8
 
        invoke IEGetWriteableFolderPath,'{A520A1A4-1780-4FF6-BD18-167343C5AF16}',a
        ;invoke SHGetFolderPath,0,'{A520A1A4-1780-4FF6-BD18-167343C5AF16}',0,0,a
        ;invoke SHGetKnownFolderPath,'{A520A1A4-1780-4FF6-BD18-167343C5AF16}',NULL,NULL,a
 
        ;SHGFP_TYPE_CURRENT = 0
        ;SHGFP_TYPE_DEFAULT = 1
 
        invoke PathAddBackslash,a
        invoke lstrcat,a,'Mozilla'
 
        mov [lpFileOp.wFunc],FO_DELETE
        mov [lpFileOp.fFlags],FOF_SILENT + FOF_NOCONFIRMATION
 
        mov [lpFileOp.pFrom],a
        invoke SHFileOperation,lpFileOp
 
        invoke RtlZeroMemory,a,MAX_PATH
 
        invoke SHGetSpecialFolderPath,NULL,a,CSIDL_LOCAL_APPDATA,NULL
        invoke PathAddBackslash,a
        invoke lstrcat,a,'Mozilla'
 
        mov [lpFileOp.wFunc],FO_DELETE
        mov [lpFileOp.fFlags],FOF_SILENT + FOF_NOCONFIRMATION
 
        mov [lpFileOp.pFrom],a
        invoke SHFileOperation,lpFileOp
exit:
        invoke ExitProcess,NULL
 
        FO_DELETE = 0x0003
        FOF_SILENT = 0x0004
        FOF_NOCONFIRMATION = 0x0010
 
section '.data' readable writeable
 
        a rb MAX_PATH
 
struct LPSHFILEOPSTRUCT
 
        hwnd dq NULL
        wFunc dq NULL
        pFrom dq NULL
        pTo dq NULL
        fFlags dq NULL
        fAnyOperationsAborted dq NULL
        hNameMappings dq NULL
        lpszProgressTitle dq NULL
ends
        lpFileOp LPSHFILEOPSTRUCT
 
section '.idata' import readable
 
        library kernel32,'KERNEL32.DLL',shell32,'SHELL32.DLL',shlwapi,'SHLWAPI.DLL',ieframe,'IEFRAME.DLL'
        include '%fasm%/api/kernel32.inc'
        include '%fasm%/api/shell32.inc'
        include '%fasm%/api/shlwapi.inc'
        import ieframe,IEGetWriteableFolderPath,'IEGetWriteableFolderPath'
Забавно, когда я хочу найти CSIDL мне предлагают указать нечто такое же, дык если бы я знал!
То ли я некорректно вбиваю GUID, то ли не работает неведомо почему.
Там у одной функи слеш в конце строки, но я пробовал по разному.

0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
16.05.2021, 19:15 4
Как понимаю, GUID это структура с числами, а не строка.
1
Эксперт Hardware
Эксперт Hardware
6103 / 2347 / 390
Регистрация: 29.07.2014
Сообщений: 3,108
Записей в блоге: 4
16.05.2021, 22:10 5
Лучший ответ Сообщение было отмечено semiono как решение

Решение

Цитата Сообщение от semiono Посмотреть сообщение
То ли я некорректно вбиваю GUID, то ли не работает неведомо почему.
Используй устаревшую SHGetFolderPathA() - она не гуид требует, а константу (в фасме уже прописаны). Прямого линка вроде нет на %USERPROFILE%\AppData\LocalLow, но есть на профиль юзера. Добавляй к нему конкретный путь и получишь \..LocalLow:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
format   pe console
include 'win32ax.inc'
entry    start
;//----------
.data
szPath    rb   128
szLow     db   '\AppData\LocalLow',0
 
;//----------
.code
start:  invoke  SHGetFolderPathA,0,CSIDL_PROFILE,0,0,szPath
        invoke  lstrcat,szPath,szLow
       cinvoke  printf,<10,' Path: %s',0>,szPath
 
@exit: cinvoke  getch
       cinvoke  exit,0
;//---------------
section '.idata' import data readable
library  msvcrt,'msvcrt.dll',kernel32,'kernel32.dll',shell32,'shell32.dll'
import   msvcrt, printf,'printf',scanf,'scanf',getch,'_getch',exit,'exit'
include 'api\kernel32.inc'
include 'api\shell32.inc'
2
Asm/C++/Delphi/Py/PHP/VBA
6528 / 1973 / 228
Регистрация: 14.12.2014
Сообщений: 4,125
Записей в блоге: 12
19.05.2021, 19:20 6
Лучший ответ Сообщение было отмечено semiono как решение

Решение

Можно использовать ExpandEnvironmentString и скормить ей "%USERPROFILE%\AppData\LocalLow".
3
19.05.2021, 19:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.05.2021, 19:20
Помогаю со студенческими работами здесь

Bat-ник для удаления %userprofile%\AppData\Roaming\1C\ кроме файлов с расширением .pfl
Коллеги, доброго времени суток. Имеется bat-ник rd /q /s...

Записать в массив относительный путь с именем файла из папки(не зная полный путь папки)
Наверняка вопрос заезженный, но я не нашел(плохо искал) Нужно из вложенной папки, из директории,...

Как получить путь до папки с приложением?
Я нашел 1 метод получения пути до папки с приложением, оно отлично работает, за исключением того,...

Получить путь папки и записать в textbox
Нужно выбрать ПАПКУ и записать его путь в textbox1.

Получить путь до папки в качестве аргумента
Всем доброго, с помощью нижеследующего кода на vbs я получаю путь до папки, как реализовать это на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru