|
|
|
|
Win32·J½s±Ðµ{¤C
±z¬O²Ä
265ÓÂsÄýªÌ
¦³Ãö±±¨î¶µ¤lÃþ¤Æ
»¡¨ìÃþ¡A¤j®a¥i¯à°¨¤W´N·Q¨ìC++¡Aªº½T¡AÃþº¥ý¬O¦bC¤¤´£¥Xªº¡A¦ý¬O¡A³oÓ·§©À¦b Win32Asm ¤¤¤´µM¾A¥Î¡A¦]¬°¦bÃþªº«ä¸ô¬O³o¼Ëªº¡G¥ý°²³]¬YÓª«¥ó¦³¤£¦PªºÄݩʡA·í¤@Ó·sªºª«¥óªº¬YÓÄݩʩM¤W±©Ò»¡ªºª«¥ó¦³¨Ç¤£¦P¡A¦Ó§OªºÄݩʤ@¼Ò¤@¼Ë¡A¨º»ò¹ê»Ú¤W°£¤F³B²z³oÓÄݩʪº¥N½X¦³¨Ç¤£¦P¥~¡A§Oªº¥N½X§¹¥þ¥i¥H¨Ï¥Î«e±ªºª«¥óªº¥N½X¡C¦b¨ãÅ骺À³¥Î¤¤¡A§ÚÁ|Ó¨Ò¤l¡A¤ñ¦p»¡§ÚÌ©w¸q¤@Ó "edit" ±±¨î¶µ¡A¨º»ò³oÓ±±¨î¶µªº¦æ¬°¬O¥Ñ Windows ¤º©wªº¡A¦]¬°¥¦ªºµøµ¡¹Lµ{¬O¦b Windows ¨t²Î¤º³¡ªº¡A¦ý°²¦p§ÚÌ·Q½s¤@Ó¦³»yªkÀˬdªº "edit" ±±¨î¶µ¡A¬O§_§Ṵ́£¤F»yªkÀˬdªº¥N½X¥H¥~¡AÁÙn½s¼g«Ü¦h¥N½X¨Ó¹ê²{¦Ñªº "edit" ±±¨î¶µ¤@¼Ò¤@¼Ëªº¥\¯à©O¡Hµª®×·íµM¬O§_©wªº¡A¹ê»Ú¤W¡A§ÚÌ¥i¥HºIÀò¤@Ó¼Ð·Ç "edit"±±¨î¶µªº WM_CHAR ®ø®§¡AÀˬdÁä¤JªºÁä¨Ã°µ³B²z¡A§Oªº®ø®§¥i¥H¶Çµ¹ì¨Óªºµøµ¡¹Lµ{¡C¥Ü·N¦p¤U¡G ¦b¤lÃþ¤Æ¤§«e¡G Windows => edit ±±¨î¶µªºµøµ¡¹Lµ{
¦b¤lÃþ¤Æ¤§«á¡G Windows => §Ú̪º¹Lµ{¥N½X => edit ±±¨î¶µªºµøµ¡¹Lµ{
¦bWindows ªº API ¤¤¦³Ó¨ç¼Æ¥i¥H¥Î¨Ó¹ê²{³oÓ¥\¯à¡A¨º´N¬O SetWindowLong PROTO hWnd,nIndex,dwNewLong ¡A°Ñ¼Æªº·N«ä¬O hWnd ¬O§An§ïÅܪºµøµ¡±±¨î½X¡AnIndex ¬O§ÚÌn§ïÅܵøµ¡ªº¤°»òÄݩʡA¥¦ªºÈ¥i¥H¬O GWL_EXSTYLE¡G§ïÅܵøµ¡·®æ¡AGWL_WNDPROC¡G³]¸mµøµ¡ªº·sªº¹Lµ{¡A³o¥¿¬O§ÚÌ·P¿³½ìªº¡AÁÙ¦³¬O GWL_USERDATA ³o¬Oµøµ¡¦Û©w¸qªº¤@Ó32¦ì¤¸ªº¸ê®Æ¡CdwNewLong ¬O·sªºÈ¡AÁÙ¦³¤@Ó API ¬O¥Î¨Ó½Õ¥Îì¨Óªºµøµ¡¹Lµ{ªº¡A¥s CallWindwoProc PROTO lpPrevWndFunc,hWnd,Msg,wParam,lParam¡C
§Ú̦b¨Ï¥Î®É¦³¤U±ªº¹Lµ{¡G
¥Î SetWindowLong,hWnd,GWL_WNDPROC,addr _NewProcAddress ³]¸m§Ú̦ۤvªº¥N½Xªº¦a§}¡AAPI ªð¦^ì¨Óªº¹Lµ{¦a§}
¥Î SetWindowLong,hWnd,GWL_USERDATA,eax §âì¨Óªº¹Lµ{¦ì§}«O¦s¦b¦Û©w¸q¸ê®Æ¤¤¡C
³o¼Ë¡A©Ò¦³®ø®§·|¥ý°e¨ì§Ú̪º¹Lµ{¤¤¡AµM«á¦b§Ú̦ۤvªº¹Lµ{¤¤¡G
¹ïn³B²zªº®ø®§¶i¦æ³B²z¡A¦pªG¤£§Æ±æì¨Óªº¹Lµ{¦A³B²z¡A¨º»òªð¦^¡C
¹ï¦Û¤v¤£³B²zªº®ø®§¡A½Õ¥Îì¨Óªºµøµ¡¹Lµ{³B²z¡A¨Ã§âªð¦^Ȫð¦^¡C¤èªk¬O¡G
¥Î invoke GetWindowLong,hWnd,GWL_USERDATA ¨ú¥X¦Û©w¸q¸ê®Æ¤¤«O¦sªºì¹Lµ{¦ì§}
¥Î invoke CallWindowProc,eax,hWnd,uMsg,wParam,lParam ½Õ¥Îì¹Lµ{ UINT uStructSize}
¥»¸`±Ðµ{´£¨Ñ¤F¤@Ó®Ú·½µ{¦¡¡A¥¦¬O¹ê²{¹ï¸Ü¤è¶ô¤¤ªº¤å¥»ªº URL ³s±µ¹Lµ{¡A§Ú̬ݨ즳ªºµ{¦¡¤¤ªº¤å¥»¬OÂŦ⪺¡A¦³¤U¹º½u¡AµM«á·Æ¹«²¾°Ê¨ì¤W±·|Åܤ⫬¡A´N¶H¬yÄý¾¹¤¤ªº¶WÁpµ²¤@¼Ë¡A¦Ó¥B«ö¤U·|¦Û°Ê³s±µ¨ìºô¯¸¤W¡A¥J²Ó·Q·Q¡A§Ų́èS¦³¤@ӼзǪº±±¨î¶µ©Î API ¨Ó¹ê²{³o¼Ë¤@Ó¥\¯à¡A¦]¬°³oº¥ý¬O¤@Ӥ奻¡A©Ò¥H§ÚÌ¥i¥H¹ï³oӤ奻¶i¦æ¤lÃþ¤Æ¡A³B²z¥¦ªºWM_LBUTTONUP ®ø®§¨Ó¹ê²{«ö¤U¦Û°Ê³s¤Wºô¯¸ªº¥\¯à¡F³B²z WM_SETCURSOR ®ø®§¨ÓÅý·Æ¹«²¾¨ì¤W±§ïÅÜ´å¼Ð¡A¨ãÅé®Ú·½µ{¦¡¦p¤U¡G
®Ú·½µ{¦¡ - ¸ê·½ÀÉ®×
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;************************************************
#include
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Icon 1000 ¶}©l
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define IDI_MAIN 1000
#define IDC_HANDLE 2000
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ¹ï¸Ü¤è¶ô 3000 ¶}©l
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define DLG_ABOUT 3000
#define ID_EMAIL 3001
#define ID_HOMEPAGE 3002
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ¸ê·½©w¸q¶}©l
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IDI_MAIN ICON "Main.ico"
IDC_HANDLE CURSOR "Handle.cur"
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_ABOUT DIALOG DISCARDABLE 50, 50, 160, 30
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "URL Ápµ²¤å¥»ºt¥Ü - by ù¶³±l"
FONT 9, "§ºÅé"
BEGIN
LTEXT "§Úªº¥D¶: ",-1, 5,5,54,9
LTEXT "http://asm.yeah.net", ID_HOMEPAGE, 55,5,80,9
LTEXT "§ÚªºE-mail: ", -1, 5,17,54,9
LTEXT "[email=bigluo@telekbird.com.cn%22,ID_EMAIL]bigluo@telekbird.com.cn",ID_EMAIL[/email], 55,17,95,9
END
®Ú·½µ{¦¡ - ·J½sì©lÀÉ®×
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ¬O§_¥]¬A½Õ¸Õ¥N½X
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DEBUG = 0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Programmed by ù¶³±l, bigluo@telekbird.com.cn
; Website: http://asm.yeah.net
; LuoYunBin's Win32 ASM page (ù¶³±lªº½sµ{¼Ö¶é)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ª©¥»¸ê°T
; µøµ¡¤lÃþ¤Æºt¥Üµ{¦¡ Ver 1.0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat, stdcall
option casemap :none ; case sensitive
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include ¼Æ¾Ú
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
include kernel32.inc
include comctl32.inc
include comdlg32.inc
include shell32.inc
include gdi32.inc
includelib user32.lib
includelib kernel32.lib
includelib comctl32.lib
includelib comdlg32.lib
includelib shell32.lib
includelib gdi32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ ¼Æ¾Ú
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IDI_MAIN equ 1000 ;icon
IDC_HANDLE equ 2000 ;handle cursor
DLG_ABOUT equ 3000 ;dialog - about
ID_EMAIL equ 3001
ID_HOMEPAGE equ 3002
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ¸ê®Æ¬q
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance dd ?
hIcon dd ?
szBuffer db 256 dup (?)
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_HyperLinkProc proto WORD, WORD, WORD,:DWORD
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
hCursorHandle dd ?
szHomePage db "http://asm.yeah.net",0
szEmail db "mailto:bigluo@telekbird.com.cn"
db "?subject=¶Ù¡I§Ú³ßÅw§Aªºµ{¦¡¡I",0
.code
if DEBUG
include Debug.asm
endif
;********************************************************************
; Ãö©ó¹ï¸Ü¤è¶ô¤¤¶W¯Å³s±µªºµøµ¡µ{¦¡
;********************************************************************
_HyperLinkProc proc hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
mov eax,uMsg
.if eax == WM_LBUTTONUP
invoke GetDlgCtrlID,hWnd
.if eax == ID_HOMEPAGE
invoke ShellExecute,0,0,offset szHomePage,0,0,0
.elseif eax == ID_EMAIL
invoke ShellExecute,0,0,offset szEmail,0,0,0
.endif
.elseif eax == WM_NCHITTEST
;±N WM_NCHITTEST ªð¦^ TRUE ¥i¥H±µ¦¬·Æ¹«°Ê§@¡A¹ê²{«ö¤U¥\¯à !
mov eax,TRUE
ret
.elseif eax == WM_SETCURSOR
invoke SetCursor,hCursorHandle
.else
invoke GetWindowLong,hWnd,GWL_USERDATA
invoke CallWindowProc,eax,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
_HyperLinkProc endp
;********************************************************************
; ¹ï¸Ü¤è¶ôµ¡¤f¥Dµ{§Ç
;********************************************************************
AboutDialogProc proc uses ebx edi esi, \
hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
local @stWindow:RECT
local @dwWidth:DWORD,@dwHeight:DWORD
local @hWinTemp:DWORD
local @stFont OGFONT,@hFontOutput:DWORD
mov eax,uMsg
.if eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_INITDIALOG
invoke GetModuleHandle,NULL
invoke LoadCursor,eax,IDC_HANDLE
mov hCursorHandle,eax
invoke GetDlgItem,hWnd,ID_HOMEPAGE
mov @hWinTemp,eax
invoke SetWindowLong,@hWinTemp,GWL_WNDPROC,addr _HyperLinkProc
invoke SetWindowLong,@hWinTemp,GWL_USERDATA,eax
invoke GetDlgItem,hWnd,ID_EMAIL
mov @hWinTemp,eax
invoke SetWindowLong,@hWinTemp,GWL_WNDPROC,addr _HyperLinkProc
invoke SetWindowLong,@hWinTemp,GWL_USERDATA,eax
.elseif eax == WM_CTLCOLORSTATIC
invoke GetDlgCtrlID,lParam
.if eax == ID_HOMEPAGE || eax == ID_EMAIL
invoke SendMessage,lParam,WM_GETFONT,0,0
mov @hFontOutput,eax
invoke GetObject,@hFontOutput,sizeof LOGFONT,addr @stFont
mov @stFont.lfUnderline,TRUE
invoke CreateFontIndirect,addr @stFont
mov @hFontOutput,eax
invoke SelectObject,wParam,eax
invoke SetTextColor,wParam,Blue
invoke GetSysColor,COLOR_MENU
invoke SetBkColor,wParam,eax
invoke DeleteObject,@hFontOutput
;********************************************************************
; ª`·N¦¹³B¤@©wn§âStockOjectªºªð¦^Ȫð¦^¡A§_«hµLªkÅã¥ÜÃC¦â
;********************************************************************
invoke GetStockObject,HOLLOW_BRUSH
.else
mov eax,FALSE
ret
.endif
ret
.else
;********************************************************************
; ª`·N¡G¹ï¸Ü¤è¶ôªº®ø®§³B²z«á¡Anªð¦^ TRUE,¹ï¨S¦³³B²zªº®ø®§
; nªð¦^ FALSE
;********************************************************************
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
AboutDialogProc endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; µ{¦¡¶}©l
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
invoke InitCommonControls
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_ABOUT,\
NULL,offset AboutDialogProc,DLG_ABOUT
invoke ExitProcess,NULL
;********************************************************************
end start
µ{¦¡ªº¤ÀªR©MnÂI
¦b¸ê·½¤¤¡A§ÚÌ©w¸q¤F¨âӤ奻®Ø¡AID ¤À§O¬° ID_HOMEPAGE ©M ID_EMAIL¡A¦b¥D¹ï¸Ü¤è¶ôªº¹Lµ{ªº initdialog ®ø®§¤¤¡A§Ú̥ΠGetDlgItem ¨úªº¥¦Ìªº hWnd¡AµM«á¶i¦æ¤lÃþ¤Æ¡A§Ú̧â·sªº¹Lµ{³]¸m¨ì¤F _HyperLinkProc ¤¤
invoke GetDlgItem,hWnd,ID_HOMEPAGE
mov @hWinTemp,eax
invoke SetWindowLong,@hWinTemp,GWL_WNDPROC,addr _HyperLinkProc
invoke SetWindowLong,@hWinTemp,GWL_USERDATA,eax
invoke GetDlgItem,hWnd,ID_EMAIL
mov @hWinTemp,eax
invoke SetWindowLong,@hWinTemp,GWL_WNDPROC,addr _HyperLinkProc
invoke SetWindowLong,@hWinTemp,GWL_USERDATA,eax
µM«á¦b·sªº³B²z¹Lµ{¤¤¡AÀË´ú¨ì WM_LBUTTONUP ®ø®§¡]·Æ¹«¥ªÁä©ñ¶}¡^´N¨Ï¥Î ShellExecute API ¨Ó³s¨ìºô¯¸¡AÀË´ú WM_NCHITTEST ¨Ó¨Ï¤å¥»±±¨î¶µ±µ¦¬·Æ¹«ªº®ø®§¡AÀË´ú WM_SETCURSOR ®ø®§§â´å¼Ð³]¸m¦¨¤â§Î¡A¹ï³o¨Ç®ø®§¥H¥~ªº®ø®§§Ú̬O¤£³B²zªº¡A¨º´N¥Î CallWindowProc ¨Ó½Õ¥Îì¨Óªº¹Lµ{¶i¦æ³B²z¡C
.if eax == WM_LBUTTONUP
invoke GetDlgCtrlID,hWnd
.if eax == ID_HOMEPAGE
invoke ShellExecute,0,0,offset szHomePage,0,0,0
.elseif eax == ID_EMAIL
invoke ShellExecute,0,0,offset szEmail,0,0,0
.endif
.elseif eax == WM_NCHITTEST
;±N WM_NCHITTEST ªð¦^ TRUE ¥i¥H±µ¦¬·Æ¹«°Ê§@¡A¹ê²{«ö¤U¥\¯à !
mov eax,TRUE
ret
.elseif eax == WM_SETCURSOR
invoke SetCursor,hCursorHandle
.else
invoke GetWindowLong,hWnd,GWL_USERDATA
invoke CallWindowProc,eax,hWnd,uMsg,wParam,lParam
ret
.endif
¹ê¥Î¬ÛÃö·j´M: map nds bus lg she it model sm shell dc
|

〓¤¤°ê¶Â«ÈÁp·ù¡]CHU¡^〓«e®Ö¤ß¦¨û¡A²{¬°ºaÅA·|û
〓¤¤°ê¶Â«ÈÁp·ù¡]CHU¡^〓ºôµ¸¹q¤lÂø»x¡m¯x°}¡n½s¿è
·°ó§Þ³N¤u§@«Ç
|
|
|
|