日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

模拟windows任务管理器列举系统进程,并关闭进程......

發布時間:2024/4/17 windows 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模拟windows任务管理器列举系统进程,并关闭进程...... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

其實對于 windows進程的操作很簡單,只要理解了 進程線程的概念 對于 進程的操作 那么就只是 幾個函數的 問題了? 。

下面是 對于進程操作要用到的幾個函數 。

進程的概念:我們運行了一個程序,那個這個獨立的程序就是一個進程。進程有自己的私有地址空間,進程中的線程共享這些私有地址空間 。

在一個進程中多個線程共同完成一項功能,可以提高工作的效率。?

HANDLE WINAPI CreateToolhelp32Snapshot(?????//這個函數創建一個系統進程列表的快照 并返快照的句柄 用于操作??
? DWORD
dwFlags,??????
? DWORD
th32ProcessID?
);

BOOL WINAPI Process32First(???//根據進程快照句柄檢索快照列表中?第一個進程
? HANDLE
hSnapshot,?????
? LPPROCESSENTRY32
lppe?
);

BOOL WINAPI Process32Next(?? //根據進程快照句柄 循環檢索進程信息 。。
? HANDLE
hSnapshot,?????
? LPPROCESSENTRY32
lppe?
);

HANDLE OpenProcess(???????????????????????????????????? //給定一個進程ID 我們可以打開并且獲取句柄? 用于 ReadProcessMemory? WriteProcessMemory 等等的線程插入使用
? DWORD
dwDesiredAccess,? // access flag
? BOOL bInheritHandle,??? // handle inheritance option
? DWORD dwProcessId?????? // process identifier
);

BOOL TerminateProcess(??????????????????????????????//根據指定進程句柄關閉進程
? HANDLE
hProcess, // handle to the process?
? UINT uExitCode // exit code for the process

);

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;
typedef PROCESSENTRY32 *PPROCESSENTRY32;

?

BOOL ExitWindowsEx(
? UINT
uFlags,???? // shutdown operation
? DWORD dwReason?? // shutdown reason
);

第一個參數的取值

ValueMeaning
EWX_LOGOFF注銷
EWX_POWEROFF

斷電.

EWX_REBOOT

重啟.

EWX_SHUTDOWN
休眠

下面是一段例子代碼?? 在SDI下測試運行?? 在視圖類中定義一個 CListCtrl類的對象c?

然后定義一個 進程信息類

class ProcessInfo
{
public:
?ProcessInfo(){index=0 ;}
?int index ;
?DWORD hArray[100] ;
};

這些都放在視圖的操作中 ,如果這些做完了 那么就相應copy下面的代碼

?

?

void CMyView::OnInitialUpdate()?? //視圖初始化.....?
{
?CView::OnInitialUpdate();
?GetDocument()->SetTitle("系統進程查看器--MadeBy小衛") ;
?? InitProcessist() ;


}

void CMyView::OnKiilprocess()?? //查殺進程?
{
?? POSITION ps=c.GetFirstSelectedItemPosition();
?? if (ps==NULL)
?? {
??? exit(0) ;
?? }
? int item=c.GetNextSelectedItem(ps) ;
? HANDLE pt=OpenProcess(PROCESS_ALL_ACCESS,FALSE,f.hArray[item]) ;? //打開進程
? TerminateProcess(pt,0) ;? //查殺進程
? InitProcessist();//初始化列表

}

void CMyView::InitProcessist()
{
?int index=0 ;
?CString in ;?
?
?if(c.m_hWnd==NULL)
?{
?c.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_SINGLESEL ,CRect(0,0,600,500), this, 1);
?c.InsertColumn(0,"進程地址",LVCFMT_LEFT,350) ;
?c.InsertColumn(0,"進程ID",LVCFMT_LEFT,250) ;
?c.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_ONECLICKACTIVATE)? ;
?}
?else
?{
??c.DeleteAllItems() ;
??ZeroMemory(&f,sizeof(f)) ;
?}
?HANDLE sh=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)? ;//返回包含進程列表的?
?PROCESSENTRY32 pinfo; //進程信息結構體
?BOOL check=Process32First(sh,&pinfo) ; //檢索進程快照列表中的第一個 進程
?if (check)
?{??
??in.Format("%d",pinfo.th32ParentProcessID) ; //格式換文本
??c.InsertItem(index,in) ;
??c.SetItemText(index,1,pinfo.szExeFile) ;? //設置子項文本
??f.hArray[f.index]=pinfo.th32ProcessID? ;//保存進程ID
??f.index++;
??index++ ;
?}
?
?
?while(Process32Next(sh,&pinfo))?? //如果快照列表存在 那么繼續搜索
?{
??in.Format("%d",pinfo.th32ParentProcessID) ;
??c.InsertItem(index,in) ;
??c.SetItemText(index,1,pinfo.szExeFile) ;
??f.hArray[f.index]=pinfo.th32ProcessID? ;//保存進程ID
??f.index++;
??index++ ;?
?}
}

?

?

?

?

?

?

轉載于:https://www.cnblogs.com/mosatsu/archive/2012/01/18/2466817.html

總結

以上是生活随笔為你收集整理的模拟windows任务管理器列举系统进程,并关闭进程......的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。