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

<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

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

请各位高手指点,谢谢!

下面是代码:

#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; }}

<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 728x15, 创建于 08-4-23MSDN */ google_ad_slot = "3624277373"; google_ad_width = 728; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"><!-- google_ad_client = "pub-2947489232296736"; /* 160x600, 创建于 08-4-23MSDN */ google_ad_slot = "4367022601"; google_ad_width = 160; google_ad_height = 600; //--> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
阅读更多
个人分类: VC和VC++
想对作者说点什么? 我来说一句

进程管理器-易语言源码

2009年09月01日 1.16MB 下载

基于windows sdk实现进程管理器

2010年04月20日 1.2MB 下载

进程管理器,运行管理

2009年05月12日 1.81MB 下载

C#简单进程管理器(附源码)

2007年10月13日 347KB 下载

高级进程管理器

2011年10月23日 974KB 下载

Windows 进程管理器 4.00

2010年11月29日 1.79MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭