当前位置: 代码迷 >> 汇编语言 >> 获取窗口的分寸失败,看不出原因,求教
  详细解决方案

获取窗口的分寸失败,看不出原因,求教

热度:146   发布时间:2016-05-02 04:34:40.0
获取窗口的尺寸失败,看不出原因,求教
		.386
.model flat,stdcall
option casemap:none

include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include gdi32.inc
includelib gdi32.lib



DLG_MAIN equ 1000
IDC_POX equ 1002 
IDC_POY equ 1003
IDC_POXEDIT equ 1004 
IDC_POYEDIT equ 1005
IDC_STGAME equ 1006
ICO_MAIN equ 1000
IDC_CAPTURE equ 1007

.data?
hInstance dd ?
hGame dd ?

.data
szGameTitle db 'QQ游戏 - 连连看角色版',0
szTextFormat db 'rect.left=%d',0dh
 db 'rect.top=%d',0dh
 db 'rect.right=%d',0dh
 db 'rect.bottom=%d',0

.code
_ProcDlgMain proc uses ebx esi edi hWnd,uMsg,wParam,lParam
local @rect:RECT
local @szBuffer[256]:byte
local hWinMain


mov eax,uMsg
.if eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_INITDIALOG
invoke LoadIcon,hInstance,ICO_MAIN
invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax

.elseif eax == WM_COMMAND
mov eax,wParam
.if ax == IDC_CAPTURE ;获取窗口的源点坐标
invoke FindWindow,NULL,addr szGameTitle
mov hGame,eax
invoke GetWindowRect,hGame,addr @rect
;invoke wsprintf,addr @szBuffer,addr szTextFormat,@rect.left,@rect.top,@rect.right,@rect.bottom
;invoke MessageBox,hWnd,addr @szBuffer,NULL,0
invoke SetDlgItemInt,hWnd,IDC_POXEDIT,@rect.left,FALSE
invoke SetDlgItemInt,hWnd,IDC_POYEDIT,@rect.top,FALSE
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp

start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
invoke ExitProcess,NULL
end start

#include	<resource.h>

#define DLG_MAIN 1000
#define IDC_POX 1002 //X坐标
#define IDC_POY 1003 //Y坐标
#define IDC_POXEDIT 1004 //X坐标输入框
#define IDC_POYEDIT 1005 //Y坐标输入框
#define IDC_STGAME 1006
#define ICO_MAIN 1000
#define IDC_CAPTURE 1007 //初始化,获取窗口源点坐标

ICO_MAIN ICON "my.ico"

DLG_MAIN DIALOG 300,200,200,150
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE
CAPTION "连连看外挂"
FONT 9,"宋体"
{
LTEXT "X坐标:",IDC_POX,15,20,30,12
EDITTEXT IDC_POXEDIT,40,18,30,15
LTEXT "Y坐标:",IDC_POY,15,38,30,12
EDITTEXT IDC_POYEDIT,40,35,30,15
PUSHBUTTON "开始",IDOK,160,25,30,15
PUSHBUTTON "初始化",IDC_CAPTURE,160,45,30,15

}

我的本意是先点击“初始化”按钮,先显示出游戏窗口的初始左上左边,可是实际出现的结果却是令人大吃一惊,居然是:x=11335040,Y=0,无法上传截图,不知道为什么!不知道哪里出现了错误,求指点!
------解决方案--------------------
比较可能 FindWindow() 调用就没能找寻到响应窗口吧,下面的 GetWindowRect() 也就错了。
  相关解决方案