首页
社区
课程
招聘
关于SetTimer函数的问题
发表于: 2016-1-28 17:49 5729

关于SetTimer函数的问题

2016-1-28 17:49
5729
我想问一下SetTimer函数设置时间(毫秒)那里填0的话是不是就相当于无限了?
我是在逆向一个程序,这个程序刚打开有个提示注册的窗口,用的SetTimer函数控制时间,16进制1B58也就是7000毫秒,然后我找到了这个时间的地址,用十六进制编辑器改成了0000,结果过了一段时间这个注册窗口不消失了,我怀疑是不是填0这个时间就成无限的了?十六进制改成0001的话neg窗口就闪一下,变相的相当于去neg了

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 9941
活跃值: (2158)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
如果是无限应该是 -1 才对,
把SetTimer当作 sleep 就行了
至于为什么会这样,应该是别的原因吧
2016-1-28 17:57
0
雪    币: 1787
活跃值: (340)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
uElapse [in]
Type: UINT
The time-out value, in milliseconds.
If uElapse is less than USER_TIMER_MINIMUM (0x0000000A), the timeout is set to USER_TIMER_MINIMUM. If uElapse is greater than USER_TIMER_MAXIMUM (0x7FFFFFFF), the timeout is set to USER_TIMER_MAXIMUM.
2016-1-28 18:46
0
雪    币: 250
活跃值: (81)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
#define USER_TIMER_MAXIMUM  0x7FFFFFFF
#define USER_TIMER_MINIMUM  0x0000000A
If uElapse is less than USER_TIMER_MINIMUM, the timeout is set to USER_TIMER_MINIMUM. If uElapse is greater than USER_TIMER_MAXIMUM, the timeout is set to USER_TIMER_MAXIMUM.
2016-1-28 18:59
0
雪    币: 1140
活跃值: (102)
能力值: ( LV4,RANK:48 )
在线值:
发帖
回帖
粉丝
5
如果时间间隔小于55毫秒,每个时钟滴答(每秒出现18.2次)都会产生一个wm_timer消息,我只知道这些了
2016-2-1 21:43
0
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
  MFC SetTimer函数的用法
  1) 函数原型及变形

  SetTimer这个API函数的原型 :
  UINT_PTR SetTimer(
  HWND hWnd, // 窗口句柄
  UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
  UINT uElapse, // 时间间隔,单位为毫秒
  TIMERPROC lpTimerFunc // 回调函数
  );
  注意:设置第二个参数时要注意,如果设置的等待时间比处理时间短,程序就会出问题了。
  回调函数:在这个函数里,放入你想要做的事情的代码,你可以将它设定为NULL,也就是使用系统默认的回调函数,系统默认认的是onTime函数。
  例如 :
  SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器
  在MFC程序中SetTimer被封装在CWnd类中,调用就不用指定窗口句柄了
  于是SetTimer函数的原型变为:

  UINT SetTimer(UINT nIDEvent,UINT nElapse,void(CALLBACK EXPORT *lpfnTimer)(HWND,UINT ,YINT ,DWORD)) ,用法如:SetTimer(1,1000,NULL);
2016-2-2 22:10
0
雪    币: 756
活跃值: (114)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
看不懂...
2016-3-6 20:42
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
时间设置成0,我记得是类似KillTimer之类的效果。
2016-3-25 18:42
0
雪    币: 244
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
给我10kx吧,我想成为正式会员!!!
2016-3-29 15:11
0
雪    币: 7673
活跃值: (5497)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
UINT_PTR SetTimer(
  HWND hWnd, // 窗口句柄
  UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器,自己定义
  UINT uElapse, // 时间间隔,单位为毫秒
  TIMERPROC lpTimerFunc // 回调函数
  );

你修改的也就是第三个参数 uElapse ,这个就是时钟的周期,单位毫秒,也就是说,隔多少毫秒运行一次lpTimerFunc回调函数, uElapse = 0 的时候,时钟无效,就不会触发 lpTimerFunc,如果 uElapse = 1,就一毫秒运行一次回调函数,估计是有什么判断,运行完成了,直接销毁窗口吧,所以你改成1毫秒就直接闪一下窗口就没了
2016-3-29 16:07
0
游客
登录 | 注册 方可回帖
返回
//