首页
论坛
专栏
课程

呵呵,仿OD插件的一个窗口管理工具源码。

2006-4-6 09:29 11414

呵呵,仿OD插件的一个窗口管理工具源码。

2006-4-6 09:29
11414
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;程序名称: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

[公告][征集寄语] 看雪20周年年会(12.28上海) | 感恩有你,一路同行

上传的附件:
最新回复 (21)
wzmooo 2006-4-6 10:27
2
0
支持
prince 16 2006-4-6 10:33
3
0
支持
小虾 10 2006-4-6 11:02
4
0
呵呵,多谢两位兄弟支持!
快雪时晴 4 2006-4-6 11:39
5
0
Very Good,I likeit
viviann 2006-4-6 13:59
6
0
强烈支持!
andy00 4 2006-4-6 14:52
7
0
太强了!!!!
thinkSJ 4 2006-4-6 15:03
8
0
最初由 andy00 发布
太强了!!!!


也来一篇,让我们学习一下吧
kyc 19 2006-4-6 15:39
9
0
学习一下
lnn1123 13 2006-4-6 17:42
10
0
支持小虾!
kanxue 8 2006-4-6 18:06
11
0
现在小虾己“名不符实”了,应改名“大虾”。
hbqjxhw 16 2006-4-6 21:00
12
0
太强了支持中
hrbx 8 2006-4-6 21:54
13
0
支持一下,强
FishSeeWater 11 2006-4-7 08:18
14
0
发现BUG
szLinkChinadforce  db  'http://www.chinadforce,com',0
小虾 10 2006-4-7 08:44
15
0
谢谢提醒。
lingyu 1 2006-4-8 00:33
16
0
强!支持
CCDebuger 24 2006-4-11 10:26
17
0
支持小虾改名为大虾
qqmei 2006-4-11 11:13
18
0
AOGO??中的那位小悟也是你??
Saver 2006-4-11 11:46
19
0
看到这好文,又知道了dfcg终于又开了,受益非浅啊
小虾 10 2006-4-11 18:12
20
0
谢谢大家的支持。

最初由 CCDebuger 发布
支持小虾改名为大虾

名字就不用改了,永远都属于小虾。

最初由 qqmei 发布
AOGO??中的那位小悟也是你??

不是
guoyt 2006-4-13 20:55
21
0
支持
cnnets 2006-4-14 17:31
22
0
不错,学习中。
看惯用.dlg的。
游客
登录 | 注册 方可回帖
返回