Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: So 13.02.05 12:38 
Hallo!
Wie kann mein Programm feststellen, ob ein weiteres Programm gestartet wurde? Ich meine, mein Programm wird gestartet, stellt fest, wie viele (wenn's geht, auch welche) Programme Windows gerade ausführt, wartet eine vorgegebene Anzahl an Sekunden, bis es sich beendet, wenn aber inzwischen eine weitere Anwendung gestartet wird, soll es sich sofort beenden.

Mein Programm zeigt eine Form mit einer Meldung an, aber ohne Button. Der Text könnte zB. lauten: "Dateien werden kopiert, bitte warten...". In diesem Sinn halt. Geht sowas überhaupt?

//Edit: Ach ja, es sollte auch erkennen können, wenn eine weitere Instanz von ihm selbst gestartet wurde! Danke vorerst!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Hansi@OMG
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 304

Vista
Delphi 2006 Prof., Lazarus
BeitragVerfasst: So 13.02.05 13:41 
Zum Thema weitere Instanz, schau dir mal das Thema Mutex an.
Ansonsten könntest du es so machen:
ausblenden Delphi-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:
uses
 tlhelp32;

procedure GetProcessList(const aProcessList: TStrings);
var
  Snap: THandle;
  ProcessE: TProcessEntry32;
begin
  aProcessList.Clear;
  Snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  try
    ProcessE.dwSize := SizeOf(ProcessE);
    if Process32First(Snap, ProcessE) then
      Repeat
        aProcessList.Add(ProcessE.szExeFile);
      Until not Process32Next(Snap, ProcessE)
    else
      RaiseLastOSError;
  finally
    CloseHandle(Snap);
  end;
end;

//Beispielaufruf
procedure TForm1.Button1Click(Sender: TObject);
begin
 GetProcessList(listbox1.Items);
end;

du speicherst dir den listboxcount und machst einen Timer, der die Prozessliste neu erzeugt und wieder den Count vergleicht, ist er um 1 größer machst du ein close.
Das ist doch, was du wolltest, oder?

_________________
Who doesn't know the Micrsoft developer "Mahatma Fatal Error"?
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: So 13.02.05 16:26 
Hansi@OMG hat folgendes geschrieben:
Das ist doch, was du wolltest, oder?

Genau das, danke! An Mutex hab' ich auch gedacht, aber damit kann man ja nur Instanzen des den Mutex verwendenden Programms abfragen, so aber klappt's mit jedem Programm!
Nochmals danke!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: So 13.02.05 16:38 
wie kann man denn abfangen, ob und welches programm gerade gestartet wurde, also das starten direkt abfangen ?
Hansi@OMG
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 304

Vista
Delphi 2006 Prof., Lazarus
BeitragVerfasst: So 13.02.05 18:46 
Es müsste der letzte eintrag in der processlist sein.

_________________
Who doesn't know the Micrsoft developer "Mahatma Fatal Error"?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 13.02.05 18:52 
Über einem API Hook und Suche im MSDN CREATEPROCESS hooken. Wie das funktioniert, kannst du dir hier www.luckie-online.de/Delphi/Importe/toms/ angucken.