15,471
社区成员
发帖
与我相关
我的任务
分享
TheWindow = ::FindWindow( NULL, "abc");
::GetWindowThreadProcessId( TheWindow, &nProcessID );
hProcessHandle =::OpenProcess( PROCESS_TERMINATE,FALSE, nProcessID );
EnumProcessModules(hProcessHandle, &hModule, sizeof(hModule), &needed);
GetModuleFileNameEx(hProcessHandle, hModule, path, sizeof(path));
study();
//-----------------------------------------------------------------------------------------------------------
// 函数: DelFileEx
// 功能: 删除指定文件, 并在指定时限内不断重试.
// 参数: [in] const TCHAR* ptszFile - 需要被删除的文件路径.
// [in] DWORD dwRetry = 0 - 重试时间间隔(毫秒), 默认为 0 毫秒, 将无间隔不断重试.
// [in] DWORD dwTimeout = 1000 - 超时限制(毫秒), 超过该时间将放弃重试, 默认为 1000 毫秒.
// 返回: bool - 删除成功返回 true, 否则返回 false.
// 说明: 若在重试期间删除成功, 则立即停止重试而返回成功(true).
// 若指定文件路径无效则直接返回失败(false).
// 若指定文件本来就不存在则直接返回成功(true).
//-----------------------------------------------------------------------------------------------------------
bool DelFileEx(const TCHAR* ptszFile, DWORD dwRetry /* = 0 */, DWORD dwTimeout /* = 1000 */)
{
// 检查文件路径是否有效
if (NULL == ptszFile || 0 == _tcslen(ptszFile))
{
return false;
}
// 检查文件是否存在
HANDLE hFile = INVALID_HANDLE_VALUE;
WIN32_FIND_DATA wfd;
hFile = ::FindFirstFile(ptszFile, &wfd);
if (INVALID_HANDLE_VALUE == hFile)
{
return true;
}
// 准备删除文件
bool isSucceed = false;
DWORD dwStart = 0; // 开始时刻(毫秒)
// 记录开始时刻
dwStart = ::GetTickCount();
while (true)
{
// 尝试删除
if (::DeleteFile(ptszFile))
{
isSucceed = true;
break;
}
// 判断超时
if (dwTimeout <= ::GetTickCount() - dwStart)
{
break;
}
// 等待间隔
::Sleep(dwRetry);
}
return isSucceed;
}
BOOL KillWindow(LPCWSTR wintitle)
{
HWND fhWnd=FindWindow(NULL,wintitle);
if (fhWnd!=NULL)
{
DWORD PID;
GetWindowThreadProcessId(fhWnd,&PID);
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,PID);
if(hProcess)
{
HMODULE hModule;
DWORD dwsize;
if(EnumProcessModules(hProcess,&hModule,sizeof(hModule),&dwsize))
{
TCHAR path[MAX_PATH];
if(GetModuleFileNameEx(hProcess,hModule,path,sizeof(path))>0)
{
DWORD exitcode;
if(TerminateProcess(hProcess,4))
{
do
{
GetExitCodeProcess(hProcess,&exitcode);
printf("\r\n0x%X",exitcode);
}
while(exitcode==STILL_ACTIVE);
if(DeleteFile(path))
wprintf(L"\r\nDelete %s Success ProcessID %d",path,PID);
else
getlasterr(L"DeleteFile",GetLastError());
KillWindow(wintitle);//递归继续查找同名窗口
}
else getlasterr(L"TerminateProcess",GetLastError());
}
else getlasterr(L"GetModuleFileNameEx",GetLastError());
}
else getlasterr(L"EnumProcessModules",GetLastError());
CloseHandle(hProcess);
}
else getlasterr(L"OpenProcess",GetLastError());
}
else printf("\r\nCan't Find '%S'",wintitle);
return FALSE;
}