.if ax == IDC_CAPTURE ;初始状态捕获窗口左上坐标
invoke FindWindow,NULL,offset szGameTitle
mov hGame,eax
invoke GetWindowRect,hGame,addr @rect
invoke SetDlgItemInt,hWnd,IDC_POXEDIT,@rect.left,FALSE
invoke SetDlgItemInt,hWnd,IDC_POYEDIT,@rect.top,FALSE
.elseif ax == IDC_STGAME ;按开始键后,鼠标移动到指定位置,即游戏窗口的开始游戏
;invoke Sleep,1000
invoke SetCursorPos,@rect.left+654,@rect.top+574
当执行到invoke SetCursorPos,@rect.left+654,@rect.top+574 这里,错误出现了,鼠标基本上就是乱飞了!
我仔细看了一下rect结构和setcursorpos函数,rect结构是long型的,setcursorpos要求的参数是int型的,我想是因为参数不匹配而导致的这一结果吧,我将setcursorpos的参数改成常量,那么就是正常的鼠标移动了!
我比较纳闷啊,书上是这么说的:win32环境中的参数实际上只有一种类型,那就是dword。那么为什么还会这样呢?
并且我看别人在VC上面做的,也是用rect结构和setcursorpos函数,都不经过强制转换就可以了!
那么在汇编里面,对于这种状况,该如何处理呢?用常量可不行啊!
------解决方案--------------------
下面这个 SetCursorPos() 所使用的 @rect 又没有被上面的 GetWindowRect() 赋值,两个是不同的 if 条件里的吧,其中的内容自如是乱的了,以此来设置光标位置出现乱飞很正常吧。
是不是没有调试过啊,看过你发过的些帖子,问题本身其实并不复杂,调试再反溯,很容易就能发现问题所在的。