AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Programm nach x Minuten beenden

Ein Thema von Delphi08 · begonnen am 3. Mai 2008 · letzter Beitrag vom 5. Mai 2008
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#21

Re: Programm nach x Minuten beenden

  Alt 4. Mai 2008, 08:09
mit MSDN-Library durchsuchenProcessFirst MSDN-Library durchsuchenProcessNext kann man ermitteln, welche Kindprozesse es gibt (Prozesse, die von deinem Programmm aus gestartet wurden. Dabei bekommt man aber dann kein Fensterhandle, sondern gleich eine PID.

Delphi-Quellcode:
uses TlHelp32;
type TProcessIds = array of DWORD;

function GetChildrenProcessesID(ParentProcessId: DWORD): TProcessIds;
var
hProcSnap: THandle;
pe32: TProcessEntry32;
begin
Result := nil;
hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
if hProcSnap <> INVALID_HANDLE_VALUE then
begin
  pe32.dwSize := SizeOf(ProcessEntry32);
  if Process32First(hProcSnap, pe32) = true then
  begin
    while Process32Next(hProcSnap, pe32) = true do
    begin
      if pe32.th32ParentProcessID = ParentProcessId then
      begin
        SetLength(Result, Length(Result) + 1);
        Result[Length(Result) - 1] := pe32.th32ProcessID;
      end;
    end;
  end;
CloseHandle(hProcSnap);
end;
end;

// Aufruf
procedure TForm1.Button3Click(Sender: TObject);
var Children: TProcessIds;
    i: integer;
begin
  ListBox1.Clear;
  Children := GetChildrenProcessesID(GetCurrentProcessId); // Eigene Kinder finden
  for i := 0 to Length(Children) - 1 do
    ListBox1.Items.Add(IntToStr(Children[i]));
end;
rollstuhlfahrer
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#22

Re: Programm nach x Minuten beenden

  Alt 4. Mai 2008, 09:24
Wieso muss denn nach einem Prozess gesucht werden? Wenn die URL per ShellExecuteEx() geöffnet wurde, dann wird das process handle zurückgeliefert, genauso die Information, ob eine eigene Instanz des Browsers gestartet wurde oder nicht.
  Mit Zitat antworten Zitat
Delphi08

Registriert seit: 2. Mai 2008
28 Beiträge
 
Delphi 7 Enterprise
 
#23

Re: Programm nach x Minuten beenden

  Alt 4. Mai 2008, 19:33
Zitat von marabu:
Wieso muss denn nach einem Prozess gesucht werden? Wenn die URL per ShellExecuteEx() geöffnet wurde, dann wird das process handle zurückgeliefert, genauso die Information, ob eine eigene Instanz des Browsers gestartet wurde oder nicht.
wie würdest du es dann machen?!

mfg
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.862 Beiträge
 
Delphi 11 Alexandria
 
#24

Re: Programm nach x Minuten beenden

  Alt 4. Mai 2008, 19:36
Er meint, dass wenn du den PID schon kennst, ihn nicht über den Klassennamen ermitteln musst
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.631 Beiträge
 
Delphi 12 Athens
 
#25

Re: Programm nach x Minuten beenden

  Alt 4. Mai 2008, 19:37
Richtig, und dann könnte man den Code aus #10 verwenden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Delphi08

Registriert seit: 2. Mai 2008
28 Beiträge
 
Delphi 7 Enterprise
 
#26

Re: Programm nach x Minuten beenden

  Alt 4. Mai 2008, 19:47
okay ich hab wieder den Code aus #10

allerdings funktioniert nur WM_CLOSE allerdings nicht
Zitat:
WM_CLOSE_QUERY
(was ist eigentlich der Unterschied)?
Die PID ändert sich doch jedes mal, oder nicht?

hab testweise mal die Funktion so aufgerufen:
CloseProcessWindows(3992); (funktioniert auch, aber da kann ich ja ned 3992 stehen lassen, oder?)
  Mit Zitat antworten Zitat
Larsi

Registriert seit: 10. Feb 2007
2.262 Beiträge
 
Delphi 2007 Professional
 
#27

Re: Programm nach x Minuten beenden

  Alt 4. Mai 2008, 21:04
Also hier nochmal die Komplettlösung:
Du ziehst eine Timer Komponente auf dein Formular, stellst den Interval im Objektinspektor auf die Millisekunden, nachdehnen es beendet werden soll ein, und in dann klickst du auf die Timer Komponente doppelt drauf und schreibst dort: Form3.Close; rein. Fals es bei dir nicht Form3 ist dann nehm einfach statt drei die Zahl deines Formulares ein. Das war jetzt eine Lösung wie du dein Programm beendest. Das mit z.B. Firefox würde ich so machen: Du schreibst folgenden Code in dein Formular:
Delphi-Quellcode:
function KillTask(ExeFileName: string): integer;
const
  PROCESS_TERMINATE=$0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  result := 0;

  FSnapshotHandle := CreateToolhelp32Snapshot
                     (TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle,
                                 FProcessEntry32);

  while integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
         UpperCase(ExeFileName))
     or (UpperCase(FProcessEntry32.szExeFile) =
         UpperCase(ExeFileName))) then
      Result := Integer(TerminateProcess(OpenProcess(
                        PROCESS_TERMINATE, BOOL(0),
                        FProcessEntry32.th32ProcessID), 0));
    ContinueLoop := Process32Next(FSnapshotHandle,
                                  FProcessEntry32);
  end;

  CloseHandle(FSnapshotHandle);
end;
Oben in dies Uses- Klause schreibst du dann noch ,tlhelp32 rein. In deinen Timer wo schon das FormX.close drinnensteht schreibst du dann noch KillTast('firefox.exe'); rein und dieser wird dann mit deinem Programm nach der angegebenen Zeit beendet.

Sonst noch Fragen^^


MFG Lars Wiltfang
Ein Tag ohne Delphi ist ein verlorener Tag!

Homepage zu meinem neuen Programm: StreamZ
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.862 Beiträge
 
Delphi 11 Alexandria
 
#28

Re: Programm nach x Minuten beenden

  Alt 4. Mai 2008, 21:08
Er startet aber Firefox und kennt deshalb dessen PID! Dein Code schliesst auch eine eventuell andere Firefox-Instanz
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.631 Beiträge
 
Delphi 12 Athens
 
#29

Re: Programm nach x Minuten beenden

  Alt 5. Mai 2008, 09:06
Das hab ich in #20 ja bereits angedeutet.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.862 Beiträge
 
Delphi 11 Alexandria
 
#30

Re: Programm nach x Minuten beenden

  Alt 5. Mai 2008, 09:07
Ich weiss; es gibt aber andere die den thread wohl nicht ganz gelesen haben
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz