亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

VC下通過系統快照實現進程管理的方法

2020-01-26 15:12:34
字體:
來源:轉載
供稿:網友

本文實例講述了VC下通過系統快照實現進程管理的方法,分享給大家供大家參考。具體實現方法如下:

一、引言

  每一個應用程序實例在運行起來后都會在當前系統下產生一個進程,大多數應用程序均擁有可視界面,用戶可以通過標題欄上的關閉按鈕關閉程序。但是也有為數不少的在后臺運行的程序是沒有可視界面的,對于這類應用程序用戶只能通過CTRL+ALT+DEL熱鍵呼出"關閉程序"對話框顯示出當前系統進程列表,從中可以結束指定的任務。顯然,該功能在一些系統監控類軟件中還是非常必需的,其處理過程大致可以分為兩步:借助系統快照實現對系統當前進程的枚舉和根據枚舉結果對進程進行管理。本文下面即將對此過程的實現進行介紹。

二、當前進程的枚舉

  要對當前系統所有已開啟的進程進行枚舉,就必須首先獲得那些加載到內存的進程當前相關狀態信息。在Windows操作系統下,這些進程的當前狀態信息不能直接從進程本身獲取,系統已為所有保存在系統內存中的進程、線程以及模塊等的當前狀態的信息制作了一個只讀副本--系統快照,用戶可以通過對系統快照的訪問完成對進程當前狀態的檢測。在具體實現時,系統快照句柄的獲取是通過Win32 API函數CreateToolhelp32Snapshot()來完成的,通過該函數不僅可以獲取進程快照,而且對于堆、模塊和線程的系統快照同樣可以獲取。該函數原型聲明如下:

復制代碼 代碼如下:
HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags,DWORD th32ProcessID);

  其中,參數dwFlags:指定將要創建包含哪一類系統信息的快照句柄,本程序中只需要檢索系統進程信息,因此可將其設置為 TH32CS_SNAPPROCESS;函數第二個參數th32ProcessID`則指定了進程的標識號,當設置為0時指定當前進程。如果成功函數將返回一個包含進程信息的系統快照句柄。在得到快照句柄之后只能以只讀的方式對其進行訪問。至于對系統快照句柄的使用同普通對象句柄的使用并沒有什么太大區別,在使用完之后也需要通過CloseHandle()函數將其銷毀。
  在得到系統的快照句柄后,就可以對當前進程的標識號進行枚舉了,通過這些枚舉出的進程標識號可以很方便的對進程進行管理。進程標識號通過函數 Process32First() 和 Process32Next()而得到,這兩個函數可以枚舉出系統當前所有開啟的進程,并且可以得到相關的進程信息。 這兩個函數原型聲明如下:

復制代碼 代碼如下:
BOOL WINAPI Process32First(HANDLE hSnapshot, LPPROCESSENTRY32 lppe);
BOOL WINAPI Process32Next(HANDLE hSnapshot,LPPROCESSENTRY32 lppe);

  以上兩個函數分別用于獲得系統快照中第一個和下一個進程的信息,并將獲取得到的信息保存在指針lppe所指向的PROCESSENTRY32結構中。函數第一個參數hSnapshot為由CreateToolhelp32Snapshot()函數返回得到的系統快照句柄;第二個參數lppe為指向結構 PROCESSENTRY32的指針,PROCESSENTRY32結構可對進程作一個較為全面的描述,其定義如下:

復制代碼 代碼如下:
typedef struct tagPROCESSENTRY32 {
DWORD dwSize; // 結構大??;
DWORD cntUsage; // 此進程的引用計數;
DWORD th32ProcessID; // 進程ID;
DWORD th32DefaultHeapID; // 進程默認堆ID;
DWORD th32ModuleID; // 進程模塊ID;
DWORD cntThreads; // 此進程開啟的線程計數;
DWORD th32ParentProcessID; // 父進程ID;
LONG pcPriClassBase; // 線程優先權;
DWORD dwFlags; // 保留;
char szExeFile[MAX_PATH]; // 進程全名;
} PROCESSENTRY32;

  以上三個API函數均在頭文件tlhelp32.h中聲明,運行時需要有kernel32.lib庫的支持。通過這三個函數可以枚舉出當前系統已開啟的所有進程,并可獲取到進程的各相關信息,下面給出一個簡單的應用示例。在此示例中將枚舉出系統的所有進程,并獲取各進程的標識號和相應程序的絕對路徑,進程標識號在下一步對進程的管理中將要用到,程序路徑則直接通過列表控件顯示出來:

復制代碼 代碼如下:
// PROCESSENTRY32結構對象
PROCESSENTRY32 pe;
// 創建快照句柄
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
// 先搜索系統中第一個進程的信息
Process32First(hSnapshot, &pe);
// 下面對系統中的所有進程進行枚舉,并保存其信息
do{
// 把進程對應的文件路徑名填入列表框
int index = m_ctlwndList.AddString(pe.szExeFile);
// 設置列表框中該項的Data相應的進程的ID號,利于以后終止該進程
m_ctlwndList.SetItemData(index, pe.th32ProcessID);
} while (Process32Next(hSnapshot, &pe));
// 關閉快照句柄
CloseHandle(hSnapshot);

三、對進程的管理

  在得到各枚舉進程的標識號后就可以實現對進程的管理了,由于被管理進程在當前進程之外,因此必須首先通過OpenProcess()函數來獲取一個已經存在的進程對象的句柄,然后才可以通過該句柄對指定的進程進行管理和控制。在OpenProcess()函數的調用時把進程標識號作為參數傳入, OpenProcess()函數的原型聲明如下:

復制代碼 代碼如下:
HANDLE OpenProcess(DWORD dwDesiredAccess, // 訪問標志
BOOL bInheritHandle, // 處理繼承的標志
DWORD dwProcessId // 進程標識號);


  如果函數執行成功將返回由進程標識號指定的進程對象句柄。下面同樣也對其給出一個簡單的應用示例,在此示例中根據所獲取的進程對象句柄通過TerminateProcess()函數將指定的進程終止:

復制代碼 代碼如下:
// 獲得此時列表框中的所選項的數據,即該項對應的進程的ID值
int index = m_ctlwndList.GetCurSel();
// 獲得此時列表框中的選項,即該項對應的進程的ID值
DWORD data = m_ctlwndList.GetItemData(index);
// 利用進程的ID值,打開該進程,獲得進程句柄
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE,data);
// 檢測句柄的有效性,如有效則終止該進程
if (hProcess)
TerminateProcess(hProcess,0);

  由于需要在調用TerminateProcess()函數終止進程時確保進程句柄可有效使用,因此在前面調用OpenProcess()時,需要指定其訪問標致為PROCESS_TERMINATE。

四、小結

  本文主要對系統快照以及通過借助系統快照而對系統當前進程進行枚舉、管理的實現方法做了簡要介紹。在本文只討論了包含有進程信息的系統快照,感興趣的讀者完全可以用類似的方法實現對包含有線程、堆或是摸塊等信息的系統快照的應用。本文所述程序在Windows 98下由Microsoft Visual C++ 6.0編譯通過。

希望本文所述對大家的VC程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产69精品久久久久9999| 亚洲激情视频在线播放| 国产成人免费av电影| 亚洲最大中文字幕| 日本一区二区三区在线播放| 国产一区二区三区在线观看网站| 国产精品自拍偷拍视频| 国产精品无码专区在线观看| 色综合91久久精品中文字幕| 欧美日韩国产一区中文午夜| 色噜噜狠狠色综合网图区| 国产亚洲欧美aaaa| 动漫精品一区二区| 成人国内精品久久久久一区| 久久97精品久久久久久久不卡| 成人性教育视频在线观看| 久久影视电视剧免费网站清宫辞电视| 日韩精品视频在线免费观看| 成人情趣片在线观看免费| 亚洲欧美精品一区二区| 国产日韩一区在线| 久久国产精品久久国产精品| 久久99国产精品自在自在app| 精品亚洲国产成av人片传媒| 亚洲男人天天操| 永久免费精品影视网站| 日韩免费高清在线观看| 26uuu国产精品视频| 热久久视久久精品18亚洲精品| 久久精品国产91精品亚洲| 欧美电影在线观看网站| 91欧美激情另类亚洲| 中文字幕欧美在线| 成人久久久久爱| 91欧美视频网站| 国产精品无av码在线观看| 国产精品电影在线观看| 精品女同一区二区三区在线播放| 在线观看欧美视频| 在线日韩欧美视频| 精品国产一区二区三区在线观看| 国产精品久久久亚洲| 亚洲最大福利网站| 久久电影一区二区| 国产91ⅴ在线精品免费观看| 欧美黑人极品猛少妇色xxxxx| 久久久久久久久久久久久久久久久久av| 欧美与欧洲交xxxx免费观看| 成人免费在线视频网址| 97久久久免费福利网址| 欧美一区二区影院| 欧美一级视频一区二区| 中文字幕在线亚洲| 欧美一级淫片aaaaaaa视频| 国产亚洲精品成人av久久ww| 亚洲精品av在线播放| 91免费电影网站| 日韩欧美中文字幕在线观看| 91精品久久久久久久久中文字幕| 日韩免费在线免费观看| 国产亚洲美女久久| 欧美激情精品久久久久久蜜臀| 91亚洲国产精品| 国产精品久久久久免费a∨| 亚洲人成在线电影| 国产又爽又黄的激情精品视频| 亚洲高清av在线| 色琪琪综合男人的天堂aⅴ视频| 影音先锋日韩有码| 亚洲欧美另类中文字幕| 91九色蝌蚪国产| 亚洲欧洲在线视频| 日韩欧美国产中文字幕| 欧美日韩亚洲网| 国内精品国产三级国产在线专| 午夜精品99久久免费| 日韩网站免费观看| 一区二区三区美女xx视频| 97精品国产aⅴ7777| 亚洲成人精品久久| 91高潮在线观看| 久久久人成影片一区二区三区观看| 久久久久久久国产精品| 国产在线观看一区二区三区| 欧美精品亚州精品| 日本成人免费在线| 91精品国产自产91精品| 日韩在线免费观看视频| 久久久国产在线视频| 国产91ⅴ在线精品免费观看| 国产精品自产拍在线观看中文| 国产一区二区色| 国内外成人免费激情在线视频| 色综合男人天堂| 欧美成人精品在线观看| 欧美一区二区.| 成人av在线天堂| 日韩电视剧在线观看免费网站| 91精品国产高清久久久久久| 久久久久久伊人| 一区二区在线免费视频| 91精品国产自产在线| 亚洲精品中文字| 欧美一级黑人aaaaaaa做受| 日韩在线视频线视频免费网站| 国产精品久久久久久久午夜| 精品久久久香蕉免费精品视频| 久久躁日日躁aaaaxxxx| 亚洲第一福利网| 亚洲白虎美女被爆操| 亚洲2020天天堂在线观看| 日韩av理论片| 国产91成人在在线播放| 精品亚洲国产视频| 亚洲另类图片色| 色综合五月天导航| 国产精品三级网站| 亚洲成人久久电影| 久久韩剧网电视剧| 国产在线a不卡| 成人网在线免费观看| 久久久噜久噜久久综合| 日韩高清电影好看的电视剧电影| 亚洲国产精彩中文乱码av在线播放| 日韩黄在线观看| 日本精品久久久| 亚洲国模精品一区| 91欧美精品成人综合在线观看| 夜夜嗨av色综合久久久综合网| 亚洲激情视频网站| 91国自产精品中文字幕亚洲| 亚洲精品中文字幕女同| 永久免费毛片在线播放不卡| 亚洲一区二区自拍| 成人a在线视频| 国产99久久精品一区二区| 国产精品欧美在线| 国产精品大陆在线观看| 91久久国产婷婷一区二区| 国产精品电影在线观看| 久久久精品2019中文字幕神马| 国产在线精品成人一区二区三区| 4438全国成人免费| 欧美www在线| 一个人看的www久久| 亚洲欧美日韩一区在线| 中文字幕精品—区二区| 久久天天躁夜夜躁狠狠躁2022| 正在播放亚洲1区| 日韩激情片免费| 欧美在线视频免费| 成人免费网站在线| 久久久免费观看视频| 亚洲美女精品成人在线视频| 成人有码在线视频| 久久久999精品| 日本精品免费观看| 欧美片一区二区三区| 国产亚洲精品成人av久久ww| 国产婷婷成人久久av免费高清| 精品久久久久国产| 中文字幕日韩视频| 1769国内精品视频在线播放| 精品欧美国产一区二区三区|