仿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 |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏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.