知道进程名,结束进程,在win2000成功,98下不行,why?
源代码如下:
-------------------------------------------------
#include "stdafx.h"
#include "Tlhelp32.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
HANDLE han= ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //取进程快照
PROCESSENTRY32 lpp;
lpp.dwSize =sizeof(PROCESSENTRY32); BOOL bo;
bo=::Process32First(han,&lpp); //从快照里取第一个进程信息
TCHAR *str1,*str2; while (bo)
{
str1=lpp.szExeFile ;
str2=_strlwr(str1);
//-----判断是否aa.exe
if ((!strcmp(str2,"r_mcc.exe"))|(!strcmp(str2,"r_mcc")) )
{
HANDLE han2=::OpenProcess(PROCESS_TERMINATE,TRUE,lpp.th32ProcessID); //取进程实例
::TerminateProcess(han2 ,0); //关闭
}
//-----
bo=::Process32Next(han,&lpp); //取下一个进程信息 } ::CloseHandle(han); //关闭快照 return 0;
}
---------------------------------
同样一个程序,在win2000下任务管理器中,是“R_MCC.EXE”
而到了win98,ctrl+alt+del时就是显示:“r_mcc”了,
if ((!strcmp(str2,"r_mcc.exe"))|(!strcmp(str2,"r_mcc")) )就是为了解决这个问题,
但是好像不行。
why?
源代码如下:
-------------------------------------------------
#include "stdafx.h"
#include "Tlhelp32.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
HANDLE han= ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //取进程快照
PROCESSENTRY32 lpp;
lpp.dwSize =sizeof(PROCESSENTRY32); BOOL bo;
bo=::Process32First(han,&lpp); //从快照里取第一个进程信息
TCHAR *str1,*str2; while (bo)
{
str1=lpp.szExeFile ;
str2=_strlwr(str1);
//-----判断是否aa.exe
if ((!strcmp(str2,"r_mcc.exe"))|(!strcmp(str2,"r_mcc")) )
{
HANDLE han2=::OpenProcess(PROCESS_TERMINATE,TRUE,lpp.th32ProcessID); //取进程实例
::TerminateProcess(han2 ,0); //关闭
}
//-----
bo=::Process32Next(han,&lpp); //取下一个进程信息 } ::CloseHandle(han); //关闭快照 return 0;
}
---------------------------------
同样一个程序,在win2000下任务管理器中,是“R_MCC.EXE”
而到了win98,ctrl+alt+del时就是显示:“r_mcc”了,
if ((!strcmp(str2,"r_mcc.exe"))|(!strcmp(str2,"r_mcc")) )就是为了解决这个问题,
但是好像不行。
why?
解决方案 »
- 如何读取这样的ini文件??
- 对动态添加的按钮的响应问题
- 一个简单的MFC对话框程序,我执行了一个线程,为什么就堵死了??
- 如何利用给出的大量的x,y坐标画曲线图?如何比较两幅曲线图的相似性?
- 有没有截图直接就是JPG的,不用通过BMP压缩转换呢;
- ShellExecute打开Excel文件的问题,急!!!
- 如何把 UCHAR 转换成 char*,sos
- 100分请教,关于USB,分不够再加。
- 消息传递问题,特急,请各位大侠帮忙!!--在线等
- the c++ programming language special edition 这本书怎么样?我看了10几页怎么觉的好象什么也没学到?
- 请教几个概念!!!
- 我怎么知道我编的工程到底有多少行代码?
{
HANDLE han2 = ::OpenProcess(PROCESS_TERMINATE, FALSE, lpp.th32ProcessID);
::TerminateProcess(han2, 0);
::CloseHandle(han2);
}
~~~ ||
这个地方我也看到了,也改了,好像还是不行。我要疯了。
为了在98和2000下都可以运行,这个地方可以写成这种形式吗?
BOOL WINAPI CloseProcessFromName(LPCTSTR lpszProcessName)
{
HANDLE hProcessSnap = NULL;
PROCESSENTRY32 pe = {0};
BOOL bRet = FALSE;
DWORD dwExitCode = 820110; //User defined exitcode
//Take the snapshot of all processes in system
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(INVALID_HANDLE_VALUE == hProcessSnap)
return FALSE; //Fill in the size of the structure before using it
pe.dwSize = sizeof(PROCESSENTRY32);
//Work the snap of the processes, and for each process get
//the module file name
if(Process32First(hProcessSnap, &pe))
{
MODULEENTRY32 me = {0};
do
{
if(0 == lstrcmp(pe.szExeFile, lpszProcessName))
{
HANDLE hProcess;
hProcess = OpenProcess(PROCESS_TERMINATE, NULL,
pe.th32ProcessID);
if(INVALID_HANDLE_VALUE != hProcess)
{
//Terminate the specify process
TerminateProcess(hProcess, dwExitCode);
//Wait the process to be terminate
WaitForSingleObject(hProcess, INFINITE);
dwExitCode = 0;
GetExitCodeProcess(hProcess, &dwExitCode);
CloseHandle(hProcess);
bRet = TRUE;
}
}
}while(Process32Next(hProcessSnap, &pe));
}
else
{
bRet = FALSE;
} //Clean up the snapshot
CloseHandle(hProcessSnap);
return bRet;
}2000下的:
BOOL CloseProcess(LPCSTR lpszProcName)
{
char szProcessName[MAX_PATH] = "unknow"; //枚举出所有正在运行的进程
DWORD dwProcessId[1024], cbNeeded, numProcesses;
unsigned int i = 0; if(!EnumProcesses(dwProcessId, sizeof(dwProcessId), &cbNeeded))
return false;
//计算出进程的数目
numProcesses = cbNeeded / sizeof(DWORD); for(i=0; i<numProcesses; i++)
{
//取得进程的句柄
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION|
PROCESS_VM_READ|PROCESS_TERMINATE, false, dwProcessId[i]); //取得进程的名字
if(NULL != hProcess)
{
HMODULE hMod;
if(EnumProcessModules(hProcess, &hMod, sizeof(hMod),
&cbNeeded))
{
GetModuleBaseName(hProcess, hMod, szProcessName,
sizeof(szProcessName));
}
//如果是指定的进程则关闭该进程
if(lstrcmp(lpszProcName, szProcessName))
{
TerminateProcess(hProcess, 0);
CloseHandle(hProcess);
return true;
} CloseHandle(hProcess);
}
} return false;
}给分哦~
对于test.exe,在2000下,
pe.szExeFile=“test.exe”
而在98下,
pe.szExeFile=“D:\\somefolder\test.exe”
有个目录在里面。
呵。