铁路建设网站多少,网站怎么上传数据库,商城系统的基本,大兴安岭商城网站开发设计我先给一个代码#xff0c;你可以直接用#xff0c;什么不用管了
static void kill_process_by_name(char *name)
{PROCESSENTRY32 pe32 {0};//声明一个结构体#xff0c;用来存放快照进程信息的一个结构体HANDLE hsnap NULL;pe32.dwSize sizeof(pe32);//指定结…我先给一个代码你可以直接用什么不用管了
static void kill_process_by_name(char *name)
{PROCESSENTRY32 pe32 {0};//声明一个结构体用来存放快照进程信息的一个结构体HANDLE hsnap NULL;pe32.dwSize sizeof(pe32);//指定结构体的大小hsnap CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //得到系统进程快照的句柄if (hsnap INVALID_HANDLE_VALUE) return; //获取句柄失败BOOL ret Process32First(hsnap, pe32);//查找系统进程快照中的第一个进程while (ret) {if (stricmp(pe32.szExeFile, name) 0) {//判断进程的名称是不是一样HANDLE h OpenProcess(PROCESS_TERMINATE, FALSE, pe32.th32ProcessID); //打开一个已存在的进程对象并返回进程的句柄TerminateProcess(h, 0); //终止进程CloseHandle(h); //关闭句柄}ret Process32Next(hsnap, pe32); //查找下一个}CloseHandle(hsnap);
}从此之后你只有传入进程的名称就可以强制关闭这个进程了。如果你有空并且还想深究请认真往下看定会让你获益匪浅。
查看系统所有进程的ip和名字
void CTestDlg::OnBnClickedButton1()
{// TODO: 在此添加控件通知处理程序代码//打开控制台设置可以往控制台写入显示数据AllocConsole();freopen(CON, r, stdin);freopen(CON, w, stdout);freopen(CON, w, stderr); char name[50]{};int i{};PROCESSENTRY32 pe32 { 0 };//声明一个结构体HANDLE hsnap NULL; pe32.dwSize sizeof(pe32); //指定结构体大小hsnap CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //得到系统进程快照的句柄if (hsnap INVALID_HANDLE_VALUE) return; //获取句柄失败BOOL ret Process32First(hsnap, pe32);//查找系统进程快照中的第一个进程while (ret) {i;couti : pe32.szExeFile :pe32.th32ProcessID endl;//输出进程IDret Process32Next(hsnap, pe32); //查找下一个}CloseHandle(hsnap);}运行结果如下图 下面详尽地说明上面两个例子出现的结构体以及函数的用法。
PROCESSENTRY32结构体
结构体的作用
用来存放快照进程信息的一个结构体。存放进程信息和调用成员输出进程信息用来 Process32First指向第一个进程信息并将进程信息抽取到PROCESSENTRY32中。用 Process32Next指向下一条进程信息。
结构体的声明 typedef struct tagPROCESSENTRY32{DWORD dwSize;DWORD cntUsage;DWORD th32ProcessID;ULONG_PTR th32DefaultHeapID;DWORD th32ModuleID;DWORD cntThreads;DWORD th32ParentProcessID;LONG pcPriClassBase;DWORD dwFlags;TCHAR szExeFile[MAX_PATH];} PROCESSENTRY32, *PPROCESSENTRY32;参数说明 dwSize 结构的大小这个结构的长度以字节为单位初始化一个实例以后调用Process32First函数设置成员的大小sizeof(PROCESSENTRY32).如果你没用PROCESSENTRY32中的成员dwSize初始化pricess32First将会失败。
cntUsage 此进程的引用计数这个成员已经很久没有使用总是设置为零。
th32ProcessID 进程ID这个就是任务管理器里面的进程的PID打开任务管理器–查看—选择列—PID勾选就可以显示进程的标示符PID
th32DefaultHeapID 进程默认堆ID这个成员已经很久没有使用总是设置为零。
th32ModuleID 进程模块ID这个成员已经很久没有使用总是设置为零。
cntThreads 此进程开启的线程计数这个成员执行线程开始的进程。
th32ParentProcessID 父进程的ID。
pcPriClassBase .线程优先权当前进程创建的任何一个线程的基础优先级即在当前进程内创建线程的话其基本优先级的值。
dwFlags 这个成员已经很久没有使用总是设置为零。
szExeFile 一个数组进程全名进程的可执行文件名称。要获得可执行文件的完整路径应调用Module32First函数再检查其返回的MODULEENTRY32结构的szExePath成员。但是如果被调用进程是一个32位程序您必须调用QueryFullProcessImageName函数去获取64位进程的可执行文件完整路径名。
CreateToolHelp32Snapshot函数
函数作用 列出所有进程需要调用CreateToolHelp32Snapshot函数先得到系统进程快照的句柄函数包含在tlhelp32.h头中。
函数声明
HANDLE_WINAPI CreateToolHelp32Snapshot(DWORD dwFlags,DWORD th32ProcessID);参数说明 dwFlags指定了获取系统进程快照的类型 th32ProcessID指向要获取进程快照的ID获取系统内所有进程快照时是0
函数返回值 如果函数调用成功返回快照句柄否则返回INVALID_HANDLE_VALUE。
Process32Next函数
函数作用 再调用Process32Next函数列出系统中其它进程
函数原型
BOOL Process32Next(HANDLE hSnapshot,LPROCESSENTRY32 lppe);参数说明 其中hSnapshot是由CreateToolHelp32Snapshot函数返回的系统进程快照的句柄 而lppe是指向PROCESSENTRY的结构体指针进程的详细信息保存在结构体中。
OpenProcess 函数
函数作用 OpenProcess 函数用来打开一个已存在的进程对象并返回进程的句柄。
函数原型
HANDLE OpenProcess(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
DWORD dwProcessId
);参数说明 1.dwDesiredAccess想拥有的该 进程访问权限 PROCESS_ALL_ACCESS //所有能获得的权限 PROCESS_CREATE_PROCESS //需要创建一个进程 PROCESS_CREATE_THREAD //需要创建一个线程 PROCESS_DUP_HANDLE //重复使用DuplicateHandle句柄 PROCESS_QUERY_INFORMATION //获得进程信息的权限如它的退出代码、优先级 PROCESS_QUERY_LIMITED_INFORMATION /获得某些信息的权限如果获得了PROCESS_QUERY_INFORMATION也拥有PROCESS_QUERY_LIMITED_INFORMATION权限/ PROCESS_SET_INFORMATION //设置某些信息的权限如进程优先级 PROCESS_SET_QUOTA //设置内存限制的权限使用SetProcessWorkingSetSize PROCESS_SUSPEND_RESUME //暂停或恢复进程的权限 PROCESS_TERMINATE //终止一个进程的权限使用TerminateProcess PROCESS_VM_OPERATION //操作进程内存空间的权限(可用VirtualProtectEx和WriteProcessMemory) PROCESS_VM_READ //读取进程内存空间的权限可使用ReadProcessMemory PROCESS_VM_WRITE //读取进程内存空间的权限可使用WriteProcessMemory SYNCHRONIZE //等待进程终止
2.bInheritHandle表示所得到的进程句柄是否可以被继承
3.dwProcessId被打开进程的PID
返回说明
如成功返回值为指定进程的句柄。 如失败返回值为NULL可调用GetLastError()获得错误代码。
TerminateProcess函数
函数作用
个函数可以用来终止或者说杀死一个进程它不会留给进程及其所有线程清理的时间系统会马上终止(杀死)这个进程的所有线程致使进程终止。在使用此函数前我们必须要调用OpenProcess函数来获得我们要终止(杀死)进程的句柄并且要获得进程的PROCESS_TERMINATE权限。
函数原型
BOOL TerminateProcess(HANDLE hProcess,UINT uExitCode)参数说明
1、hProcess要终止(杀死)进程的句柄需要有PROCESS_TERMINATE权限。 2、uExitCode设置进程的退出值。可通过GetExitCodeProcess函数得到一个进程的退出值。
返回值说明
如果失败将返回FALSE(0)而成功将返回一个非零值。 注不要用if(retTRUE)去检测函数是否调用成功因为函数调用成功会返回一个非零值但不一定是TRUE(1)
CloseHandle函数
函数原型 BOOL CloseHandle(HANDLE hObject);参数说明
hObject 代表一个已打开对象handle。
返回值说明 TRUE执行成功 FALSE执行失败可以调用GetLastError()获知失败原因。 函数说明 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。在CreateThread成功之后会返回一个hThread的handle且内核对象的计数加1CloseHandle之后引用计数减1当变为0时系统删除内核对象。 若在线程执行完之后没有调用CloseHandle在进程执行期间将会造成内核对象的泄露相当于句柄泄露但不同于内存泄露这势必会对系统的效率带来一定程度上的负面影响。但当进程结束退出后系统会自动清理这些资源。