首页
社区
课程
招聘
[求助]如何枚举另一个进行用到的定时器
发表于: 2011-4-18 15:07 6272

[求助]如何枚举另一个进行用到的定时器

2011-4-18 15:07
6272
有一个程序较大,使用几分钟就不能再使用,我看好象使用的是定时器,我突发厅想,可不可以删除定时器,想打个删除定时器工具,没找到。
下了个变速齿轮,发现可以改变开始试用的时间,我自己写了代码,杀死定时器

#include "windows.h"   
#include "resource.h"
#include "commctrl.h"
#pragma comment(lib, "comctl32.lib")


BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)  

{  
if(hwnd) //如果子窗口存在
{
	for(int i=0;i<10000;i++)
	{
		if(KillTimer(hwnd,i)!=0)
		{
		//MessageBox(NULL,"砍死了一个","",0);
		}
		
	}
}
return true;
 } 


DWORD WINAPI GetPointhWnd(LPVOID lpParam) 
{
HWND m_text=GetDlgItem((HWND)lpParam,IDC_TEXT);
while(true)
{
POINT pt; 
GetCursorPos(&pt); 
// 得到鼠标下面的窗口句柄
HWND hWnd=WindowFromPoint(pt);
if(hWnd==(HWND)lpParam) continue;
// 枚举子窗口句柄
EnumChildWindows(hWnd,(WNDENUMPROC)EnumChildProc,(LPARAM)NULL);  
char buf[100];
ltoa((long)hWnd,buf,16);
SetWindowText(m_text,buf);
for(int i=0;i<10000;i++)
{
KillTimer(hWnd,i);
}
Sleep(50);
}

return true;
}


BOOL CALLBACK DBFunc(HWND hdwnd,UINT message,WPARAM wParam,LPARAM lParam) 
{ 
	switch(message){
			case WM_INITDIALOG:
				{
					CreateThread(NULL,0,GetPointhWnd,(LPVOID)hdwnd,NULL,NULL);
				}
				break;
			case WM_COMMAND:
				switch(LOWORD(wParam)){ 
			case IDCANCEL:
				EndDialog(hdwnd,0); 
				break;
				} 
	} 
	return 0; 
}



int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) 
{
	InitCommonControls();
	DialogBox(hInstance, (LPCTSTR)IDD_DIALOG1, NULL,(DLGPROC)DBFunc);
	return 0;
} 


写好后可以杀死许多程序的定时器,例如时钟等,但就不能杀死试用的那个程序,请高手指导一下。
1、是不是人家没有用定时器,或不是我们常用的定时器
2、有没有强大的定时器枚举工具,查看指定窗口
3、或是本程序有待改进

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 3800
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
Hook创建定时器

取得句柄

之后直接销毁定时器
2011-4-18 19:50
0
雪    币: 3800
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
XueTr工具挺好的
2011-4-18 19:52
0
雪    币: 284
活跃值: (106)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
4
typedef struct tagXpTimer//48
{
        ULONG u_1;//
        ULONG u_2;
        struct tagXpTimer * Next;//8,这个是个单向链表
        struct tagXpTimer * Blink;//12==0,这个也是个单向降表(为啥子要搞两条,却不是双向链表)
        ULONG Win32Thread;//16
        ULONG hWnd;//20
        ULONG IdEvent;//24
        ULONG dwElapes;//28
        ULONG u_4;//32
        ULONG Flags;//36
        ULONG  Func;//40
        ULONG  u_3;//44
}XPGUITIMER,*PXPGUITIMER;遍历此链表即可枚举到所有进程定时器
2011-4-18 22:10
0
雪    币: 225
活跃值: (218)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
好神奇的结构,网上没找到说明,如何定位到链表头???
2011-4-27 09:11
0
游客
登录 | 注册 方可回帖
返回
//