自定义taskKill and find

5 篇文章 0 订阅


由于FindWindow(Ex)  只能够查找具体的窗体 不能够模糊查找,因此有了下文。


主要是利用EnumWindows  查找className  并用strstr模糊匹配 再查找title 从而进一步确认要找的进程

struct WINDOWINFO_FIND
{
char *className;
char *titleName;
HWND hWnd; 
};
BOOL CALLBACK EnumWindowsProcFind(HWND hWnd, LPARAM lParam) // 回调函数

TCHAR szTitle[200];
TCHAR szClass[200];  
    WINDOWINFO_FIND* par = (WINDOWINFO_FIND *)lParam;
GetClassName(hWnd, szClass, sizeof(szClass) / sizeof(TCHAR)); // 窗口类  
if(!par->hWnd && strstr(szClass, par->className) != NULL ) //终止
{   
printf("szClass:%s\n", szClass);  
// ::SendMessage(hWnd,WM_GETTEXT,sizeof(szTitle) / sizeof(TCHAR),(LPARAM)szTitle);
GetWindowText(hWnd, szTitle, sizeof(szTitle));
if(strstr(szTitle, par->titleName) != NULL ) //终止
{   
printf("EnumWind:%s-%s\n", szClass, szTitle);   
par->hWnd = hWnd;

}  
return true;
}
//kill task----------------------------------
bool taskkill(char *szClassName, char *szTitleName)
{
BOOL bResult = false;
WINDOWINFO_FIND* par = new WINDOWINFO_FIND;
par->className=szClassName;
par->titleName=szTitleName;
par->hWnd = NULL;
EnumWindows(EnumWindowsProcFind, (LPARAM)par); // 枚举窗口  use EnumWindows because EnumChildWindows is no used all win syste
if(par->hWnd)
{
DWORD ProcessID;
GetWindowThreadProcessId(par->hWnd, &ProcessID);
HANDLE hProcessHandle = ::OpenProcess(PROCESS_TERMINATE, FALSE, ProcessID);
bResult=TerminateProcess(hProcessHandle, 0);

    delete par;
return bResult;
}

//find task
bool taskFind(char *szClassName, char *szTitleName, HWND &rstHwnd)
{
BOOL bResult = false;
WINDOWINFO_FIND* par = new WINDOWINFO_FIND;
par->className=szClassName;
par->titleName=szTitleName;
par->hWnd = NULL;
EnumWindows(EnumWindowsProcFind, (LPARAM)par); // 枚举窗口  use EnumWindows because EnumChildWindows is no used all win syste
if(par->hWnd)

bResult=true;
rstHwnd = par->hWnd;

    delete par;
return bResult;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值