-
-
[求助]如何枚举另一个进行用到的定时器
-
发表于:
2011-4-18 15:07
6263
-
有一个程序较大,使用几分钟就不能再使用,我看好象使用的是定时器,我突发厅想,可不可以删除定时器,想打个删除定时器工具,没找到。
下了个变速齿轮,发现可以改变开始试用的时间,我自己写了代码,杀死定时器
#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、或是本程序有待改进
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)