windows görev yöneticinde program kontrolü

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

windows görev yöneticinde program kontrolü

Mesaj gönderen White Rose »

s.a.
Arkasaşlar sorumla ilgili arama yaptım 2 örnek buldum fakat bunlar işimi gömüyor. İstediğim şu
herhangi bir programın windows görev yöneticisi (Task manager) listesinde olup olmadığını (yani çalışıp çalışmadığını) nasıl anlarız.
Bu progamı listeden alabilirmiyiz.
Teşekkür ederim.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

İşimi görmüyor dediğin nokta neresi?Listeyi almak için yeteri kadar örnek mevcut, hatta aktif topiclerinden birinde verilmişti kodları.Karşılaştırma işlemini ister string parçalamayla yap istersen TStrings sınıfının IndexOf metoduyla..Tek bir şeye dikkat edilmesi gerekli, orjinal exe adının olmama ihtimali çok yüksek, zira listede caption ya da Application Title şeklinde bulunur vs.vs.

Kolay gele..
MyOsM
Üye
Mesajlar: 46
Kayıt: 20 Tem 2005 11:43
Konum: İzmir

Mesaj gönderen MyOsM »

Sa. bu işlemi daha önceki programlarımın bir tanesinde yedekleme ünitesi için kullanmıştım. Umarım İçinize yarar sayılarımla

Kod: Tümünü seç

//Çalışan Uygulamaların Bulunması
//-------------------------------------------------------------------------------------
procedure 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 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[I]);
    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 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; bFullpath: 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 bFullpath then
      begin
        if CompareText(ExtractFileName(MyProcList.Strings[i]), FileName) = 0 then
          Result := True
      end
      else if CompareText(MyProcList.strings[i], FileName) = 0 then Result := True;
      if Result then Break;
    end;
  finally
    MyProcList.Free;
  end;
end;
Kullanımı

Kod: Tümünü seç


 if EXE_Running('dp.exe', False) then
   begin
     Application.MessageBox('XXXX Müşteri Takip Programı Açık, Bu Şekilde Yedek Alamazsın, Lütfen Programı Kapatıp Yeniden Deneyin ....','Uyarı',MB_OKCANCEL+MB_ICONWARNING);
     Application.Terminate;
   end else
   begin
     Abort;
   end;


Bu yazı http://www.pckahvesi.com sitesinden alıntıdır.


Saygılarımla
MYOSM
Gecenin en karanlık anı sabahın en yakın olduğu andır.
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Mesaj gönderen White Rose »

teşekkürler ben de codebank'ta şunu buldum

uses TlHelp32;


procedure TForm1.Button1Click(Sender: TObject);
var
devam: BOOL;
fyakhandle: THandle;
islem32 : TProcessEntry32;
begin
s.Clear;
fyakhandle :=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
islem32.dwSize:=Sizeof(islem32);
devam :=Process32First(fyakhandle,islem32);
while integer(devam)<>0 do begin
//Listeye çalışan exe dosyaları ekleniyor.
S.Items.Add(islem32.szExeFile);
devam:=Process32Next(fyakhandle,islem32);
end;
CloseHandle(fyakhandle);

If s.Items.IndexOf('herhangibir.exe')>0 Then
showmessage('PROGRAM VAR')
else
showmessage('PROGRAM YOK');

end;
Cevapla