找回密码
 注册
搜索
热搜: 回贴

仿OD插件的一个窗口管理工具源码,OD插件,Win32/64编程

2010-1-30 18:29| 发布者: admin| 查看: 117| 评论: 0|原作者: 青鸾峰


仿OD插件的一个窗口管理工具源码,OD插件,Win32/64编程
2008年06月23日 星期一 下午 10:05
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

;程序名称:WindowAdminister NO 0.1

;适用系统:Win 9x/Me/NT/XP

;作 者:zhanshen[DFCG][RCT]

;代码日期:2006-04-05

;程序功能:窗口管理工具

;注意事项:如欲转载,请保持本程序的版本及其他信息。

;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
附件下载:window.rar



.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


最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 13:15 , Processed in 0.154549 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部