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

IT保安 2014-04-01 03:02:37
		.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,无法上传截图,不知道为什么!不知道哪里出现了错误,求指点!
...全文
93 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
IT保安 2014-04-02
  • 打赏
  • 举报
回复
可能是编辑器的原因吧,我用的是notepad++,怪不得我之前用messagebox弹中文框也是乱码,现在知道问题的根源了!
zara 2014-04-02
  • 打赏
  • 举报
回复
是吗?你这么定义在 asm 里,本来就是这个格式的啊。
IT保安 2014-04-01
  • 打赏
  • 举报
回复
问题解决了,反复查baidu,反复研究! szGameTitle db 'QQ游戏 - 连连看角色版',0 这里面的中文字体,必须转换成gb2312格式,方能正确的找到句柄! 真是开心!
IT保安 2014-04-01
  • 打赏
  • 举报
回复
我就是用spy++复制出来的,晕
zara 2014-04-01
  • 打赏
  • 举报
回复
封函数,这个不大可能吧。你用的是窗口标题来找寻的,恐怕还是这个标题字符串不对;vc 里有个 Spy++ 程序,可以查看窗口各个属性的,从那里复制标题出来试试?
IT保安 2014-04-01
  • 打赏
  • 举报
回复
我也这么寻思,换GetForegroundWindow函数就能输出正常数据,说明输出部分的代码没问题,应该是findwindow这个函数有问题,没得到句柄,也许游戏封杀了这个函数? 还有其他函数可用吗?
zara 2014-04-01
  • 打赏
  • 举报
回复
比较可能 FindWindow() 调用就没能找寻到响应窗口吧,下面的 GetWindowRect() 也就错了。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧