您的位置:首页 > 其它

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

2007-04-09 16:36 337 查看
// 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: