TC官方合作论坛

 找回密码
 立即注册
查看: 855|回复: 4

[问题] 关于定时器的问题,求解

[复制链接]
发表于 2014-3-22 01:45:34 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在使用spy++那个应用时,我把图片框放入到选项卡中就没有效果了,不知道是什么原因,谁能帮我解答一下


如果在主界面的话就可以使用,定时器为什么不能放到选项卡呢................


  1. 功能 定时器_刷新_时钟()
  2.     当前句柄 = 窗口.鼠标所在窗口句柄()
  3.     编辑框.设置文本("编辑框_游戏标题",窗口.得到标题(当前句柄))
  4.     机器人.画边框()
  5. 功能结束
  6. 功能 画边框()
  7.     变量 DesktopWindowHwnd, DesktopWindowDC, DrawMode, PenHwnd, OldPenHwnd, rect_left, rect_top, rect_right, rect_bottom
  8.     //==================↑变量定义区↑====================      
  9.     DesktopWindowHwnd = dllcall("user32.dll", "int", "GetDesktopWindow")
  10.     DesktopWindowDC = dllcall("user32.dll", "int", "GetWindowDC", "int", DesktopWindowHwnd)
  11.     DrawMode = dllcall("gdi32.dll", "int", "SetROP2", "int", DesktopWindowDC, "int", 10)
  12.     窗口.获取位置(当前句柄, rect_left, rect_top)
  13.     窗口.获取大小(当前句柄, rect_right, rect_bottom)
  14.     rect_right = rect_left + rect_right
  15.     rect_bottom = rect_top + rect_bottom
  16.     PenHwnd = dllcall("gdi32.dll", "int", "CreatePen", "int", 0, "int", 4, "int", #000000)
  17.     OldPenHwnd = dllcall("gdi32.dll", "int", "SelectObject", "int", DesktopWindowDC, "int", PenHwnd)
  18.     dllcall("gdi32.dll", "int", "Rectangle", "int", DesktopWindowDC, "int", rect_left - 1, "int", rect_top - 1, "int", rect_right + 1, "int", rect_bottom + 1)
  19.     dllcall("gdi32.dll", "int", "SelectObject", "int", DesktopWindowDC, "int", OldPenHwnd)
  20.     dllcall("gdi32.dll", "int", "SetROP2", "int", DesktopWindowDC, "int", DrawMode)
  21.     dllcall("gdi32.dll", "int", "DeleteObject", "int", PenHwnd)
  22.     dllcall("user32.dll", "int", "ReleaseDC", "int", DesktopWindowHwnd, "int", DesktopWindowDC)
  23. 功能结束
  24. 功能 机器人_消息路由(句柄,消息,w参数,l参数,时间,x坐标,y坐标)
  25.     如果(消息 == 512)
  26.         xx=0
  27.         如果(句柄 == handle)
  28.             dllcall("user32.dll", "int", "SetClassLongA", "int", handle, "int", -12, "int", phwnd[0])
  29.             xx=1
  30.         如果结束
  31.         如果(xx==0)
  32.             dllcall("user32.dll", "int", "SetClassLongA", "int", handle, "int", -12, "int", phwnd[1])
  33.         如果结束
  34.     如果结束
  35.     //==================↑设置鼠标指针↑====================           
  36.     如果(句柄 == handle && 消息 == 513)      
  37.         定时器.注册("定时器_刷新", 500)
  38.         图片框.设置图片("图片框_鼠标", "rc:bk0.bmp")
  39.         dllcall("user32.dll", "int", "SetCapture", "int", handle)
  40.     如果结束
  41.     //==================↑左键按下事件↑====================           
  42.     如果(句柄 == handle && 消息 == 514)
  43.         定时器.销毁("定时器_刷新")
  44.         dllcall("user32.dll", "int", "ReleaseCapture")
  45.         dllcall("user32.dll", "int", "SetClassLongA", "int", handle, "int", -12, "int", phwnd[1])   
  46.         图片框.设置图片("图片框_鼠标","rc:bk1.bmp")
  47.     如果结束
  48.     返回 假
  49. 功能结束
复制代码
当前句柄跟 图标框的句柄应该是一样的呀,因为鼠标放到图片框了嘛,就是不知道为什么不能使用....
回复

使用道具 举报

发表于 2014-3-22 13:20:42 | 显示全部楼层
不要把图片框放选项卡,选项卡上的控件部分消息消息路由接受不到
回复 支持 1 反对 0

使用道具 举报

发表于 2014-3-22 19:00:40 | 显示全部楼层
XX=0 是为了方便判断的
  1. 如果(消息 == 512)

  2. xx=0      //每当消息等于512的时候xx被赋值0

  3. 如果(句柄 == handle)

  4. dllcall("user32.dll", "int", "SetClassLongA", "int", handle, "int", -12, "int", phwnd[0])

  5. xx=1    //如果条件满足,xx赋值1,直到下次返回的消息是512

  6. 如果结束

  7. 如果(xx==0)   //前面如果条件满足,xx已经被赋值1,所以这里的条件 xx==0 就不满足,所以下面的功能也就不执行了.

  8. dllcall("user32.dll", "int", "SetClassLongA", "int", handle, "int", -12, "int", phwnd[1])

  9. 如果结束

  10. 如果结束
复制代码


回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2014-3-22 01:46:05 | 显示全部楼层
还有那个判断中的 xx=0是什么意思,求解答
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-22 10:25:08 | 显示全部楼层
?????????????????
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-6-27 08:42 , Processed in 0.046636 second(s), 24 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表