进程管理器---一个SDK的例子

原创 2004年07月13日 12:18:00

我刚学习SDK编程,想编一个SDK编的进程管理器,可是网上都没有,只好自己写了。不足之处,

请各位高手指点,谢谢!

下面是代码:

编译前在project setting ->link->object /library module中添加comctl32.lib Psapi.lib这两个库。

process.cpp:

#include <windows.h>
#include <commdlg.h>
#include <commctrl.h>
#include "resource.h"
#include <Tlhelp32.h>
#include <stdio.h>
#include "psapi.h"
BOOL    Init( HWND );
void    RefreshProcess(HWND );
BOOL    EndProcess(HWND);
LRESULT CALLBACK  Test(HWND , UINT , WPARAM , LPARAM);
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
  // TODO: Place code here.
 InitCommonControls();

 DialogBox(NULL , (LPCTSTR)IDD_DIALOG , NULL ,(DLGPROC)Test);

 return 1;
}

LRESULT CALLBACK  Test(HWND hDlg , UINT message , WPARAM wParam , LPARAM lParam)
{
 
 switch(message)
  {
  case WM_INITDIALOG:
       Init(hDlg);           
       return TRUE;
  case WM_COMMAND:
   switch(LOWORD(wParam))
   {case IDCANCEL:
    EndDialog(hDlg,0);
    KillTimer(hDlg,1000);
    return TRUE;
    break;
    case IDOK:
    return(EndProcess(hDlg));
    break;
    case  IDREFRESH:
    RefreshProcess(hDlg);
    return TRUE;
    break;

 

   }
 
 
  }
 return FALSE;
}

/************************************************************************/
/*  刷新进程        入口参数 对话框句柄          */     
/*                                                                     */
/************************************************************************/

 

void   RefreshProcess(HWND hDlg)
{
 HANDLE  hSnapshot,h_Process;
 PROCESSENTRY32 pe;
 char  lpszAdd[255];
 int  nIndex;
 DWORD  Memory;
 LVITEM  Lv;
 PROCESS_MEMORY_COUNTERS  PMC;
 pe.dwSize = sizeof(pe);
 hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 Process32First( hSnapshot, &pe);
 sprintf(lpszAdd,"%s",pe.szExeFile);
 Lv.mask         = LVIF_TEXT;
 Lv.iItem        = 0;
 Lv.iSubItem     = 0;
 Lv.pszText = lpszAdd;
 SendDlgItemMessage(hDlg , IDC_LISTVIEW , LVM_DELETEALLITEMS, 0 , 0);
 SendDlgItemMessage(hDlg, IDC_LISTVIEW, LVM_INSERTITEM , 0,  (LPARAM)&Lv);
 sprintf(lpszAdd,"%i",pe.th32ProcessID);
 Lv.iSubItem = 1;
 SendDlgItemMessage(hDlg, IDC_LISTVIEW, LVM_SETITEM , 0, (LPARAM)&Lv);
 sprintf(lpszAdd,"%i",pe.pcPriClassBase);
 Lv.iSubItem = 2;
 SendDlgItemMessage(hDlg, IDC_LISTVIEW, LVM_SETITEM , 0, (LPARAM)&Lv);
 //system process 的内存始终是20K
 Memory = 20;
 sprintf(lpszAdd,"%2i K",Memory);
 Lv.iSubItem = 3;
 SendDlgItemMessage(hDlg, IDC_LISTVIEW, LVM_SETITEM , 0, (LPARAM)&Lv);
 while( Process32Next(hSnapshot, &pe))
  {
  sprintf(lpszAdd,"%s",pe.szExeFile);
  Lv.iSubItem = 0;
  nIndex = SendDlgItemMessage(hDlg, IDC_LISTVIEW, LVM_INSERTITEM , 0,
         (LPARAM) &Lv);
  if( nIndex != -1)
   {
  
   Lv.iItem    = nIndex;
   Lv.iSubItem = 1;
   sprintf(lpszAdd,"%i",pe.th32ProcessID);
   SendDlgItemMessage(hDlg, IDC_LISTVIEW, LVM_SETITEM , 0,
                     (LPARAM)&Lv);
   Lv.iSubItem = 2;
   sprintf(lpszAdd,"%i",pe.pcPriClassBase);
   SendDlgItemMessage(hDlg, IDC_LISTVIEW, LVM_SETITEM , 0,
                     (LPARAM)&Lv);
   h_Process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ , FALSE , pe.th32ProcessID);
   //得到进程内存大小
   GetProcessMemoryInfo(h_Process , &PMC , sizeof(PMC));
   Memory = PMC.WorkingSetSize/1024;
   sprintf(lpszAdd,"%i K",Memory);
   Lv.iSubItem = 3;
   SendDlgItemMessage(hDlg, IDC_LISTVIEW, LVM_SETITEM , 0, (LPARAM)&Lv);
 
   }
  }
 
}

/*
/************************************************************************/
/*                  初始化函数,主要用来添加列表控件的列头              */
/************************************************************************/

 


BOOL   Init(HWND hDlg)
{
 LVCOLUMN lv;
 static char     *szText[]={"映像名称","PID","优先级","内存使用"};
 static int cx[]={100,100,80,120};
 int i = 0;
 for(i=0 ; i< 4 ;i++)
 {
 lv.mask       =  LVCF_TEXT|LVCF_WIDTH;
 if(i<2)
 lv.fmt       =  LVCFMT_LEFT;
 else
 lv.fmt       =  LVCFMT_RIGHT;
 lv.cx         =  cx[i];
 lv.pszText    =  szText[i];
 SendDlgItemMessage(hDlg,IDC_LISTVIEW,LVM_INSERTCOLUMN,(WPARAM)i,(LPARAM)&lv);
 }
 SendDlgItemMessage(hDlg,IDC_LISTVIEW , LVM_SETEXTENDEDLISTVIEWSTYLE , (WPARAM)LVS_EX_FULLROWSELECT,(LPARAM)LVS_EX_FULLROWSELECT);
 RefreshProcess(hDlg);
 return TRUE;
}

 

/************************************************************************/
/* 结束进程函数 ,用来结束列表视图中选定的进程                          */
/************************************************************************/

BOOL    EndProcess(HWND hDlg)
{
 int  hProcess  = SendDlgItemMessage(hDlg, IDC_LISTVIEW , LVM_GETNEXTITEM , -1, (LPARAM)MAKELPARAM((UINT)LVNI_SELECTED, 0));
 if (hProcess != -1)
 {
  LVITEM          Lv;
  char          Buffer[256];
  HANDLE          h_process;
  DWORD          ProcessId;
  BOOL   iRet;
  memset(Buffer,0,sizeof(Buffer));
  Lv.iSubItem = 1;
  Lv.pszText = Buffer;
  Lv.cchTextMax = sizeof(Buffer);
  SendDlgItemMessage(hDlg , IDC_LISTVIEW , LVM_GETITEMTEXT , (WPARAM)hProcess , (LPARAM)&Lv);
         ProcessId      = atol(Buffer);
  h_process      = OpenProcess(PROCESS_TERMINATE , NULL , ProcessId);
  if (h_process == NULL)
  {MessageBox(hDlg , "进程无法访问","错误",MB_OK);
   return FALSE;
  }
  else
  {
    if(MessageBox(hDlg ,"结束这个进程吗?","警告",MB_OKCANCEL)==IDOK)
    { iRet = TerminateProcess(h_process,0);
       if (!iRet)
        {MessageBox(hDlg,"结束进程失败","错误",MB_OK);
         return TRUE;
       }
       else
       {MessageBox(hDlg,"结束进程成功","成功",MB_OK);
       return FALSE;
       }
    
   }
    else
     return FALSE;

  }
 
 
 }
 else
 {return   FALSE;
 }
}

 


process.rc:

//Microsoft Developer Studio generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// Chinese (P.R.C.) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32

/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_DIALOG DIALOG DISCARDABLE  0, 0, 213, 262
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 10, "宋体"
BEGIN
    DEFPUSHBUTTON   "刷新",IDREFRESH,17,230,39,14
    PUSHBUTTON      "结束进程",IDOK,89,228,39,14
    CONTROL         "List1",IDC_LISTVIEW,"SysListView32",LVS_REPORT |
                    WS_BORDER | WS_TABSTOP,17,9,176,212
    PUSHBUTTON      "退出",IDCANCEL,159,228,39,14
END


/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
    IDD_DIALOG, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 206
        TOPMARGIN, 7
        BOTTOMMARGIN, 255
    END
END
#endif    // APSTUDIO_INVOKED


#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE DISCARDABLE
BEGIN
    "resource.h/0"
END

2 TEXTINCLUDE DISCARDABLE
BEGIN
    "#include ""afxres.h""/r/n"
    "/0"
END

3 TEXTINCLUDE DISCARDABLE
BEGIN
    "/r/n"
    "/0"
END

#endif    // APSTUDIO_INVOKED

#endif    // Chinese (P.R.C.) resources
/////////////////////////////////////////////////////////////////////////////

 

#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED

resource.h:

//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by Process.rc
//
#define IDD_DIALOG                      101
#define IDC_LISTVIEW                    1000
#define IDREFRESH                       1001

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        102
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1003
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

进程管理器---一个SDK的例子

  • zgqtxwd
  • zgqtxwd
  • 2008年04月27日 16:02
  • 156

Android SDK 管理器的一些心得

一、有的包需要反复安装才能开始下载         有的包是每次安装时都会弹出“Download interrupted: URL not found.”的提示,连续重复操作,7、8次后,终于开始开载...
  • jhycjhyc
  • jhycjhyc
  • 2015年09月21日 22:58
  • 2188

编写一个任务管理器/进程获取/PID获取

Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一) . 博客分类: Android中获取系统内存信息以及进程信息-----Activity...
  • sufjan
  • sufjan
  • 2012年06月22日 11:53
  • 1140

Android平台下实现一个进程管理器

Android平台下实现一个进程管理器   在本人的博客文章《枚举Android系统的进程、任务和服务的息》http://www.cnblogs.com/crazypebble/archive/...
  • gjy211
  • gjy211
  • 2016年08月22日 17:59
  • 688

C# 进程管理器

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin...
  • Godsight
  • Godsight
  • 2017年02月26日 22:01
  • 419

Linux进程管理器

linux平台上,使用java语言编写的任务管理器 源码地址工作原理在子进程里执行linux的shell命令,获取输出流,从输出流中解析数据,从而得到进程信息,实现管理进程任务。 实现的功能: 显示...
  • zf1228
  • zf1228
  • 2017年04月20日 09:46
  • 382

线程与进程的区别,举个例子让你快速理解

如果把CPU比喻成工厂,那么进程就是工厂中的车间,而线程就是车间中的机器......
  • zhao18933
  • zhao18933
  • 2015年06月30日 20:03
  • 2233

windows 7 系统进程服务详解(一)

windows 7已经发布有段时间了,相信很多网友都已经换上了传说中非常完美的win7系统.win7不仅继承而且还超越了vista的美观界面,性能优化方面也下足了功力.还拥有强大的win xp兼容...
  • yanjiaye520
  • yanjiaye520
  • 2012年08月08日 00:38
  • 1474

Windows程序设计(SDK)窗口过程---程序 的关闭

/* 程序的关闭: 点击右上角 叉叉按钮 会发送 WM_CLOSE消息 (如果 需要 判断 用户是否确定 关闭 需要 捕获 WM_CLOSE消息 然后询问 然后 IDYES后 就执行De...
  • u012997311
  • u012997311
  • 2015年04月09日 23:12
  • 482

Directx9 sdk中有用的例子-Demo说明

转自http://hi.baidu.com/lf460/item/f13775134d5f22affeded502 directx9sdk中有用的例 C:\DXSDK\...
  • sherry_0009
  • sherry_0009
  • 2013年12月21日 22:24
  • 1212
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:进程管理器---一个SDK的例子
举报原因:
原因补充:

(最多只允许输入30个字)