win32根據程序名獲取程序ID或者終止程序
第一部分:
根據程序名獲取程序ID。
首先我們需要了解三個windows API函式:
HANDLE WINAPI CreateToolhelp32Snapshot(
DWORD dwFlags,
DWORD th32ProcessID
);
CreateToolhelp32Snapshot函式可以得到系統程序快照的控制代碼,如果函式呼叫成功返回快照控制代碼,否則返回INVALID_HANDLE_VALUE。函式包含在<tlhelp32.h>頭中。
BOOL WINAPI Process32First( HANDLE hSnapshot, LPPROCESSENTRY32 lppe );
BOOL WINAPI Process32Next(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe
);
Process32Next函式配合Process32First函式通過迴圈列出系統中其它程序。
查詢特定程序的ID的函式如下所示:
/* *@brief 根據程序名獲取程序ID @param lpProcessName程序名稱 */ DWORD __getProcessHandle(LPCTSTR lpProcessName)//根據程序名查詢程序PID { DWORD dwRet = 0; HANDLE hSnapShot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnapShot == INVALID_HANDLE_VALUE) { printf("\n獲得程序快照失敗,返回的GetLastError():%d", ::GetLastError()); return dwRet; } PROCESSENTRY32 pe32;//宣告程序入口物件 pe32.dwSize = sizeof(PROCESSENTRY32);//填充程序入口物件大小 ::Process32First(hSnapShot, &pe32);//遍歷程序列表 do { if (!lstrcmp(pe32.szExeFile, lpProcessName))//查詢指定程序名的PID { dwRet = pe32.th32ProcessID; break; } } while (::Process32Next(hSnapShot, &pe32)); ::CloseHandle(hSnapShot); return dwRet;//返回 }
第二部分
通過程序名來終止程序。
還是通過上面三個函式來查詢特定的程序,不過還需要另外兩個函式:
HANDLE OpenProcess(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
DWORD dwProcessId
);
BOOL TerminateProcess(
HANDLE hProcess,
UINT uExitCode
);
例項如下:
/* *@brief 根據程序名終止程序 @param lpProcessName程序名稱 */ BOOL __getProcessHandle(LPCTSTR lpProcessName)//根據程序名查詢程序PID { BOOL processExist = true; HANDLE hSnapShot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnapShot == INVALID_HANDLE_VALUE) return processExist; PROCESSENTRY32 pe32;//宣告程序入口物件 pe32.dwSize = sizeof(PROCESSENTRY32);//填充程序入口物件大小 ::Process32First(hSnapShot, &pe32);//遍歷程序列表 do { if (!lstrcmp(pe32.szExeFile, lpProcessName))//查詢指定程序名的PID { HANDLE hGUI = OpenProcess(PROCESS_ALL_ACCESS, true, pe32.th32ProcessID); if (NULL == hGUI) return processExist; TerminateProcess(hGUI, 0); processExist = false; break; } } while (::Process32Next(hSnapShot, &pe32)); ::CloseHandle(hSnapShot); return processExist;//返回 }
相關推薦
win32根據程序名獲取程序ID或者終止程序
第一部分: 根據程序名獲取程序ID。 首先我們需要了解三個windows API函式: HANDLE WINAPI CreateToolhelp32Snapshot( DWORD dwFlags, DWORD th32ProcessID ); CreateTo
【MFC】-005 根據程序名獲取程序ID
【MFC】-005 根據程序名獲取程序ID 【MFC】-005 根據程序名獲取程序ID 1、由來 2、實現 3、注意 1、由來 在使用TrackIR5進行位姿跟蹤時,使用網上
linux根據埠號,或程序名獲取程序pid
列出誰在使用某個埠 lsof -i :3306 lsof(list open files)是一個列出當前系統開啟檔案的工具。在linux環境下,任何事物都以檔案的形式存在,通過檔案不僅僅可以訪問常規資料,還可以訪問網路連線和硬體。11 [[email protected] w
根據程序名獲取窗體名
#include <windows.h> #include <tlhelp32.h> #include <stdio.h> #include <string> using namespace std; DWORD GetPro
由程序名獲取程序ID及其主執行緒ID
1 說明 Windows環境 此處程序名是指程序可執行檔案的名稱(工作管理員程序列表中顯示的映像名稱),如notepad.exe。 Windows中沒有直接可用的相關函式,實現思路為使用CreateToolhelp32Snapshot函式建立程序或執行緒快
linux 根據 程序名 獲取 對應 PID 來 判斷 使用 記憶體情況
#!/bin/bashPID=$(ps -A |grep "java"| awk '{print $1}') if (( PID < 1 )) then /etc/init.d/elasticsearch restart fi cat /proc/$PID/stat
C++通過程序名獲取程序控制代碼
記錄下一段,比較常用的程式碼。 // 強殺定期刪除程序 void CDogThread::Quit() { // 結束強殺定期刪除程序 HANDLE hProcess = GetProcessHa
AutoIt3 使用程序名獲取視窗控制代碼
背景 需要用AutoIt3控制QQ音樂播放器,首先要獲取QQ音樂的視窗控制代碼 問題 WinGetHandle方法不能滿足要求 QQ音樂的Title會根據當前播放的歌曲動態改變
通過程序名獲取程序PID
/*用CreateToolhelp32Snapshot進行對系統所有程序進行快照,然後利用Process32First取得第一個程序控制代碼,然後把得到的PROCESSENTRY32結構體中的szExeFile就是程序名進行比較,利用Process32Next進行迴圈比較,具
java 反射機制--根據屬性名獲取屬性值
obj popu null tail tools pop 對象 href pro 1.考慮安全訪問範圍內的屬性,沒有權限訪問到的屬性不讀取 [java] view plain copy /** * 根據屬性名獲取屬性值 * *
** * 根據屬性名獲取屬性值 * * @aram fie理直氣壯休假去高薪亦難換
jar 擴展 初始 task 圖片 休假 北京 不同 public Allure 是一個reor框架,支持多語言,多平臺。可以通過JuniTesngyes等產生的結果集生成酷炫好看的reor;同時也可以支持自定義字段,將你想展示 本文基於幾篇經典的論文,對 Aenion 模
python 根據標籤名獲取標籤內容
import re import json import requests from bs4 import BeautifulSoup import lxml.html from lxml import etree result = requests.get('http://example.w
安卓高德地圖API根據城市名獲取對應的經緯度和地理編碼
private void getLatlon(String cityName){ GeocodeSearch geocodeSearch=new GeocodeSearch(con
【程式】Windows下根據計算機名獲取IP地址的C語言程式
方法一(當指定的裝置不存在時,有可能返回的是本機的IP地址,所以不建議使用): #include <stdio.h> #include <WinSock2.h> #pragm
根據主機名獲取PC的IP地址
<?php$host_name=array();for($i=1;$i<=6;$i++){ $host_name[$i]="pc".$i; //所在區域網的PC由PC1~PC6命名
利用Java反射根據屬性名獲取物件值和型別程式碼
/** * 通過屬性名獲取物件值 * @param mp 要操作的物件 這裡以MoveProgress 為例子 * @param vill 要獲取值的欄位名 * @return * @throws Exception
根據計算機名獲取其IP
Dim ControllerInfo As IPHostEntry = Dns.GetHostByName(controllerName) Dim Controller
sql根據表名獲取欄位及對應說明型別長度
SELECT "表名" = OBJECT_NAME(c.object_id), "列名" = c.name, "描述"= ex.value, "型別"=t.name, "長度"=c.max_length FROM sys.columns c LEFT OU
SQL獲取SQL Server 根據表名獲取表的所有列及屬性
select c.name as [欄位名],t.name as [欄位型別] ,convert(bit,c.IsNullable) as [可否為空] ,convert(bit,case when exists(select 1 from sysobjects where xty
根據印表機名獲取印表機相關引數
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Co