Dowload source: Keygen4
Tranz by Benina
Bài viết này tôi trích dịch trong lọat tut Win32_Assembler_Coding_for_Crackers_by_Goppit_v11
Để keygen có hiệu ứng “fade in”(hiện dần) và “fade out” (tắt dần) khi opening và closing, chúng ta có 2 procedures được gọi là FadeIn và FadeOut. Đối với các hàm này chúng ta sẽ cần 2 prototypes, một biến DWORD ko được khởi trị đầu "Transparency" và các hằng số sau đây mà chúng ta phải định nghĩa khi mà chúng ko có trong windows.inc file: LWA_ALPHA, LWA_COLORKEY, WS_EX_LAYERED and DELAY_VALUE.
Vậy ta cần khai báo trong file inc:
FadeIn proto :DWORD
FadeOut proto :DWORD
.data?
Transparency dd ?
.const
DELAY_VALUE equ 10
Để sử dụng đặc tính trong suốt (transparency features) của win2k hay XP (có nghĩa là ko có tác dụng trong các version cũ của windows), chúng ta phải sử dụng cửa sổ được xếp lớp (layered window). Điều này có thể cải tiến đáng kể sự biểu diễn và hiệu ứng trực quan cho window mà chúng có hình dạng phức tạp, hình dạng động hay muốn sử dụng các hiệu ứng alpha blending effects. Hệ thống system sẽ tạo ra một cách tự động và vẽ lại các layered windows (cửa sổ xếp lớp) và các cửa sổ windows of các ứng dụng nằm dưới. Khi cho ra kết quả , các layered windows được lát một cách êm ả, mà ko có đặc trưng chập chờn của complex window regions. Thêm vào đó, layered windows có thể mờ một cách riêng rẽ, đó là alpha-blended (được pha trộn). Để tạo ra một layered window, window phải đựoc cài đặt hay set với lọai WS_EX_LAYERED extended windows style.
Đầu tiên chúng ta thêm các chỉ thị sau đây trong phần xử lý thông địêp WM_INITDIALOG:
.if eax==WM_INITDIALOG
;---------------------------------------
invoke GetWindowLong,hWin,GWL_EXSTYLE
or eax,WS_EX_LAYERED
invoke SetWindowLong,hWin,GWL_EXSTYLE,eax
;---------------------------------
;Set Icon
;---------------------------------
invoke LoadIcon,hInstance,500
mov hIcon,eax
invoke SendMessage,hWin,WM_SETICON,NULL,hIcon
INVOKE mfmPlay,pData
invoke FadeIn,hWin
;==========================================================
Hàm GetWindowLong API nhận thông tin về một window. Lọai thông tin cần lấy của window được chỉ định bởi tham số thứ 2 – trong case của chúng ta là GWL_EXSTYLE, yêu cầu lọai extended windows style cho cửa sổ window và hàm này trả về giá trị trong eax. Dòng kế tiếp là adds giá trị được biểu diễn bởi WS_EX_LAYERED vào eax. Dòng thứ ba set giá trị này như extended windows style cho window.
The FadeIn procedure looks like this:
FadeIn proc hWnd:HWND
invoke ShowWindow,hWnd,SW_SHOW
mov Transparency,75
@@:
invoke SetLayeredWindowAttributes,hWnd,0,Transparency,LWA_ALPHA
invoke Sleep,DELAY_VALUE
add Transparency,5
cmp Transparency,255
jne @b
ret
FadeIn endp
Hàm SetLayeredWindowAttributes API sets the opacity (mờ đục) và transparency colour key of a layered window. Trong trường hợp này tham số cuối cùng chỉ định một transparency (alpha blend) setting, và tham số thứ hai là 0 chỉ định completely transparent (trong suốt hòan tòan). Dòng đầu tiên trong thủ tục là hiển thị window trong một định dạng non-activated format và dòng kế tiếp moves một giá trị 75 vào trong biến transparency variable của chúng ta.
Trong vòng lặp kế tiếp của các chỉ thị là gia tăng transparency thêm 5 và sets window transparency với giá trị mới cho mỗi vòng lặp đến khi transparency là 255 (maximum value = opaque). Sleep cho phép một delay nhỏ giữa mỗi loop do đó fade ko thấy xuất hiện quá nhanh chóng . Khi transparency = 255 thì procedure returns.
FadeOut procedure tương tự và họat động ngược lại:
FadeOut proc hWnd:HWND
mov Transparency,255
@@:
invoke SetLayeredWindowAttributes,hWnd,0,Transparency,LWA_ALPHA
invoke Sleep,DELAY_VALUE
sub Transparency,5
cmp Transparency,0
jne @b
ret
FadeOut endp
Ta thêm hàm FadeOut vào :
.if eax==IDC_BTN2
INVOKE mfmPlay,0
invoke FadeOut,hWin
invoke EndDialog,hWin,0
Và
.elseif eax==WM_CLOSE
INVOKE mfmPlay,0
invoke FadeOut,hWin
invoke EndDialog,hWin,0
Lời bình cho thủ tục fade procedure này:
Hàm fade-in function của chúng ta được gọi tương ứng với WM_INITDIALOG message được gởi đến dialogbox bởi OS. Code đặt ở đây được thực thi trước khi dialog được hiển thị trên màn hình. Kết quả ở đây là một một blank (trống) dialog hiện dần trước khi bitmap background và controls hiện ra trong khi hàm fade-out function does not suffer this problem. Một cách giải quyết khác (rất đơn giản) có thể sử dụng AnimateWindow API để làm alpha-blending. Dòng sau đây sẽ theo thông điệp WM_INITDIALOG message:
invoke AnimateWindow,hWin,1000,AW_BLEND+AW_ACTIVATE
Và dòng sau đây theo WM_CLOSE message trước khi calling EndDialog:
invoke AnimateWindow,hWin,1000,AW_BLEND+AW_HIDE
Tuy nhiên trong trường họp của chúng ta, mặc dù nó cho ra improved fade-in effect, các transparent buttons ko được xử lý tốt và được vẽ như là visible in the foreground.
Benina (5/2009)