C++、MFC创建进程管理器的代码

#include "stdio.h"
#include "Process.h"
#include "stdafx.h"
#include "进程管理.h"
#include "进程管理Dlg.h"
#include "tlhelp32.h"
#include<windows.h>

 

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
 CAboutDlg();
 
// Dialog Data
 //{{AFX_DATA(CAboutDlg)
 enum { IDD = IDD_ABOUTBOX };
 //}}AFX_DATA

 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CAboutDlg)
 protected:
 virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
 //}}AFX_VIRTUAL

// Implementation
protected:
 //{{AFX_MSG(CAboutDlg)
 //}}AFX_MSG

 DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
 //{{AFX_DATA_INIT(CAboutDlg)
 //}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CAboutDlg)
 //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
 //{{AFX_MSG_MAP(CAboutDlg)
  // No message handlers
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/
// CMyDlg dialog

CMyDlg::CMyDlg(CWnd* pParent )
 : CDialog(CMyDlg::IDD, pParent)
{
 //{{AFX_DATA_INIT(CMyDlg)
 //}}AFX_DATA_INIT
 // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CMyDlg)
 DDX_Control(pDX, ID_VIEW_LIST, m_view);
 DDX_Control(pDX, IDOK, m_ok);
 DDX_Control(pDX, IDC_KILL, m_kill);
 DDX_Control(pDX, IDC_GET, m_get);
 DDX_Control(pDX, IDC_CREAT, m_creat);
 //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
 //{{AFX_MSG_MAP(CMyDlg)
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()
 ON_BN_CLICKED(IDC_CREAT, OnCreat)
 ON_BN_CLICKED(IDC_GET, OnGet)
 ON_BN_CLICKED(IDC_KILL, OnKill)
 ON_EN_CHANGE(IDC_EDIT_NUM, OnChangeEditNum)
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/
// CMyDlg message handlers

BOOL CMyDlg::OnInitDialog()
{
 CDialog::OnInitDialog();

 // Add "About..." menu item to system menu.

 // IDM_ABOUTBOX must be in the system command range.
 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
 ASSERT(IDM_ABOUTBOX < 0xF000);

 CMenu* pSysMenu = GetSystemMenu(FALSE);
 if (pSysMenu != NULL)
 {
  CString strAboutMenu;
  strAboutMenu.LoadString(IDS_ABOUTBOX);
  if (!strAboutMenu.IsEmpty())
  {
   pSysMenu->AppendMenu(MF_SEPARATOR);
   pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  }
 }

 // Set the icon for this dialog.  The framework does this automatically
 //  when the application's main window is not a dialog
 SetIcon(m_hIcon, TRUE);   // Set big icon
 SetIcon(m_hIcon, FALSE);  // Set small icon
 
 // TODO: Add extra initialization here
 
 return TRUE;  // return TRUE  unless you set the focus to a control
}

void CMyDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
 if ((nID & 0xFFF0) == IDM_ABOUTBOX)
 {
  CAboutDlg dlgAbout;
  dlgAbout.DoModal();
 }
 else
 {
  CDialog::OnSysCommand(nID, lParam);
 }
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CMyDlg::OnPaint()
{
 if (IsIconic())
 {
  CPaintDC dc(this); // device context for painting

  SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

  // Center icon in client rectangle
  int cxIcon = GetSystemMetrics(SM_CXICON);
  int cyIcon = GetSystemMetrics(SM_CYICON);
  CRect rect;
  GetClientRect(&rect);
  int x = (rect.Width() - cxIcon + 1) / 2;
  int y = (rect.Height() - cyIcon + 1) / 2;

  // Draw the icon
  dc.DrawIcon(x, y, m_hIcon);
 }
 else
 {
  CDialog::OnPaint();
 }
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMyDlg::OnQueryDragIcon()
{
 return (HCURSOR) m_hIcon;
}

void CMyDlg::OnCreat()
{
 // TODO: Add your control notification handler code here
 char chPath[301];
 ::GetCurrentDirectory(300,(LPTSTR)chPath);//得到当前目录
   char path[200]= "//123.exe";
   strcat(chPath,path);
   PROCESS_INFORMATION pi;
   STARTUPINFO   startinfo;  
           
 memset(&startinfo,0,sizeof(startinfo));  
 startinfo.cb=sizeof(startinfo);  

  
   ZeroMemory( &pi, sizeof(pi) );

  
   ZeroMemory( &startinfo, sizeof(startinfo) );
  
   startinfo.cb = sizeof(startinfo);

   if(!CreateProcess(NULL,"/"regedit",  NULL, NULL, FALSE, 0, NULL, NULL, &startinfo, &pi)){
    AfxMessageBox("创建进程失败!");//C://Program Files//Internet Explorer//iexplore.exe/"www.yahoo.com
    return;//即将创建命令行cmd进程。
   }
   CMyDlg::OnGet();//注意:这句话用来创建进程后刷新进程列表。不用手动刷新。
 
   MessageBox("创建“regedit注册表进程”成功!");
   CloseHandle( pi.hProcess );
   CloseHandle( pi.hThread );
}

void CMyDlg::OnOK()
{
 // TODO: Add extra validation here
 
 CDialog::OnOK();//退出按钮
}

void CMyDlg::OnGet()
{
 // TODO: Add your control notification handler code here
 m_view.ResetContent();
 PROCESSENTRY32 pe32;
    pe32.dwSize=sizeof(pe32);

    HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

    BOOL bMore=::Process32First(hProcessSnap,&pe32);


    while(bMore)//遍历进程,获取并显示
    {
    int nIndex = m_view.AddString(pe32.szExeFile);
  
    m_view.SetItemDataPtr(nIndex,new int(pe32.th32ProcessID));
          bMore=::Process32Next(hProcessSnap,&pe32);
    }
 
    ::CloseHandle(hProcessSnap);
 
}

void CMyDlg::OnKill()
{
 // TODO: Add your control notification handler code here
 int nIndex = m_view.GetCurSel();//获得选中的Index
 CString name;
 m_view.GetText(nIndex,name);//获得选中进程名


 PROCESSENTRY32* processInfo=new PROCESSENTRY32;
 processInfo->dwSize=sizeof(PROCESSENTRY32);

 PROCESSENTRY32 id;//定义结束进程的ID
    id.dwSize=sizeof(id);

    HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

 


    BOOL bMore=::Process32First(hProcessSnap,&id);
 MessageBox("你要结束/""+name+"/"进程吗!");
    while(bMore)//筛选要结束的ID
    {

  if(id.szExeFile == name){
   HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,id.th32ProcessID);
   if(TerminateProcess(hProcess,1)){
    MessageBox("成功结束");
   }
   else
    MessageBox("失败");
   CloseHandle(hProcess);
   delete processInfo;
   delete(int*)m_view.GetItemDataPtr(nIndex);
   m_view.DeleteString(nIndex);
   }
  bMore=::Process32Next(hProcessSnap,&id);
 }

 ::CloseHandle(hProcessSnap);

 
}

void CMyDlg::OnChangeEditNum()
{
 
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值