这个是帮别人写的。具体用途不详。
// 通过PSAPI函数枚举进程
#include "stdio.h"
#include "string.h"
#include "windows.h"
// 定义函数指针
typedef BOOL (__stdcall* funEnumPorcess)(DWORD *lpidProcess, // 进程ID
DWORD cb, // lpidProcess的大小
DWORD *cbNeeded); // 实际使用lpidProcess的字节数
typedef DWORD (__stdcall* funGetModuleFileNameEx)(HANDLE hProcess, // 待获得进程名称的进程句柄
HMODULE hModule, // 当前调用进程的句柄
LPTSTR lpFileName, // 记录返回的进程名称
DWORD nSize); // lpFileName大小
const DWORD MAXPROCESS = 500; // 假设当前系统最大有500个进程正在执行
int main (){
while(1){
killer();
};
} ;
int killer()
{
char FileName[] = "notepad.exe"; // 大小写任意
char NameBuff[MAX_PATH];
char *pFileName; // pFileName转化为大写后的字符串指针
char *pNameBuff; // NameBuff转化为大写后的字符串指针
BOOL bRes; // 返回结果
HINSTANCE hInstance; // 动态库句柄
HANDLE hHandle; // 进程句柄
int i, j; // 循环变量
int len;
funEnumPorcess EnumProcesses;
funGetModuleFileNameEx GetModuleFileNameEx;
DWORD *buffer, maxNum, factNum;
maxNum = MAXPROCESS;
factNum = MAXPROCESS;
buffer = (DWORD *)malloc(maxNum);
hInstance = LoadLibrary("psapi.dll"); // 装载psapi.dll
if (hInstance)
{
EnumProcesses = (funEnumPorcess)GetProcAddress(hInstance, "EnumProcesses");
if (EnumProcesses)
{
bRes = EnumProcesses(buffer, maxNum, &factNum); // 枚举进程,得到进程名称和实际进程总大小
if (bRes)
{
factNum /= sizeof(DWORD); // 计算实际进程个数
GetModuleFileNameEx = (funGetModuleFileNameEx)GetProcAddress(hInstance, "GetModuleFileNameExA");
if (GetModuleFileNameEx)
{
for (i=0; i<factNum; i++)
{
hHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, buffer[i]); // 获取进程句柄
if (hHandle)
{
bRes = GetModuleFileNameEx(hHandle, NULL, NameBuff, MAX_PATH); // 获取进程名称
if (bRes)
{
pFileName = strupr(FileName); // 字符串转化为大写
pNameBuff = strupr(NameBuff);
if (strstr(pNameBuff, pFileName) != NULL) // 名字查找
{
if (TerminateProcess(hHandle, 0));
{
printf("关闭 %s 成功\n", NameBuff);
break;
}
}
}
// 关闭句柄
CloseHandle(hHandle);
}
}
}
}
}
// 释放动态库
FreeLibrary(hInstance);
}
free(buffer);
return 0;
}