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

简介: 其实对于 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
);

第一个参数的取值

Value Meaning
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++ ; 
 }
}

 

 

 

 

 

 

目录
相关文章
|
23天前
麒麟系统mate-indicators进程占用内存过高问题解决
【10月更文挑战第7天】麒麟系统mate-indicators进程占用内存过高问题解决
110 2
|
29天前
|
Java 关系型数据库 MySQL
java控制Windows进程,服务管理器项目
本文介绍了如何使用Java的`Runtime`和`Process`类来控制Windows进程,包括执行命令、读取进程输出和错误流以及等待进程完成,并提供了一个简单的服务管理器项目示例。
30 1
|
2月前
|
监控
MASM32写的免费软件“ProcView/系统进程监控” V1.4.4003 说明和下载
MASM32写的免费软件“ProcView/系统进程监控” V1.4.4003 说明和下载
|
25天前
麒麟系统mate-indicators进程占用内存过高问题解决
【10月更文挑战第5天】麒麟系统mate-indicators进程占用内存过高问题解决
99 0
|
2月前
|
监控 Ubuntu API
Python脚本监控Ubuntu系统进程内存的实现方式
通过这种方法,我们可以很容易地监控Ubuntu系统中进程的内存使用情况,对于性能分析和资源管理具有很大的帮助。这只是 `psutil`库功能的冰山一角,`psutil`还能够提供更多关于系统和进程的详细信息,强烈推荐进一步探索这个强大的库。
40 1
|
2月前
|
安全 开发者 Python
揭秘Python IPC:进程间的秘密对话,让你的系统编程更上一层楼
【9月更文挑战第8天】在系统编程中,进程间通信(IPC)是实现多进程协作的关键技术。IPC机制如管道、队列、共享内存和套接字,使进程能在独立内存空间中共享信息,提升系统并发性和灵活性。Python提供了丰富的IPC工具,如`multiprocessing.Pipe()`和`multiprocessing.Queue()`,简化了进程间通信的实现。本文将从理论到实践,详细介绍各种IPC机制的特点和应用场景,帮助开发者构建高效、可靠的多进程应用。掌握Python IPC,让系统编程更加得心应手。
30 4
|
2月前
|
监控 API
【原创】用Delphi编写系统进程监控程序
【原创】用Delphi编写系统进程监控程序
|
3月前
|
Java Windows
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
|
3月前
|
Linux Python
在Linux中,如何查找系统中占用CPU最高的进程?
在Linux中,如何查找系统中占用CPU最高的进程?
|
3月前
|
Linux
在Linux中,如何查看系统上运行的进程?
在Linux中,如何查看系统上运行的进程?