السلام عليكم ورحمة الله وبركاته
أرجو الإجابة عن هذا السؤال :
كيف يمكن أن أختبر إذا كان أحد البرامج في حالة عمل مثلاً ( إذا كان الديلفي يعمل فينفذ أمر وإلا ينفذ أمر آخر ) وشكرا لكم .
السلام عليكم ورحمة الله وبركاته
أرجو الإجابة عن هذا السؤال :
كيف يمكن أن أختبر إذا كان أحد البرامج في حالة عمل مثلاً ( إذا كان الديلفي يعمل فينفذ أمر وإلا ينفذ أمر آخر ) وشكرا لكم .
ألا يوجد حل لهذا السؤال ؟؟؟
نعم إن شاء الله يوجد اجابة
اعطيك الفكرة وسـأحول ان ارسل لك مثال على ذالك
الفكرة ستكون بواسطة مكتبات الربط الدينامكية واستخدام بعد الدالات الخاصة بـ API وادعو من الله ان يعنى على ايجاد المثال المناسب لك
اخوك...
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;شكرا لك أخي العزيز D-Master ولكن عندما أحاول تشغيل البرنامج يعطيني خطأ على العبارة التالية :
procedure TForm1.CreateWin9xProcessList(List : TStringList) ;
علما بأني عرفت الـ Psapi, tlhelp32 في الـ Uses
هذا الموضوع مغلق.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…