|
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
С нами:
9023100
Репутация:
395
|
|
вот набросал на FASM 
нужно из объявлений удалить не используемые функции + удалить
cmp [uMsg],WM_LBUTTONDBLCLK
je .destroy
что бы она не закрывалась по двойному нажатию
и изменить mov [wc.hbrBackground],25d // 25d это цвет подсказки на COLOR_WINDOW+1
и по хорошему сделать командную строку для запуска типа
x y width height text
Код:
format PE GUI 4.0
entry start
include 'C:\FASM\INCLUDE\win32a.inc'
section '.text' code import writeable readable executable
;---------импорт функций
library kernel32, 'kernel32.dll',\
user32,'user32.dll',\
gdi32,'Gdi32.dll'
import gdi32,\
TextOut,'TextOutA',\
SetBkMode,'SetBkMode',\
GetStockObject,'GetStockObject',\
SelectObject,'SelectObject',\
MoveTo,'MoveToEx',\
LineTo,'LineTo'
import kernel32,\
ExitProcess, 'ExitProcess',\
GetModuleHandle,'GetModuleHandleA',\
GetLocalTime,'GetLocalTime',\
CreateFile,'CreateFileA',\
ReadFile,'ReadFile',\
CloseHandle,'CloseHandle',\
CreateEvent,'CreateEventA',\
WaitForSingleObject,'WaitForSingleObject',\
CreateThread,'CreateThread'
import user32,\
RegisterClass,'RegisterClassExA',\
LoadCursor,'LoadCursorA',\
CreateWindow,'CreateWindowExA',\
ShowWindow,'ShowWindow',\
UpdateWindow,'UpdateWindow',\
GetMessage,'GetMessageA',\
TranslateMessage,'TranslateMessage',\
DispatchMessage,'DispatchMessageA',\
DefWindowProc,'DefWindowProcA',\
PostQuitMessage,'PostQuitMessage',\
BeginPaint,'BeginPaint',\
EndPaint,'EndPaint',\
SendMessage,'SendMessageA',\
wsprintf,'wsprintfA'
proc WndProc,hWnd,uMsg,wParam,lParam
push ebx esi edi
cmp [uMsg],WM_CREATE
je .create
cmp [uMsg],WM_LBUTTONDBLCLK
je .destroy
cmp [uMsg],WM_DESTROY
je .destroy
cmp [uMsg],WM_PAINT
je .paint
jmp .def
.create:
invoke GetStockObject,ANSI_VAR_FONT
mov [hFont],eax
jmp .retrun_null
.paint:
invoke BeginPaint,[hWnd],PaintStruct
mov [hDC],eax
invoke SetBkMode,[hDC],TRANSPARENT
invoke SelectObject,[hDC],[hFont]
invoke TextOut,[hDC],3,3,string,13
invoke EndPaint,[hWnd],PaintStruct
jmp .retrun_null
.destroy:
invoke PostQuitMessage,0
jmp .retrun_null
.def:
invoke DefWindowProc,[hWnd],[uMsg],[wParam],[lParam]
jmp .exit
.retrun_null:
xor eax,eax
.exit:
pop edi esi ebx
ret
endp
proc WinMain,hInst
mov [wc.cbSize],48d
mov [wc.style], CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS
mov [wc.lpfnWndProc], WndProc
mov [wc.cbClsExtra],NULL
mov [wc.cbWndExtra],NULL
push [hInstance]
pop [wc.hInstance]
mov [wc.hbrBackground],25d
mov [wc.lpszMenuName],NULL
mov [wc.lpszClassName],ClassName
mov [wc.hIcon],NULL
invoke LoadCursor,NULL,IDC_ARROW
mov [wc.hCursor],eax
invoke RegisterClass,wc
invoke CreateWindow,WS_EX_TOOLWINDOW or WS_EX_TOPMOST,\
ClassName,\
NULL,\
WS_POPUP,\
150,\
150,\
[sizeW],\
[sizeH],\
NULL,\
NULL,\
[hInst],\
NULL
mov [hwnd],eax
invoke ShowWindow, [hwnd],SW_SHOWDEFAULT
invoke UpdateWindow, [hwnd]
.while:
invoke GetMessage,msg,NULL,0,0
test eax,eax
jz .exit
invoke TranslateMessage, msg
invoke DispatchMessage, msg
jmp .while
.exit:
mov eax,[msg.wParam]
ret
endp
start:
invoke GetModuleHandle,0
mov [hInstance],eax
push eax
call WinMain
invoke ExitProcess, 0
;----------данные
ClassName db 'x',0
sizeW dd 117
sizeH dd 18
string db 'http://ya.ru/'
hInstance dd ?
wc WNDCLASSEX ?
hwnd dd ?
msg MSG ?
hDC dd ?
PaintStruct PAINTSTRUCT ?
hFont dd ?
все просто компилируется > fasm code.asm
у меня получилась 2048 байт прога ) но думаю можно и поменьше сделать
Последний раз редактировалось Gar|k; 05.01.2010 в 22:45..
|