-
-
[旧帖] [原创]自编一个小小的实用程序win32捕捉窗口:请版主帮忙添加一下 0.00雪花
-
发表于: 2011-10-16 22:12 1072
-
问题:求往里添加功能:1、具体功能是通过快捷键把“窗口类名”复制到剪切板里,能在其它程序任意粘贴
具体程序:
;>>>>>>asm部份
;>>>>>开始
.386
.model flat,stdcall
option casemap:none
;>>>>>库文件
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
DLG_MAIN EQU 1000
IDC_MSG EQU 10
IDC_TOP EQU 11
IDC_SEL EQU 12
IDC_NEW EQU 13
;>>>>>数据段
.data?
szClass db 256 dup (?)
szBuffer db 256 dup (?)
.data
hWin dd ?
hWinMain dd ?
.const
;szText db '%s:%08x:%02d:%02d',0 ;分别为窗口句柄、窗口类名、鼠标X坐标、鼠标Y坐标
szText db '窗口类为:',0dh,0ah,' 【%s】',0dh,0ah
db '窗口句柄:',0dh,0ah,' 【%08x】',0dh,0ah
db '鼠标坐标:',0dh,0ah,' X:【%02d】',0dh,0ah,' Y:【%02d】',0
.code
_Display proc uses eax
LOCAL @stPs:POINT
invoke GetCursorPos,addr @stPs
invoke WindowFromPoint,@stPs.x,@stPs.y
push eax
pop hWin
.if eax
invoke GetClassName,hWin,addr szClass,-1 ;用OD调试为什么这个函数这里出错。获取窗口类名是不正确
invoke wsprintf,offset szBuffer,offset szText,offset szClass,hWin,@stPs.x,@stPs.y
invoke InvalidateRect,hWinMain,NULL,TRUE
.endif
ret
_Display endp
_WinMain proc uses ebx edi esi hWnd:dword,uMsg:dword,wParam:dword,lParam:dword
LOCAL @stPs:POINT
mov eax,uMsg
;********************************************************************
.if eax == WM_CLOSE
invoke KillTimer,hWnd,1 ;删除定时器
invoke EndDialog,hWnd,0
.elseif eax == WM_INITDIALOG
push hWnd
pop hWinMain
invoke SetTimer,0,0,500,offset _Display
invoke CheckDlgButton,hWnd,IDC_TOP,BST_CHECKED
invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,\
SWP_NOMOVE or SWP_NOSIZE
.elseif eax == WM_COMMAND
mov eax,wParam
.if ax == IDCANCEL
invoke EndDialog,hWnd,NULL
;>>>>>>>>>实现窗口悬浮如所有窗口之上
.elseif ax == IDC_TOP
invoke IsDlgButtonChecked,hWnd,IDC_TOP
.if eax == BST_CHECKED
invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,\
SWP_NOMOVE or SWP_NOSIZE
.else
invoke SetWindowPos,hWnd,HWND_NOTOPMOST,0,0,0,0,\
SWP_NOMOVE or SWP_NOSIZE
.endif
;>>>>>>>实现LTEXT控件可写与不可写
.elseif ax == IDC_SEL
invoke IsDlgButtonChecked,hWnd,IDC_SEL
mov ebx,eax
invoke GetDlgItem,hWnd,IDC_MSG
invoke GetDlgItem,hWnd,IDOK
.if ebx == BST_CHECKED
invoke EnableWindow,eax,FALSE
.else
invoke EnableWindow,eax,TRUE
.endif
;>>>>>>>创建时钟,调用时钟回调函数
.elseif ax == IDOK
invoke SetDlgItemText,hWinMain,IDC_MSG,addr szBuffer
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_WinMain endp
Start:
invoke GetModuleHandle,0
invoke DialogBoxParam,eax,DLG_MAIN,0,offset _WinMain,0
invoke ExitProcess,NULL
end Start
;>>>>>>资源文件部份
#include <resource.h>
#define DLG_MAIN 1000
#define IDC_MSG 10
#define IDC_TOP 11
#define IDC_SEL 12
#define IDC_NEW 13
DLG_MAIN DIALOG 20,70,160,80
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
CAPTION "信息->作者:【残々剑】"
FONT 9,"宋体"
BEGIN
LTEXT "使用说明:\n1、请将鼠标放到窗口上。\n2、单击按钮或按Alt+Z\n3、选中悬浮窗口此窗口将悬浮\n4、选中固定信息选项将锁定信息",IDC_MSG,3,3,83,75,WS_BORDER
DEFPUSHBUTTON "开始获取(&Z)",IDOK, 92,5,60,15
GROUPBOX "窗口选项", -1, 90,25,67,50
AUTOCHECKBOX "悬浮窗口", IDC_TOP,92,35,45,15
AUTOCHECKBOX "固定信息", IDC_SEL,92,58,45,15
END
具体程序:
;>>>>>>asm部份
;>>>>>开始
.386
.model flat,stdcall
option casemap:none
;>>>>>库文件
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
DLG_MAIN EQU 1000
IDC_MSG EQU 10
IDC_TOP EQU 11
IDC_SEL EQU 12
IDC_NEW EQU 13
;>>>>>数据段
.data?
szClass db 256 dup (?)
szBuffer db 256 dup (?)
.data
hWin dd ?
hWinMain dd ?
.const
;szText db '%s:%08x:%02d:%02d',0 ;分别为窗口句柄、窗口类名、鼠标X坐标、鼠标Y坐标
szText db '窗口类为:',0dh,0ah,' 【%s】',0dh,0ah
db '窗口句柄:',0dh,0ah,' 【%08x】',0dh,0ah
db '鼠标坐标:',0dh,0ah,' X:【%02d】',0dh,0ah,' Y:【%02d】',0
.code
_Display proc uses eax
LOCAL @stPs:POINT
invoke GetCursorPos,addr @stPs
invoke WindowFromPoint,@stPs.x,@stPs.y
push eax
pop hWin
.if eax
invoke GetClassName,hWin,addr szClass,-1 ;用OD调试为什么这个函数这里出错。获取窗口类名是不正确
invoke wsprintf,offset szBuffer,offset szText,offset szClass,hWin,@stPs.x,@stPs.y
invoke InvalidateRect,hWinMain,NULL,TRUE
.endif
ret
_Display endp
_WinMain proc uses ebx edi esi hWnd:dword,uMsg:dword,wParam:dword,lParam:dword
LOCAL @stPs:POINT
mov eax,uMsg
;********************************************************************
.if eax == WM_CLOSE
invoke KillTimer,hWnd,1 ;删除定时器
invoke EndDialog,hWnd,0
.elseif eax == WM_INITDIALOG
push hWnd
pop hWinMain
invoke SetTimer,0,0,500,offset _Display
invoke CheckDlgButton,hWnd,IDC_TOP,BST_CHECKED
invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,\
SWP_NOMOVE or SWP_NOSIZE
.elseif eax == WM_COMMAND
mov eax,wParam
.if ax == IDCANCEL
invoke EndDialog,hWnd,NULL
;>>>>>>>>>实现窗口悬浮如所有窗口之上
.elseif ax == IDC_TOP
invoke IsDlgButtonChecked,hWnd,IDC_TOP
.if eax == BST_CHECKED
invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,\
SWP_NOMOVE or SWP_NOSIZE
.else
invoke SetWindowPos,hWnd,HWND_NOTOPMOST,0,0,0,0,\
SWP_NOMOVE or SWP_NOSIZE
.endif
;>>>>>>>实现LTEXT控件可写与不可写
.elseif ax == IDC_SEL
invoke IsDlgButtonChecked,hWnd,IDC_SEL
mov ebx,eax
invoke GetDlgItem,hWnd,IDC_MSG
invoke GetDlgItem,hWnd,IDOK
.if ebx == BST_CHECKED
invoke EnableWindow,eax,FALSE
.else
invoke EnableWindow,eax,TRUE
.endif
;>>>>>>>创建时钟,调用时钟回调函数
.elseif ax == IDOK
invoke SetDlgItemText,hWinMain,IDC_MSG,addr szBuffer
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_WinMain endp
Start:
invoke GetModuleHandle,0
invoke DialogBoxParam,eax,DLG_MAIN,0,offset _WinMain,0
invoke ExitProcess,NULL
end Start
;>>>>>>资源文件部份
#include <resource.h>
#define DLG_MAIN 1000
#define IDC_MSG 10
#define IDC_TOP 11
#define IDC_SEL 12
#define IDC_NEW 13
DLG_MAIN DIALOG 20,70,160,80
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
CAPTION "信息->作者:【残々剑】"
FONT 9,"宋体"
BEGIN
LTEXT "使用说明:\n1、请将鼠标放到窗口上。\n2、单击按钮或按Alt+Z\n3、选中悬浮窗口此窗口将悬浮\n4、选中固定信息选项将锁定信息",IDC_MSG,3,3,83,75,WS_BORDER
DEFPUSHBUTTON "开始获取(&Z)",IDOK, 92,5,60,15
GROUPBOX "窗口选项", -1, 90,25,67,50
AUTOCHECKBOX "悬浮窗口", IDC_TOP,92,35,45,15
AUTOCHECKBOX "固定信息", IDC_SEL,92,58,45,15
END
[培训]科锐软件逆向54期预科班、正式班开始火爆招生报名啦!!!
赞赏
他的文章
- [求助]为什么同一个函数同样的参数输出来的结果不一样 5916
- [求助]C++ 异常 处理问题 5972
- [原创]游戏基址搜索器<第一次发作品> 4842
- [求助]求高手怎么用汇编指令fpatan指令 5118
- [求助]剪切板为什么要执行两次才能成功复制 6993
谁下载
赞赏
雪币:
留言: