الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

التحقق من عمل process ما

بدأه Mohamed El Sayed في 7 نوفمبر 2014 · 2 رد · 1,532 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

 

كنت اريد برنامج ادخل له اسم process ثم يقوم بالتحقق من ما اذا كان يعمل ام لا و هذه محاولاتى الفاشله

HWND hwnd;
hwnd = FindWindow(NULL,processname);
if (hwnd !=0)
{
cout<<"some text";
}

المشكله فى هذا الكود انه لا يعمل الا اذا داخلت اسم النافذه ليس اسم ال process
يعنى اذا ادخلت notepad.exe لن يعمل اما اذا ادخلت MyText - Notpad مثلا (بفرض ان هناك ملف نصى بهذا الاسم قيد التشغيل) سيعمل الكود

 

ما هو الكود اللازم لفعل هذا ؟
 

#2

FindWindow لديك تبحث بإسم النافذة، وهذه تتغير، يمكنك استخدام اسم فئة class النافذة مثل Notepad إذا كنت تبحث عن برنامج معين، استخدم أداة Spy++ للإيجادها، في المرفقات. اضغط على ايقونة البحث واستخدم الـFinder tool.

if(FindWindow(L"Notepad", NULL)) {  /* وجدت */}

أيضاً هناك الدالة CreateToolhelp32Snapshot مع الخيار TH32CS_SNAPPROCESS إذا تأخذ لقطة للعمليات القائمة، وتسطيع إيجاد اسم العملية notepad.exe:

#define UNICODE
#include <Windows.h>
#include <TlHelp32.h>
#include <stdio.h>

int
main(void)
{
  HANDLE Snapshot;

  Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

  if(Snapshot != INVALID_HANDLE_VALUE) {
    PROCESSENTRY32 ProcessEntry;
    BOOL           Succeed;

    ProcessEntry.dwSize = sizeof(PROCESSENTRY32);

    Succeed = Process32First(Snapshot, &ProcessEntry);

    while(Succeed) {
      if(lstrcmp(ProcessEntry.szExeFile, L"notepad.exe") == 0) {
        printf("notepad.exe found, id %ld\n", ProcessEntry.th32ProcessID);
      }
      Succeed = Process32Next(Snapshot, &ProcessEntry);
    }

    CloseHandle(Snapshot);
  }

  return 0;
}

spyxx.zip

1
#3

شكرا جزيلا mr b الكود رائع لكن هل من الممكن عكس العمليه ؟

الحصول على عنوان النافذه باستخدام اسم ال process ؟

مواضيع مشابهة