;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;程序名称:WindowAdminister NO 0.1
;适用系统:Win 9x/Me/NT/XP
;作 者:zhanshen[DFCG][RCT]
;代码日期:2006-04-05
;程序功能:窗口管理工具
;注意事项:如欲转载,请保持本程序的版本及其他信息。
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
.386
.Model Flat ,
StdCall
Option Casemap :
None
;-----------------------------------------------
;包含引用
Include windows.inc
Include user32.inc
Include kernel32.inc
Include Shell32.inc
Include Gdi32.inc
IncludeLib user32.lib
IncludeLib kernel32.lib
Includelib Shell32.lib
Includelib Gdi32.lib
;-----------------------------------------------
;自定义函数声明
DlgProc
proto :
DWORD ,:
DWORD ,:
DWORD ,:
DWORD
AboutDlgProc
proto :
DWORD ,:
DWORD ,:
DWORD ,:
DWORD
UrlLinkProc
proto :
DWORD ,:
DWORD ,:
DWORD ,:
DWORD
_Wsprintf
proto :
DWORD ,:
DWORD ,:
DWORD
;-----------------------------------------------
;常数段
.const
DLG_MAIN
EQU 100
DLG_ABOUT_ME
EQU 101
DLG_WINDOW_NAME_EDIT
EQU 1000
DLG_MY_WINDOW_TOP
EQU 1001
DLG_REJIGGER_TITLE
EQU 1002
ABOUT_OK
EQU 1003
DLG_WINDOW_EDIT_HWND
EQU 1004
DLG_WINDOW_EDIT_ID
EQU 1005
DLG_WINDOW_EDIT_SYTLE
EQU 1006
DLG_WINDOW_EDIT_HINSTANCE
EQU 1007
DLG_EDIT_WNDFUNCTION
EQU 1008
DLG_WINDOW_EDIT_CLASS
EQU 1010
DLG_WINDOW_NOTOP
EQU 1011
DLG_WINDOW_TOP
EQU 1012
DLG_WINDOW_MAXIMIZE
EQU 1013
DLG_WINDOW_MINIMIZE
EQU 1014
DLG_WINDOW_ENABLE
EQU 1015
DLG_WINDOW_DISABLES
EQU 1016
DLG_WINDOW_HIDE
EQU 1017
DLG_WINDOW_SHOW
EQU 1018
DLG_WINDOW_CLICK
EQU 1019
DLG_WINDOW_CLOSE
EQU 1020
DLG_WINDOW_NOTUSESHIFT
EQU 1021
DLG_MY_WINDOW_EXIT
EQU 1022
DLG_MY_WINDOW_ABOUT
EQU 1023
ABOUT_LINK_WWW_PEDIY
EQU 1024
ABOUT_LINK_BBS_PEDIY
EQU 1025
ABOUT_LINK_DFCG
EQU 1026
ABOUT_LINK_RCT
EQU 1027
ABOUT_LINK_CHINADFORCE
EQU 1028
DLG_TIMER_ID
EQU 1
DLG_TIMER_ELAPSE
EQU 100
DLG_CUR
EQU 2000
DLG_ICON
EQU 100
;-----------------------------------------------
;已初始化变量段
.data
szTop
db 'WindowTop' ,0
szNoTop
db 'WindowNoTop' ,0
szUseShift
db 'UseShift' ,0
szNotUseShift
db 'NotUseShift' ,0
fShiftFlag
db FALSE
szFormat
db '%X' ,0
szLinkWwwPediy
db 'http://www.pediy.com' ,0
szLinkBbsPediy
db 'http://bbs.pediy.com' ,0
szLinkDfcg
db 'http://www.chinadfcg.com/woyao/index.php' ,0
szLinkRct
db 'http://debugman.wintoolspro.com/index.php' ,0
szLinkChinadforce
db 'http://www.chinadforce,com' ,0
;-----------------------------------------------
;未初始化变量段
.data?
hInstance HINSTANCE ?
hWinWindow HWND ?
hLinkCur HWND ?
;-----------------------------------------------
;代码段
.CODE
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
START:
invoke GetModuleHandle ,NULL
mov hInstance,
eax
invoke DialogBoxParam ,hInstance,DLG_MAIN,0,
offset DlgProc,0
invoke ExitProcess ,0
_Wsprintf
proc szBuff,iBuffSize,Num
invoke RtlZeroMemory ,szBuff,iBuffSize
invoke wsprintf ,szBuff,
addr szFormat,Num
ret
_Wsprintf
endp
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;自定义函数执行区
;主程序函数回调函数
DlgProc
proc hWnd,uMsg,wParam,lParam
LOCAL @szWinBuff1[255],@szWinBuff2[255],@szWinBuff3[255]:
Byte
LOCAL @point:POINT
.if uMsg==WM_INITDIALOG
;窗口初始化消息
invoke LoadIcon ,hInstance,DLG_ICON
invoke SendMessage ,hWnd,WM_SETICON,ICON_SMALL,
eax
invoke LoadCursor ,hInstance,DLG_CUR
mov hLinkCur,
eax
invoke SendDlgItemMessage ,hWnd,DLG_MY_WINDOW_TOP,BM_CLICK,NULL,NULL
invoke SetTimer ,hWnd,DLG_TIMER_ID,DLG_TIMER_ELAPSE,NULL
.elseif uMsg==WM_COMMAND
;按钮点击消息
mov eax ,wParam
.if ax ==DLG_MY_WINDOW_EXIT
;退出程序
invoke SendMessage ,hWnd,WM_CLOSE,NULL,NULL
.elseif ax ==DLG_MY_WINDOW_TOP
;程序置顶或取消置顶
invoke IsDlgButtonChecked ,hWnd,DLG_MY_WINDOW_TOP
.if eax ==BST_CHECKED
invoke SetDlgItemText ,hWnd,DLG_MY_WINDOW_TOP,
offset szTop
invoke SetWindowPos ,hWnd,HWND_TOPMOST,NULL,NULL,NULL,NULL,SWP_NOSIZE
OR SWP_NOMOVE
.elseif eax ==BST_UNCHECKED
invoke SetDlgItemText ,hWnd,DLG_MY_WINDOW_TOP,
offset szNoTop
invoke SetWindowPos ,hWnd,HWND_NOTOPMOST,NULL,NULL,NULL,NULL,SWP_NOSIZE
OR SWP_NOMOVE
.endif
.elseif ax ==DLG_REJIGGER_TITLE
;更改程序的窗口标题
invoke GetDlgItemText ,hWnd,DLG_WINDOW_NAME_EDIT,
addr @szWinBuff1,
sizeof @szWinBuff1
.if ((hWinWindow!=NULL)&&(
eax !=0))
invoke SetWindowText ,hWinWindow,
addr @szWinBuff1
.endif
.elseif ax ==DLG_WINDOW_NOTOP
;置顶获取窗口程序
.if hWinWindow!=NULL
invoke SetWindowPos ,hWinWindow,HWND_NOTOPMOST,NULL,NULL,NULL,NULL,SWP_NOSIZE
OR SWP_NOMOVE
.endif
.elseif ax ==DLG_WINDOW_TOP
;取消置顶获取窗口程序
.if hWinWindow!=NULL
invoke SetWindowPos ,hWinWindow,HWND_TOPMOST,NULL,NULL,NULL,NULL,SWP_NOSIZE
OR SWP_NOMOVE
.endif
.elseif ax ==DLG_WINDOW_MAXIMIZE
;获取窗口最大化
.if hWinWindow!=NULL
invoke ShowWindow ,hWinWindow,SW_MAXIMIZE
.endif
.elseif ax ==DLG_WINDOW_MINIMIZE
;获取窗口最小化
.if hWinWindow!=NULL
invoke ShowWindow ,hWinWindow,SW_MINIMIZE
.endif
.elseif ax ==DLG_WINDOW_ENABLE
;激活获取的窗口
.if hWinWindow!=NULL
invoke EnableWindow ,hWinWindow,
TRUE
.endif
.elseif ax ==DLG_WINDOW_DISABLES
;禁止获取的窗口
.if hWinWindow!=NULL
invoke EnableWindow ,hWinWindow,
FALSE
.endif
.elseif ax ==DLG_WINDOW_HIDE
;隐藏获取的窗口
.if hWinWindow!=NULL
invoke ShowWindow ,hWinWindow,SW_HIDE
.endif
.elseif ax ==DLG_WINDOW_SHOW
;显示获取的窗口
.if hWinWindow!=NULL
invoke ShowWindow ,hWinWindow,SW_SHOW
.endif
.elseif ax ==DLG_WINDOW_CLICK
;点击获取的窗口
.if hWinWindow!=NULL
invoke SendMessage ,hWinWindow,BM_CLICK,NULL,NULL
.endif
.elseif ax ==DLG_WINDOW_CLOSE
;关闭获取的窗口
.if hWinWindow!=NULL
invoke SendMessage ,hWinWindow,WM_SYSCOMMAND,SC_CLOSE,NULL
.endif
.elseif ax ==DLG_WINDOW_NOTUSESHIFT
;是否使用Shift键来获取窗口信息
invoke IsDlgButtonChecked ,hWnd,DLG_WINDOW_NOTUSESHIFT
.if eax ==BST_CHECKED
invoke SetDlgItemText ,hWnd,DLG_WINDOW_NOTUSESHIFT,
offset szNotUseShift
mov fShiftFlag,
TRUE
.elseif eax ==BST_UNCHECKED
invoke SetDlgItemText ,hWnd,DLG_WINDOW_NOTUSESHIFT,
offset szUseShift
mov fShiftFlag,
FALSE
.endif
.elseif ax ==DLG_MY_WINDOW_ABOUT
invoke DialogBoxParam ,hInstance,DLG_ABOUT_ME,hWnd,
offset AboutDlgProc,NULL
.endif
.elseif uMsg==WM_TIMER
;计时器消息
.if fShiftFlag
jmp @f
.endif
invoke GetKeyState ,VK_SHIFT
test eax ,80000000
.if !ZERO?
@@:
invoke GetCursorPos ,
addr @point
invoke WindowFromPoint ,@point.x,@point.y
;取得当前鼠标窗口句柄
mov hWinWindow,
eax
invoke _Wsprintf,
addr @szWinBuff3,
sizeof @szWinBuff3,hWinWindow
invoke SetDlgItemText ,hWnd,DLG_WINDOW_EDIT_HWND,
addr @szWinBuff3
invoke GetClassName ,hWinWindow,
addr @szWinBuff3,
sizeof @szWinBuff3
;获取窗口句柄
invoke SetDlgItemText ,hWnd,DLG_WINDOW_EDIT_CLASS,
addr @szWinBuff3
invoke GetWindowLong ,hWinWindow,GWL_STYLE
;获取窗口风格
invoke _Wsprintf,
addr @szWinBuff3,
sizeof @szWinBuff3,
eax
invoke SetDlgItemText ,hWnd,DLG_WINDOW_EDIT_SYTLE,
addr @szWinBuff3
invoke GetWindowLong ,hWinWindow,GWL_ID
;获取窗口ID
invoke _Wsprintf,
addr @szWinBuff3,
sizeof @szWinBuff3,
eax
invoke SetDlgItemText ,hWnd,DLG_WINDOW_EDIT_ID,
addr @szWinBuff3
invoke GetWindowLong ,hWinWindow,GWL_HINSTANCE
;获取窗口模块
invoke _Wsprintf,
addr @szWinBuff3,
sizeof @szWinBuff3,
eax
invoke SetDlgItemText ,hWnd,DLG_WINDOW_EDIT_HINSTANCE,
addr @szWinBuff3
invoke GetWindowLong ,hWinWindow,GWL_WNDPROC
;获取窗口回调函数
invoke _Wsprintf,
addr @szWinBuff3,
sizeof @szWinBuff3,
eax
invoke SetDlgItemText ,hWnd,DLG_EDIT_WNDFUNCTION,
addr @szWinBuff3
invoke GetWindowText ,hWinWindow,
addr @szWinBuff2,
sizeof @szWinBuff2
invoke SetDlgItemText ,hWnd,DLG_WINDOW_NAME_EDIT,
addr @szWinBuff2
.endif
.elseif uMsg==WM_CLOSE
;关闭程序
invoke KillTimer ,hWnd,DLG_TIMER_ID
invoke EndDialog ,hWnd,
FALSE
.else
mov eax ,
FALSE
ret
.endif
mov eax ,
TRUE
ret
DlgProc
endp
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;关于对话框回调函数
AboutDlgProc
proc uses edi esi hWnd,uMsg,wParam,lParam
LOCAL @hFontOut:
DWORD
LOCAL @st_hFont:LOGFONT
.if uMsg==WM_INITDIALOG
invoke LoadIcon ,hInstance,100
invoke SendMessage ,hWnd,WM_SETICON,ICON_SMALL,
eax
mov edi ,1024
.while edi <= 1028
;子类化超级链接
invoke GetDlgItem ,hWnd,
edi
mov esi ,
eax
invoke SetWindowLong ,
esi ,GWL_WNDPROC,
offset UrlLinkProc
invoke SetWindowLong ,
esi ,GWL_USERDATA,
eax
inc edi
.endw
.elseif uMsg==WM_CTLCOLORSTATIC
;重画超级链接文字颜色及背景颜色
invoke GetDlgCtrlID ,lParam
.if (
eax >=1024) && (
eax <=1028)
invoke SendMessage ,lParam,WM_GETFONT,NULL,NULL
mov @hFontOut,
eax
invoke GetObject ,@hFontOut,
sizeof LOGFONT,
addr @st_hFont
mov @st_hFont.lfUnderline,NULL
invoke CreateFontIndirect ,
addr @st_hFont
mov @hFontOut,
eax
invoke SelectObject ,wParam,
eax
invoke SetTextColor ,wParam,0FF0000h
invoke GetSysColor ,15
invoke SetBkColor ,wParam,
eax
invoke DeleteObject ,@hFontOut
invoke GetStockObject ,5
.else
xor eax ,
eax
ret
.endif
ret
.elseif uMsg==WM_COMMAND
mov eax ,wParam
.if ax ==ABOUT_OK
invoke EndDialog ,hWnd,
FALSE
.endif
.elseif uMsg==WM_CLOSE
invoke EndDialog ,hWnd,
FALSE
.else
xor eax ,
eax
ret
.endif
mov eax ,
TRUE
ret
AboutDlgProc
endp
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;Label控件回调函数子类化函数
UrlLinkProc
proc hWnd,uMsg,wParam,lParam
.if uMsg==WM_LBUTTONUP
invoke GetDlgCtrlID ,hWnd
.if eax ==ABOUT_LINK_WWW_PEDIY
mov eax ,
offset szLinkWwwPediy
.elseif eax ==ABOUT_LINK_BBS_PEDIY
mov eax ,
offset szLinkBbsPediy
.elseif eax ==ABOUT_LINK_DFCG
mov eax ,
offset szLinkDfcg
.elseif eax ==ABOUT_LINK_RCT
mov eax ,
offset szLinkRct
.elseif eax ==ABOUT_LINK_CHINADFORCE
mov eax ,
offset szLinkChinadforce
.endif
invoke ShellExecute ,NULL,NULL,
eax ,NULL,NULL,SW_SHOW
.elseif uMsg==WM_NCHITTEST
mov eax ,
TRUE
ret
.elseif uMsg==WM_SETCURSOR
invoke SetCursor ,hLinkCur
.else
invoke GetWindowLong ,hWnd,GWL_USERDATA
invoke CallWindowProc ,
eax ,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax ,
eax
ret
UrlLinkProc
endp
END START
[培训]内核驱动高级班,冲击BAT一流互联网大厂工
作,每周日13:00-18:00直播授课
上传的附件: