در این پست ما قصد داریم برنامه ای بنویسیم که پروسس های موجود در سیستم به همراه id و Priority نمایش میدهد. ما در این برنامه برای انجام این کار از API موجود در سیستم عامل استفاده میکنیم .
در ابتدا دو متغیر برنای نگه داری id و Priority تعریف کرده سپس یک تصویر از پراسس های موجود در سیستم میگیریم .در خط بعدی ما اولویت پراسس را با تابعی دریافت کردیم و با حالت ها شرطی آن را به استرینگ مناسب ترجمه میکنیم .
در خطوط بعدی دستگره پراسس را بسته سپس id پراسس را از مقدار عددی به مقدار استرینگ تبدیل میکنیم و مقادیر را در کنسول چاپ میکنیم .
در خط آخر حلقه پراسس موجود بعدی را از پراسس های تصویر شده درخواست میکنیم ، در صورت به اتمام رسیدن پراسس ها مقدار نادرست را برمیگرداند و سپس برنامه از حلقه خارج شده هندل اصلی بسته میشود و برنامه تمام میشود ، و در صورت موجود بودن پراسس بعدی این فرایند تکرار میشود .
سورس برنامه مورد نظر :
#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>
#include <Strsafe.h>
#include <tchar.h>using namespace std;
int main()
{TCHAR szPriority[15];
TCHAR szProcessId[15];//get image from process in windows
HANDLE hProcessSnap = CreateToolhelp32Snapshot(
TH32CS_SNAPPROCESS, 0);
HANDLE hProcess;DWORD dwPriority = -1;
PROCESSENTRY32 pe32;
ZeroMemory(&pe32, sizeof(PROCESSENTRY32));
pe32.dwSize = sizeof(PROCESSENTRY32);
//get information firest process
BOOL b = Process32First(hProcessSnap, &pe32);
while (b)
{
//open handle process
hProcess = OpenProcess(
PROCESS_ALL_ACCESS, false, pe32.th32ProcessID);DWORD dwError = GetLastError();
if (hProcess == NULL && pe32.th32ProcessID != 0 &&
dwError != ERROR_ACCESS_DENIED)
{
return 0;
}//get firest ... convert to string
dwPriority = GetPriorityClass(hProcess);
switch (dwPriority)
{
case REALTIME_PRIORITY_CLASS:
StringCchCopy(szPriority, 15, _T("Realtime"));
break;
case HIGH_PRIORITY_CLASS:
StringCchCopy(szPriority, 15, _T("High"));
break;
case ABOVE_NORMAL_PRIORITY_CLASS:
StringCchCopy(szPriority, 15, _T("Above Normal"));
break;
case NORMAL_PRIORITY_CLASS:
StringCchCopy(szPriority, 15, _T("Normal"));
break;
case BELOW_NORMAL_PRIORITY_CLASS:
StringCchCopy(szPriority, 15, _T("Below Normal"));
break;
case IDLE_PRIORITY_CLASS:
StringCchCopy(szPriority, 15, _T("Idle"));
break;
default:
StringCchCopy(szPriority, 15, _T("N/A"));
break;
};
CloseHandle(hProcess);
//convert ID from intiger to string
_itot_s(pe32.th32ProcessID, szProcessId, 14, 10);cout << pe32.szExeFile;
cout.width(30);
cout << "pid: " << szProcessId
<< " Priority: " << szPriority << "n";b = Process32Next(hProcessSnap, &pe32);
}
CloseHandle(hProcessSnap);system("pause");
return 0;
}
برچسب:
نویسنده: لیلا مرادی