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:
Тогда это можно зделать через консоль 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: