السلام عليكم
سأبدأ ان شاء الله سلسلة ليست دروس بمعنى الكلمة ولكن هي في النهاية بغرض التعليم وتحريك المنتدى قليلا ، فأرجوا من أصحاب الخبرة الإطلاع عليها وتعديلها ان لزم الأمر ......
-كيف تقوم بارجاع قائمة بجميع البروسيس الشغال بالنظام
توفر لنا المكتبة tlhelp32.h مجموعة من الدوال الجاهزة لعمل ذلك مثل :
Process32First Process32Next Thread32First Thread32Next Module32First Module32Next الخ ..
ملاحظة : هذه التوابع لا تعمل في Windows NT4
أي عندما نستخدم في البرنامج اي دالة من هذه الدوال علينا تضمين مكتبة tlhelp32.h
قمت بعمل برنامج بسيط ليوضح الفكرة :
hsnap = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
pe.dwSize = sizeof(PROCESSENTRY32);
me.dwSize = sizeof(MODULEENTRY32);
BOOL EnumProc = Process32First(hsnap,&pe);
while(EnumProc)
{
m_cList1.AddString(pe.szExeFile);
hsnapm = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pe.th32ProcessID);
BOOL EnumModule = Module32First(hsnapm,&me);
m_cList2.AddString(pe.szExeFile);
m_cList2.AddString("...........................");
while(EnumModule)
{
m_cList2.AddString(me.szExePath);
EnumModule = Module32Next(hsnapm,&me);
}
m_cList2.AddString("___________________________");
m_cList2.AddString("");
EnumProc = Process32Next(hsnap,&pe);
}
CloseHandle(hsnap);
CloseHandle(hsnapm);
UpdateData(false);هذه الكود يقوم باعادة البروسيس الشغال واضافته للست بوكس 1 ، واعادة ال dll أو ال modules التي يستخدمها البروسيس واضافتها للست بوكس 2
بداية علينا تعريف قيمة HANDLE مقبض لنستطيع استخدام التوابع المذكورة فوق
HANDLE hsnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
هذا الهاندل نمرره كأول بارامتر لأي من التوابع المذكورة ، البارامتر الأول في هذه الدالة يحدد ما المراد ارجاعه
TH32CS_INHERIT Indicates that the snapshot handle is to be inheritable. TH32CS_SNAPALL Equivalent to specifying TH32CS_SNAPHEAPLIST, TH32CS_SNAPMODULE, TH32CS_SNAPPROCESS, and TH32CS_SNAPTHREAD. TH32CS_SNAPHEAPLIST Includes the heap list of the specified process in the snapshot. TH32CS_SNAPMODULE Includes the module list of the specified process in the snapshot. TH32CS_SNAPPROCESS Includes the process list in the snapshot. TH32CS_SNAPTHREAD Includes the thread list in the snapshot.
البارامتر الأخير يأخذ القيمة 0 الا اذا أردنا الحصول على heap او ال module فإننا نمرر له ID البروسيس المراد .
بقي أمر واحد قبل الحصول على القيم المرادة ، عليك تعريف متغير للحصول على القيم المخزنة بال struct وتمرره كبارامتر ثاني
PROCESSENTRY32 pe; MODULEENTRY32 me;
الآن تستطيع استخدام الدالة
Process32First(hsnap,&pe);
ولكن انتبه عليك تحديد حجم ال struct قبل استدعاءه
pe.dwSize = sizeof(PROCESSENTRY32);
الآن أصبح كل شيء واضح بقي أن نقول أن اعادة القيم الخاصة بال Module او ال Heap هي نفس الشئ ولكن عليك تمرير قيمة ال ID للبروسيس بدلا من الصفر
hsnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pe.th32ProcessID);
هنا البرنامج كامل