Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


Профиль пользователя устанавливается в папку
%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.
Если интересно можете скампилировать для себя.
Если есть лучший вариант я всё же хотел бы не делать эти манипуляции с папкой?

-------
Полезное сообщение


Отправлено: 00:47, 24-02-2013 | #106