Войти

Показать полную графическую версию : Установка темы Windows XP.


semiono
16-12-2010, 23:18
Иногда нет возможности установить тему-стиль Windows нормальным способом через INF/REG итп, когда это по какой либо причине не срабатывает.
Тогда это можно зделать через консоль desk.cpl автоматически.
Вот код написанный на ассемблере: flat assembler 1.69.29 for Windows (http://flatassembler.net/download.php)
Размер около 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
Можно перед выходом ещё добавить
...
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
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, в исходнике можно удалить




© OSzone.net 2001-2012