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

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </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"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值