Autor Beitrag
Xelos
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Fr 20.09.02 10:15 
Hi...ich bin der neue *g*

Ich hoffe mir kann hier jemand helfen, bevor mich die Leute mit den Habmichlieb Kitteln abholen.

Ich möchte ein Prg schreiben, mit dem ich ein anderes Programm überwachen kann. Also es soll halt schauen, ob das andere Prg läuft und wenn es das nicht tut, dann soll es das wieder starten.

Hat jemand ne Idee wie ich abfragen kann, ob ein Programm aktiv ist?

HELP HELP HELP :cry:

Thxi
Xelos
Cashels
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167



BeitragVerfasst: Fr 20.09.02 11:46 
Willkommen im Club, 8)

Kuck dir mal die Methode Findwindow an, das müsst das sein was du suchst.

Gruss,
Tom
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 20.09.02 21:32 
FindWindow aber in Verbindung mit einem Timer oder Thread, denn schließlich soll -wenn ich das richtig verstanden habe!- das Programm ja wohl dauerhaft überwacht werden:
Zitat:
Ich möchte ein Prg schreiben, mit dem ich ein anderes Programm überwachen kann. Also es soll halt schauen, ob das andere Prg läuft und wenn es das nicht tut, dann soll es das wieder starten.
Xelos Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Sa 21.09.02 09:59 
Also die Hilfe gibt nur FindVCLWindow aus...ich werde daraus nicht so ganz schlau. :oops:

Könnt ihr mir nen kleines Beispiel geben?
Cashels
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 167



BeitragVerfasst: Sa 21.09.02 10:18 
Hi Xelos,

die Funtkion Findwindow aus der Unit Windows liefert dir den Handle eine Fensters. Schmeiss mal eine Editbox und ein Button auf deine Form. Im OnClick Event deines Buttons schreibst du Folgendes:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button1Click(Sender: TObject);
var
 H : THandle ;
begin
      H := FindWindow ('TApplication',PChar(edit1.Text)) ;
      if H <> 0
      then Postmessage (H,WM_CLOSE,0,0) ;
end;


edit1.text enthält den Titel deines Fensters. Hast du das Handle gefunden, kannst du, wie im Bsp, ein Event zur Anwendung schicken um sie zu schliessen.

Gruss,
Tom
Xelos Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 22.09.02 05:28 
Klappte leider nicht.
Ich hatte es mit dem Taschenrechner von Win ausprobiert.
Habe ins Edit = Rechner eingetragen.
:shock:
Gruss
Xelos
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 22.09.02 05:50 
Versuch es mal so:

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
uses
  tlhelp32;

procedure TForm1.FillListbox;
var
  sl: TStringlist;
  i: Cardinal;
begin
  try
    sl := TStringList.Create;
    GetProcs(sl);
    Listbox1.Clear;
    for i := 0 to sl.Count-1 do
      ListBox1.Items.Add(sl.Strings[i]);
  finally
    sl.Free;
  end;
end;

procedure TForm1.GetProcs(sl: TStringlist);
var
  hProcSnap: THandle;
  pe32: TProcessEntry32;
begin
  { Snapshot machen *PENG* }
  hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  if hProcSnap = INVALID_HANDLE_VALUE then exit;

  pe32.dwSize := SizeOf(ProcessEntry32);

  { wenn es geklappt hat }
  if Process32First(hProcSnap, pe32) = true then
    { und los geht's }
    while Process32Next(hProcSnap, pe32) = true do
    begin
      sl.Add(pe32.szExeFile);
    end;
  CloseHandle(hProcSnap);
end;


Das listet dir alle laufenden Prozesse in einer Listbox auf. Jetzt kuckst du, ob in der Listbox dein Prozess läuft in einem Timer (bessere wäre in einem Thread, aber wir wollen ja nicht übertreiben) und wenn du ihn nicht findest startest du ihn neu mit CreateProcess (den Code habe ich hier im Forum auch schon mal gepostet.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 22.09.02 05:55 
Xelos hat folgendes geschrieben:
Klappte leider nicht.
Ich hatte es mit dem Taschenrechner von Win ausprobiert.
Habe ins Edit = Rechner eingetragen.
:shock:
Gruss
Xelos


Kann nicht klappen, die Fensterklasse vom Rechner ist bestimmt nicht TApplication. Wenn du da nil übergibst müßte es gehen.

Wobei ich meine Methode bevorzugen würde, setzt allerdings vorraus, dass du den Namen der Exe kennst.
Xelos Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 22.09.02 14:10 
fetten Dank an alle ;)
Klappt nun alles.
:D <- ein glücklicher Xelos