Профиль пользователя устанавливается в папку
%userprofile%\Application Data\Opera
Во время установки Windows 8 этот путь не существует. Можно ли изменить путь к профилю?
Вот программа для запуска браузера, которую я размещаю в system32\(Opera.exe)
Код:
; flat assembler 1.70.03 for Windows
include '%fasm%\win64ax.inc'
section '.code' executable
start:
sub rsp,8
invoke SHGetSpecialFolderPath,NULL,a,CSIDL_APPDATA,NULL
invoke lstrcat,a,'\Opera'
invoke PathFileExists,a
cmp eax,NULL
jnz @f
invoke RtlZeroMemory,a,MAX_PATH
invoke SHGetSpecialFolderPath,NULL,a,CSIDL_COMMON_APPDATA,NULL
invoke SHGetSpecialFolderPath,NULL,b,CSIDL_APPDATA,NULL
invoke lstrcat,a,'\Opera'
mov [lpFileOp.wFunc],1
mov [lpFileOp.pFrom],a
mov [lpFileOp.pTo],b
mov [lpFileOp.fFlags],20
invoke SHFileOperation,lpFileOp
invoke RtlZeroMemory,a,MAX_PATH
invoke RtlZeroMemory,b,MAX_PATH
@@:
invoke GetCommandLine
mov ebx,eax
@@:
cmp byte [ebx],NULL
je sh
cmp byte [ebx],' '
je @f
inc ebx
jmp @r
@@:
inc ebx
cmp byte [ebx],' '
je @r
sh:
invoke SHGetSpecialFolderPath,NULL,a,CSIDL_PROGRAM_FILES,NULL
invoke lstrcat,a,'\Opera\Opera.exe'
invoke GetBinaryType,a,b
cmp eax,NULL
jz exit
invoke ShellExecute,NULL,NULL,a,ebx,NULL,SW_NORMAL
mov ecx,30
invoke GetSystemMetrics,SM_CXSCREEN
mov [x],eax
invoke GetSystemMetrics,SM_CYSCREEN
sub eax,52
mov [y],eax
@@:
invoke FindWindow,'OperaWindowClass',NULL
test eax,eax
jnz @f
dec ecx
jz exit
invoke Sleep,100
jmp @r
@@:
invoke SetWindowPos,eax,NULL,NULL,24,[x],[y],SWP_NOZORDER
exit:
invoke ExitProcess,NULL
section '.data' readable writable
struct SHFILEOPSTRUCT
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 SHFILEOPSTRUCT
a rd MAX_PATH
b rd MAX_PATH
x rd MAX_PATH
y rd MAX_PATH
section '.idata' import readable
library kernel32,'KERNEL32.DLL',shell32,'SHELL32.DLL',user32,'USER32.DLL',shlwapi,'SHLWAPI.DLL'
include '%fasm%\api\kernel32.inc'
include '%fasm%\api\shell32.inc'
include '%fasm%\api\user32.inc'
import shlwapi,PathFileExists,'PathFileExistsA'
Если подготовленный профиль Opera лежит в \All Users\Application Data, то сначала проверяется
наличие папки в профиле пользователя, а затем копируется контент.
Ещё программа выравнивает размеры окна Opera.
Если интересно можете скампилировать для себя.
Если есть лучший вариант я всё же хотел бы не делать эти манипуляции с папкой?