怎样找出指定程序并杀掉 有一个程序,运行时没有界面,只在系统托盘区有个图标。关闭这个程序时会弹出对话框询问是否关闭。怎样找出这个程序,把这个程序结束,结束时不跳出对话框? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.先获取该程序的进程句柄2。TerminateProcess()可以直接杀掉他 HANDLE hProcessSnap = NULL; BOOL bRet = FALSE; PROCESSENTRY32 pe32 = {0}; hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == INVALID_HANDLE_VALUE) return ; pe32.dwSize = sizeof(PROCESSENTRY32); if (Process32First(hProcessSnap, &pe32)) { do{ //FileName是你想kill掉的名字 if(strcmpi(pe32.szExeFile,FileName)==0) { UINT uExitCode; if(!TerminateProcess(hVlcPlay,uExitCode)) AfxMessageBox("不能关闭该程序"); CloseHandle(hProcessSnap); break; } }while (Process32Next(hProcessSnap,&pe32)); CloseHandle(hProcessSnap); } hVlcPlay是你的哪个程序的句柄! look this progrom!: 首先, 调用 CreateToolhelp32Snapshot() 获得当前运行进程的快照,这个函数返回包含正在运行进程的快照句柄。其原形是:HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags,DWORD th32ProcessID);其中:dwFlags表示要包含在快照的内容为TH32CS_SNAPPROCESS表示在快照中包含进程列表;th32ProcessID是进程号,为0表示当前进程。返回值是一个句柄,如果没有进程正在运行,则返回INVALID_HANDLE_VALUE(可用GetLastError()获得),反之可用BOOL WINAPI Process32First(HANDLE hSnapshot, LPPROCESSENTRY32 lppe);获取返回的进程如果Process32First返回TRUE,则第一个进程的信息已经在LPPROCESSENTRY32结构中,其余进程信息可用BOOL WINAPI Process32Next(HANDLE hSnapshot, LPPROCESSENTRY32 lppe)获得LPPROCESSENTRY32结构的定义如下: typedef struct tagPROCESSENTRY32 { DWORD dwSize; //此结构的大小 DWORD cntUsage; //进程的引用数,如果为0,则次进程已停止 DWORD th32ProcessID; //进程号 ULONG_PTR th32DefaultHeapID; DWORD th32ModuleID; //此进程引用的模块ID DWORD cntThreads; //此进程创建的线程数 DWORD th32ParentProcessID; //父进程的ID LONG pcPriClassBase; //这个进程创建的线程的基本优先权 DWORD dwFlags; //保留 TCHAR szExeFile[MAX_PATH]; } PROCESSENTRY32; typedef PROCESSENTRY32 *PPROCESSENTRY32; 最后不要忘了调用: CloseHandle(); 另用函数是: HANDLE OpenProcess( DWORD dwDesiredAccess, // access flag BOOL bInheritHandle, // handle inheritance option DWORD dwProcessId // process identifier); 用它可打开一个进程,打开进程后,可用: BOOL TerminateProcess( HANDLE hProcess, // handle to the process UINT uExitCode // exit code for the process); 来关闭进程。 前面的函数调用是好的,到了OpenProcess里面HANDLE h = OpenProcess(0, FALSE, pe.th32ProcessID);返回0GetLastError说句柄无效 MFC里句柄与对象的映射!!! 我写的读串口程序占CPU太严重 请问一台没有装过VC++6.0的电脑如何能运行我写的MFC程序? 从字符串分析虚拟码的思路 如何获得窗口中的一个按钮相对于这个窗口的位置 怎样捕获键盘消息? 关于单文档视图的显示 急!!请教高手,无模式对话框怎样精确定位? 自绘控件的问题 VC 怎样获得主板温度 CPU温度和风扇转速呢 删除一个对话框类后遇到的问题 请教DBGRID的刷新问题:)
2。TerminateProcess()可以直接杀掉他
BOOL bRet = FALSE;
PROCESSENTRY32 pe32 = {0};
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
return ;
pe32.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hProcessSnap, &pe32))
{
do{ //FileName是你想kill掉的名字
if(strcmpi(pe32.szExeFile,FileName)==0)
{
UINT uExitCode;
if(!TerminateProcess(hVlcPlay,uExitCode))
AfxMessageBox("不能关闭该程序");
CloseHandle(hProcessSnap);
break;
}
}while (Process32Next(hProcessSnap,&pe32));
CloseHandle(hProcessSnap);
}
首先, 调用 CreateToolhelp32Snapshot() 获得当前运行进程的快照,这个函数返回包含正在运行进程的快照句柄。其原形是:HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags,DWORD th32ProcessID);其中:
dwFlags表示要包含在快照的内容为TH32CS_SNAPPROCESS表示在快照中包含进程列表;
th32ProcessID是进程号,为0表示当前进程。
返回值是一个句柄,如果没有进程正在运行,则返回INVALID_HANDLE_VALUE(可用GetLastError()获得),反之可用BOOL WINAPI Process32First(HANDLE hSnapshot, LPPROCESSENTRY32 lppe);获取返回的进程
如果Process32First返回TRUE,则第一个进程的信息已经在LPPROCESSENTRY32结构中,其余进程信息可用BOOL WINAPI Process32Next(HANDLE hSnapshot, LPPROCESSENTRY32 lppe)获得
LPPROCESSENTRY32结构的定义如下: typedef struct tagPROCESSENTRY32 {
DWORD dwSize; //此结构的大小
DWORD cntUsage; //进程的引用数,如果为0,则次进程已停止
DWORD th32ProcessID; //进程号
ULONG_PTR th32DefaultHeapID;
DWORD th32ModuleID; //此进程引用的模块ID
DWORD cntThreads; //此进程创建的线程数
DWORD th32ParentProcessID; //父进程的ID
LONG pcPriClassBase; //这个进程创建的线程的基本优先权
DWORD dwFlags; //保留
TCHAR szExeFile[MAX_PATH];
} PROCESSENTRY32;
typedef PROCESSENTRY32 *PPROCESSENTRY32;
最后不要忘了调用: CloseHandle();
另用函数是: HANDLE OpenProcess(
DWORD dwDesiredAccess, // access flag
BOOL bInheritHandle, // handle inheritance option
DWORD dwProcessId // process identifier
);
用它可打开一个进程,打开进程后,可用: BOOL TerminateProcess(
HANDLE hProcess, // handle to the process
UINT uExitCode // exit code for the process
);
来关闭进程。
到了OpenProcess里面
HANDLE h = OpenProcess(0, FALSE, pe.th32ProcessID);
返回0
GetLastError说句柄无效