Autor Beitrag
AZRAEL
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Do 28.11.02 20:23 
Hi Leute bin absolut neu hier und in Delphi. Ich hab vor ein Programm zu schreiben was mir das ein oder andere Programm aufruft falls es inativ wird. Leider hab ich keine Ahnung wie ich sowas anstellen kann ! Hat jemand von euch ne idee wie ich ein Programm erst starten kann und dann beobachten kann ob es aktiv bleibt ? sobald es inaktiv wird soll das Programm neugestartet werden.

Wäre euch dankbar wenn ihr mir dass in Form von nem Quelltext zukommen lassen könntet da ich noch net so die Ahnung vom Programmieren in Delphi hab :_(


Danke & Gruß

Alex
Andreas Pfau
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: Fr 29.11.02 00:06 
Du brauchst zuerst einen Timer, den du z.B. auf Interval=1000 stellst (einmal pro Sekunde überprüfen).

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
uses
 {...}, ShellApi;

{...}

implemetation

{...}

procedure TForm1.Timer1Timer(Sender: TObject);
var
 H: Hwnd;
begin
 H := FindWindow(Nil, PChar('FensterTitel'));
 If H = 0 Then
  ShellExecute(0, Nil, PChar('C:\Programme\Programm\Programm.exe'), Nil, Nil, Sw_ShowNormal);
end;
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 29.11.02 00:30 
Das wollte er nicht. Du startets jedes mal das Programm, wenn es geschlossen wurde. Ich denke, er wollte dem Fenster wieder den Focus geben, wenn es den Focus verliert.

Ich hoffe, dir ist klar, dass man, wenn man das schaft, mit keinem anderen Programm mehr arbeiten kann. :evil:

Lösung wäre ein System-Hook. Siehe mein LuckieSpy (mit Source).
AZRAEL Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Fr 29.11.02 00:33 
wenn ich dass richtig sehe funzt dass Programm aber nur wenn das "beobachtete" Programm ein offenes fenster besitzt .. richtig ?

bei dem programm welches es am laufen halten soll gibt es dass jedoch net, es wird nur im Taskmanager von 2000 und XP gelistet (es handelt sich hierbei um ein Seti Client) und daher müsste dass programm direkt auf den Taskmanager zugreifen können ....

Gruß
Alex


Edit: ja genau darum geht es ... wieso kann ich dann mit keinem anderen programm mehr arbeiten ? was würde mich daran hindern ? ich kann das programm ja alle 5 sekunden abfragen lassen dass dauert ja net die welt normal dann könnte ich mit leichten verzögerungen andere programme dennoch ausführen oder nicht ?


Zuletzt bearbeitet von AZRAEL am Fr 29.11.02 00:36, insgesamt 3-mal bearbeitet
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 29.11.02 00:35 
Was soll das denn werden? Wie soll ein Programm ohne Fenster den Fokus erhalten? :shock:

Und wenn es nur im Taskmanager auftaucht, scheint es sich wohl um einen Service zu handeln.
AZRAEL Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Fr 29.11.02 00:39 
es handelt sich um einen Seti Client der nur von der Registrierung aus gestartet wird und dann den den ganzen windows betrieb lang läuft (bzw. laufen sollte) leider stürzt dass programm ab und zu ab und startet sich nicht von selbst neu ! daher will ich dass programm schreiben welches den tastmanager nach dem programm durchsucht und sobat es verschwindet wieder neustartet ....
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 29.11.02 00:46 
Es ist also ein Dienst. Sag das doch endlich mal. Einen Dienst kannst du nicht einfach so wie ein normales Programm über einen Doppelklick im Explorer starten.

Dienste lassen sich mit dem Konsolenbefehl net start <Dienstname> starten. Das könntest du mit Shellexecute realisieren. Oder eben manuel über Startmün -> Verwaltung -> Dienste.

So, um nun zu kucken, ob der Prozess noch läuft mußt du einen Snapshot machen. Stichwort: CreateToolHelp32Snapshot. Kuck dir mal meinen ProcViewer an auf meiner Seite.