Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Автоматическая установка Windows 2000/XP/2003 (http://forum.oszone.net/forumdisplay.php?f=32)
-   -   Установка темы Windows XP. (http://forum.oszone.net/showthread.php?t=194200)

semiono 16-12-2010 23:18 1567627

Установка темы Windows XP.
 
Вложений: 1
Иногда нет возможности установить тему-стиль Windows нормальным способом через INF/REG итп, когда это по какой либо причине не срабатывает.
Тогда это можно зделать через консоль desk.cpl автоматически.
Вот код написанный на ассемблере: flat assembler 1.69.29 for Windows
Размер около 85,5 KB

Код:

include '%fasm%\win32ax.inc'
section '.code' executable
start:
        invoke ExpandEnvironmentStrings,'%WinDir%\Resources\Themes',lpDir,MAX_PATH
        invoke ShellExecute,NULL,NULL,'Blackbox.theme',NULL,lpDir,SW_HIDE

        mov ecx,10
@@:
        invoke FindWindow,'#32770','Display Properties'
        mov [hWnd],eax
        test eax,eax
        jnz @f
        dec ecx
        jz exit
        invoke Sleep,100
        jmp @r
@@:
        invoke SetWindowPos,[hWnd],NULL,-404,24,404,452,SWP_NOZORDER
        invoke SendMessage,[hWnd],WM_COMMAND,(0 shl 16) or IDOK,NULL
exit:
        invoke ExitProcess,NULL

.end start

section '.data' readable writable

        lpDir dd MAX_PATH dup NULL
        hWnd dd NULL

Здесь надо изменить следущее:

%fasm% - расположение папки для распакованного дистрибутива, например: C:\Fasm\Include
Blackbox.theme - имя файла темы.
Display Properties - заголовок окна консоли desk.cpl для русской версии WinXP

--->8---

Для x64 системы, не проверял, но должно работать! Если 'Display Properties' окно по-другому называться не будет.

Код:

include '%fasm%\win64ax.inc'
section '.code' executable
start:
        sub rsp,8*5

        invoke ExpandEnvironmentStrings,'%WinDir%\Resources\Themes',lpDir,MAX_PATH
        invoke ShellExecute,NULL,NULL,'Blackbox.theme',NULL,lpDir,SW_HIDE

        mov ecx,10
@@:
        invoke FindWindow,'#32770','Display Properties'
        mov [hWnd],eax
        test eax,eax
        jnz @f
        dec ecx
        jz exit
        invoke Sleep,100
        jmp @r
@@:
        invoke SetWindowPos,[hWnd],NULL,-404,24,404,452,SWP_NOZORDER
        invoke SendMessage,[hWnd],WM_COMMAND,(0 shl 16) or IDOK,NULL
exit:
        invoke ExitProcess,NULL

section '.data' readable writable

        lpDir dd MAX_PATH dup NULL
        hWnd dd NULL

section '.idata' import readable

        library kernel32,'KERNEL32.DLL',shell32,'SHELL32.DLL',user32,'USER32.DLL'
        include '%fasm%\api\kernel32.inc'
        include '%fasm%\api\shell32.inc'
        include '%fasm%\api\user32.inc'

Как кампилить: открываем код в Fasmw редакторе и жмём F9.

:Beer:

semiono 17-12-2010 01:40 1567718

Можно перед выходом ещё добавить
Код:

...
        invoke Sleep,450
        invoke FindWindow,'#32770','rundll32.exe - Application Error'
        invoke SendMessage,eax,WM_COMMAND,(0 shl 16) or IDOK,NULL
exit:

Чтобы избавиться от окна - "память не может быть read (written)".

semiono 18-12-2010 03:19 1568581

Вложений: 1
Код:

include '%fasm%\win64ax.inc'
section '.text' executable
start:
        sub rsp,8

        invoke RegOpenKeyEx,HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows NT\CurrentVersion\Winlogon',\
              NULL,KEY_READ,phkResult
        invoke RegQueryValueEx,[phkResult],'shell',NULL,NULL,lpDir,lpcbData
        invoke RegCloseKey,[phkResult]
        invoke PathRemoveFileSpec,lpDir
       
        invoke RegOpenKeyEx,HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows NT\CurrentVersion\Winlogon',\
              NULL,KEY_READ,phkResult
        invoke RegQueryValueEx,[phkResult],'shell',NULL,NULL,lpFile,lpcbData
        invoke RegCloseKey,[phkResult]
        invoke PathStripPath,lpFile

        invoke CreateToolhelp32Snapshot,0fh,NULL
        mov [handle_snap],rax
        mov [pe32.dwSize],sizeof.PROCESSENTRY32

        invoke Process32First,[handle_snap],pe32
        test eax,eax
        jz exit
@@:
        invoke Process32Next,[handle_snap],pe32
        test eax,eax
        jz exit

        invoke lstrcmpi,pe32.szExeFile,lpFile
        test eax,eax
        jnz @r
        invoke OpenProcess,1,NULL,[pe32.th32ProcessID]
        invoke TerminateProcess,eax,NULL
sh:
        invoke ShellExecute,NULL,NULL,lpFile,NULL,lpDir,SW_SHOWNORMAL
exit:
        invoke ExitProcess,NULL

section '.data' readable writeable

        lpDir db MAX_PATH dup NULL
        lpFile db MAX_PATH dup NULL

        lpcbData dq MAX_PATH
        phkResult dq NULL

        handle_snap dq NULL
        handle_proc dd NULL
 
        struct PROCESSENTRY32
        dwSize dd MAX_PATH
        cntUsage dd NULL
        th32ProcessID dq NULL
        th32DefaultHeapID dq NULL
        th32ModuleID dd NULL
        cntThreads dd NULL
        th32ParentProcessID dd NULL
        pcPriClassBase dd NULL
        dwFlags dd NULL
        szExeFile db MAX_PATH dup NULL
        ends

        pe32 PROCESSENTRY32

section '.idata' import readable

        library advapi32,'ADVAPI32.DLL',kernel32,'KERNEL32.DLL',shlwapi,'shlwapi.dll',shell32,'SHELL32.DLL',user32,'USER32.DLL'
        import shlwapi,PathStripPath,'PathStripPathA',PathRemoveFileSpec,'PathRemoveFileSpecA'
        include '%fasm%\api\advapi32.inc'
        include '%fasm%\api\kernel32.inc'
        include '%fasm%\api\shell32.inc'
        include '%fasm%\api\user32.inc'

Код:

include '%fasm%\win32ax.inc'
section '.text' executable
start:
        invoke RegOpenKeyEx,HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows NT\CurrentVersion\Winlogon',\
              NULL,KEY_READ,phkResult
        invoke RegQueryValueEx,[phkResult],'shell',NULL,NULL,lpDir,lpcbData
        invoke RegCloseKey,[phkResult]
        invoke PathRemoveFileSpec,lpDir
       
        invoke RegOpenKeyEx,HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows NT\CurrentVersion\Winlogon',\
              NULL,KEY_READ,phkResult
        invoke RegQueryValueEx,[phkResult],'shell',NULL,NULL,lpFile,lpcbData
        invoke RegCloseKey,[phkResult]
        invoke PathStripPath,lpFile

        invoke CreateToolhelp32Snapshot,0fh,NULL
        mov [handle_snap],eax
        mov [pe32.dwSize],sizeof.PROCESSENTRY32

        invoke Process32First,[handle_snap],pe32
        test eax,eax
        jz exit
@@:
        invoke Process32Next,[handle_snap],pe32
        test eax,eax
        jz exit

        invoke lstrcmpi,pe32.szExeFile,lpFile
        test eax,eax
        jnz @r
        invoke OpenProcess,1,NULL,[pe32.th32ProcessID]
        invoke TerminateProcess,eax,NULL
sh:
        invoke ShellExecute,NULL,NULL,lpFile,NULL,lpDir,SW_SHOWNORMAL
exit:
        invoke ExitProcess,NULL

section '.data' readable writeable

        lpDir db MAX_PATH dup NULL
        lpFile db MAX_PATH dup NULL

        lpcbData dd MAX_PATH
        phkResult dd NULL

        handle_snap dd NULL
        handle_proc dd NULL
 
        struct PROCESSENTRY32
        dwSize dd MAX_PATH
        cntUsage dd NULL
        th32ProcessID dd NULL
        th32DefaultHeapID dd NULL
        th32ModuleID dd NULL
        cntThreads dd NULL
        th32ParentProcessID dd NULL
        pcPriClassBase dd NULL
        dwFlags dd NULL
        szExeFile db MAX_PATH dup NULL
        ends

        pe32 PROCESSENTRY32

section '.idata' import readable

        library advapi32,'ADVAPI32.DLL',kernel32,'KERNEL32.DLL',shlwapi,'shlwapi.dll',shell32,'SHELL32.DLL',user32,'USER32.DLL'
        import shlwapi,PathStripPath,'PathStripPathA',PathRemoveFileSpec,'PathRemoveFileSpecA'
        include '%fasm%\api\advapi32.inc'
        include '%fasm%\api\kernel32.inc'
        include '%fasm%\api\shell32.inc'
        include '%fasm%\api\user32.inc'

Программа которая выгружает explorer.exe, а потом загружает (x64) & (x86)
:)

Что будет я не знаю, я например использую не explorer.exe оболочку.
Какраз код проверяет то, что установленно чтобы не было проблем.
32битный код я плохо проверил, так как сидел в x64 системе, но через это
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Winlogon
проверил запуск калькулятора, вроде бы нормально!
:ninja2:

секцию: section '.rsrc' resource readable, в исходнике можно удалить


Время: 19:23.

Время: 19:23.
© OSzone.net 2001-