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

يف يمكن إختبار إذا كان أحد البرامج في حالة عمل .

مغلق
بدأه fadi2003 في 19 مارس 2003 · 4 رد · 781 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

أرجو الإجابة عن هذا السؤال :

كيف يمكن أن أختبر إذا كان أحد البرامج في حالة عمل مثلاً ( إذا كان الديلفي يعمل فينفذ أمر وإلا ينفذ أمر آخر ) وشكرا لكم .

#2

ألا يوجد حل لهذا السؤال ؟؟؟

#3

نعم إن شاء الله يوجد اجابة

اعطيك الفكرة وسـأحول ان ارسل لك مثال على ذالك

الفكرة ستكون بواسطة مكتبات الربط الدينامكية واستخدام بعد الدالات الخاصة بـ API وادعو من الله ان يعنى على ايجاد المثال المناسب لك

اخوك...

#4
Uses

  Psapi, tlhelp32;



procedure TForm1.CreateWin9xProcessList(List : TStringList);

var

  hSnapShot : THandle;

  ProcInfo : TProcessEntry32;

begin

  if List = nil then Exit;

  hSnapShot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);

  if (hSnapShot <> THandle(-1)) then

  begin

    ProcInfo.dwSize := sizeof(ProcInfo);

    if (Process32First(hSnapshot, ProcInfo)) then

    begin

     List.Add( ProcInfo.szExeFile);

     while (Process32Next(hSnapShot, ProcInfo)) do

      List.Add(ProcInfo.szExeFile);

    end;

    CloseHandle(hSnapShot);

  end;

end;



procedure TForm1.CreateWinNTProcessList(List : TStringList);

var

  PIDArray : array [0..1023] of DWORD;

  cb : DWORD;

  I : integer;

  ProcCount : integer;

  hMod : HMODULE;

  hProcess : THandle;

  ModuleName : array [0..300] of char;

begin

  if List = nil then Exit;

  EnumProcesses(@PIDArray, sizeof(PIDArray), cb);

  ProcCount := cb div sizeof(DWORD);

  for I := 0 to ProcCount-1 do

  begin

    hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or

    PROCESS_VM_READ,

    false,

    PIDArray);

    if (hProcess <> 0) then

    begin

      EnumProcessModules(hProcess, @hMod, sizeof(hMod), cb);

      GetModuleFilenameEx(hProcess,hMod,ModuleName,sizeof(ModuleName));

      List.Add(ModuleName);

      CloseHandle(hProcess);

    end;

  end;

end;



procedure TForm1.GetProcessList(Var List : TStringList);

var ovi : TOSVersionInfo;

begin

  if List = nil then Exit;

  ovi.dwOSVersionInfoSize := sizeof(TOSVersionInfo);

  GetVersionEx(ovi);

  case ovi.dwPlatformId of

    VER_PLATFORM_WIN32_WINDOWS : CreateWin9xProcessList(List);

    VER_PLATFORM_WIN32_NT : CreateWinNTProcessList(List);

  end

end;



function EXE_Running(FileName : String; fullpath : boolean) : boolean;

var

  i : integer;

  MyProcList : TStringList;

begin

 MyProcList := TStringList.Create;

 try

   GetProcessList(MyProcList);

   result := false;

   if MyProcList = nil then Exit;

    for i := 0 to MyProcList.Count - 1 do

    begin

      if not fullpath then

      begin

       if CompareText(ExtractFileName(MyProcList.Strings),FileName) = 0 then

result := true

      end else

       if CompareText(MyProcList.Strings,FileName) = 0 then result := true;

     if result then break;

    end;

  finally

   MyProcList.Free;

 end;

end;





// Example 1: Is a Exe-File running ?

procedure TForm1.Button1Click(Sender: TObject);

begin

 if EXE_Running('notepad.exe',false) then

    ShowMessage('EXE is running')

 else

    ShowMessage('EXE is not running');

end;





// Example 2: List running Exe-Files

procedure TForm1.Button3Click(Sender: TObject);

var

  i : integer;

  MyProcList : TStringList;

begin

 MyProcList := TStringList.Create;

 try

   GetProcessList(MyProcList);

   if MyProcList = nil then Exit;

    for i := 0 to MyProcList.Count - 1 do

      ListBox1.items.add(MyProcList.Strings);

 finally

   MyProcList.Free;

 end;

end;
#5

شكرا لك أخي العزيز D-Master ولكن عندما أحاول تشغيل البرنامج يعطيني خطأ على العبارة التالية :

procedure TForm1.CreateWin9xProcessList(List : TStringList) ;

علما بأني عرفت الـ Psapi, tlhelp32 في الـ Uses

هذا الموضوع مغلق.

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…