Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > Windows API 函数学习(13)---进程函数示例
【标  题】:Windows API 函数学习(13)---进程函数示例
【关键字】:Windows,API,13,---
【来  源】:http://blog.csdn.net/jh2005/archive/2007/04/09/1557813.aspx

Windows API 函数学习(13)---进程函数示例

Your Ad Here

 // ProcEnum.cpp : Defines the entry point for the application.
//本程序演示了如何列举系统进程,并且更改进程的优先级,结束进程
//控件:ListView,TrackBar控件的使用示例,其中资源是添加了两个对话框模板

#include "stdafx.h"
#include "resource.h"
#include <stdio.h>
#include <commctrl.h>
#include <Tlhelp32.h>
#include <stdlib.h>
#include <winbase.h>
#define BELOW_NORMAL_PRIORITY_CLASS 0x00004000;//定义两个优先级的级别
#define ABOVE_NORMAL_PRIORITY_CLASS 0x00008000;

HINSTANCE hInst;
DWORD ProcPri;
char temp[32];
HWND hProcList;
HWND hSlider;
DWORD dwPriority;
BOOL DlgProc (HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
LRESULT CALLBACK DlgProc2(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
void DisplayRuningProcess();
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
  // TODO: Place code here.
 INITCOMMONCONTROLSEX icex;
 icex.dwSize = sizeof(INITCOMMONCONTROLSEX);//初始化ListView控件
 icex.dwICC  = ICC_LISTVIEW_CLASSES;
    InitCommonControlsEx(&icex);
    hInst=hInstance;
 DialogBoxParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),0,(DLGPROC)DlgProc,(IDD_DIALOG1));
 return 0;
}
BOOL DlgProc (HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
 int lowID;
 char psTest[256];
 int index;
 char ProcID[16];
 HANDLE hProcess;
 switch (uMsg)
 {
      case WM_INITDIALOG:
         hProcList=CreateWindowEx (LVS_EX_FULLROWSELECT,WC_LISTVIEW, "",
   WS_VISIBLE|WS_CHILD | LVS_REPORT | LVS_EDITLABELS,
   10, 10, 340, 400,
   hWnd, (HMENU) ID_LISTVIEW, hInst, NULL); //创建ListView控件
   LVCOLUMN lvco;
   lvco.mask=LVCF_FMT|LVCF_TEXT|LVCF_SUBITEM|LVCF_WIDTH;
   lvco.pszText=psTest;
   lvco.cx=80;
   lvco.fmt=LVCFMT_CENTER;
   lvco.iSubItem=0;
         LoadString(hInst, IDS_ID, psTest, sizeof(psTest)); //设置表头文本

   ListView_InsertColumn(hProcList,0,&lvco);
         lvco.iSubItem=1;
  
   LoadString(hInst, IDS_PRI, psTest, sizeof(psTest));
   ListView_InsertColumn(hProcList,1,&lvco);
   lvco.iSubItem=2;
   lvco.cx=180;
   LoadString(hInst,IDS_PROCNAME,psTest,sizeof(psTest));
   ListView_InsertColumn(hProcList,2,&lvco);
   DisplayRuningProcess();
   break;
 case WM_COMMAND:
  lowID=LOWORD(wParam);
     switch(lowID)
  {
  case IDOK:
      EndDialog(hWnd,FALSE);
      break;
  case IDC_REFRESH:
   DisplayRuningProcess(); //刷新进程列表
   break;
  case IDC_KILLPROCESS:
           
   index=ListView_GetSelectionMark(hProcList);
   if(index==-1)
   {
    MessageBox(hWnd,"请选择要结束的进程","错误!",MB_OK);
    return 0;
   }
   ListView_GetItemText(hProcList,index,0,ProcID,sizeof(ProcID));
   hProcess=OpenProcess(PROCESS_TERMINATE,FALSE,atoi(ProcID));
   TerminateProcess(hProcess,0);
   DisplayRuningProcess();
   break;
  case IDC_SET:   //更改优先级
      index=ListView_GetSelectionMark(hProcList);
   
            if(index==-1)
   {
    MessageBox(hWnd,"请选择要结束的进程","错误!",MB_OK);
    return 0;
   }
   ListView_GetItemText(hProcList,index,0,ProcID,sizeof(ProcID));
   hProcess=OpenProcess(PROCESS_SET_INFORMATION,FALSE,atoi(ProcID));
   if(IDOK==DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG2),hWnd,(DLGPROC)DlgProc2))
   {
    if(!SetPriorityClass(hProcess,dwPriority))
    {
     MessageBox(hWnd,"更改优先级失败!","错误!",MB_OK);
     break;
    }
    DisplayRuningProcess();
   }
    
   break;
  }
     break;
 case WM_CLOSE:
  EndDialog(hWnd,FALSE);
  break;
 default:
  return FALSE;
 }
 return TRUE;
}

void DisplayRuningProcess()
{

 LVITEM lvI;
 char temp[50];
 int j;
 int CurItemIndex=0;
 HANDLE hSnapShot;
 PROCESSENTRY32 pe;
 
 DWORD retval;
 hSnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 retval=Process32First(hSnapShot,&pe);
    ListView_DeleteAllItems(hProcList);
 lvI.mask = LVIF_TEXT ;
 do
    {      
  lvI.iItem = CurItemIndex;
  lvI.iSubItem =0;
  lvI.pszText="";
  ListView_InsertItem(hProcList, &lvI);//先插入空行,然后进行填写数据
  for(j=0;j<3;j++)
  { 
   switch(j)
   {
   case 0:
       sprintf(temp ,"%d",pe.th32ProcessID);
    break;
   case 1:
    sprintf(temp,"%d",pe.pcPriClassBase);
    break;
   case 2:
    sprintf(temp ,"%s",pe.szExeFile);
    break;
   }
   ListView_SetItemText(hProcList,CurItemIndex,j,temp);//增加一行内容
          }
  CurItemIndex++;
 }while(Process32Next(hSnapShot,&pe));
    CloseHandle(hSnapShot);
}

LRESULT CALLBACK DlgProc2(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 switch (message)
 {
 case WM_INITDIALOG:
  INITCOMMONCONTROLSEX icex;
  icex.dwSize = sizeof(INITCOMMONCONTROLSEX);//初始化TrakBar控件
  icex.dwICC= ICC_BAR_CLASSES;
  InitCommonControlsEx(&icex);
        hSlider=CreateWindowEx(0,TRACKBAR_CLASS,NULL,    //创建TrackBar控件       
   WS_CHILD | WS_VISIBLE | TBS_AUTOTICKS|TBS_VERT,  
   10, 10, 20, 200, hWnd,(HMENU)IDC_SLIDER, hInst, NULL);
  SendMessage(hSlider,TBM_SETRANGE,TRUE,MAKELONG(0,5));//设置范围
  SendMessage(hSlider,TBM_SETPOS,TRUE,3);//设置默认值
  dwPriority=NORMAL_PRIORITY_CLASS;
  break;
 case WM_VSCROLL://利用这个消息返回当前设置的优先级
  DWORD dwPos;
  dwPos=SendMessage((HWND)lParam,TBM_GETPOS,0,0);
  switch(dwPos)
  {
 
  case 0:
   dwPriority=REALTIME_PRIORITY_CLASS;
   break;
  case 1:
   dwPriority=HIGH_PRIORITY_CLASS;
   break;
  case 2:
   dwPriority=ABOVE_NORMAL_PRIORITY_CLASS;
   break;
  case 3:
   dwPriority=NORMAL_PRIORITY_CLASS;
   break;
  case 4:
   dwPriority=BELOW_NORMAL_PRIORITY_CLASS;
   break;
  case 5:
   dwPriority=IDLE_PRIORITY_CLASS;
  } 
  SendMessage(hSlider,TBM_SETPOS,TRUE,(LPARAM)dwPos);
  break;

 case WM_COMMAND:
  if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
  {
   EndDialog(hWnd, LOWORD(wParam));
   return TRUE;
  }
 }
    return FALSE;
}

zju acm 1622:【上一篇】
Windows API 函数学习(12)---进程:【下一篇】
【相关文章】
  • Windows CE 下I/O操作基础
  • 从windows到linux -- 编程篇 -- cygwin,在win中开发linux程序(ZT)
  • 这就是考研---在一个论坛里摘的搞笑片段
  • 怎样把代码从unix移植到windows
  • 初始化类成员小结(Effective C++条款12,13)
  • 域环境下,统一桌面和Windows基本的外观设置
  • java学习笔记---String类
  • Windows XP自带的一个罕见的功能
  • Mac OS X Programming读书笔记4 - Windows
  • VPC上linux(Radhat9.0)通过smb服务共享windows文件全功略
  • 【随机文章】
  • PRADO V3中文文档草稿版弄好了
  • jsr184里面Light代价排序
  • HTTP Error Codes
  • DDoS攻击教程(1)
  • 使用 xfire 快速发布 WebService
  • 典型Web服务器
  • 深入解读防火墙-深入防火墙原理(3)
  • 我解百度之星题目之" 饭团的烦恼 "
  • 新时代的网络攻击技术
  • vsftpd.conf 設定值說明
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.