![]() |
Test-Programm
Hi waollte mal fragen ob es ein Programm gibt das uz.b alle 5 min testen ob ein anderes programm am laufen ist und falls nicht das Programm starten kann
bsp es lauft "sol.exe"(dumm ich weis) das Programm soll dann alle 5 min testen o sol.exe lauft wenn nein soll sol.exe gestarten werde kann mir das jmd sagen oder vlt sogar geben danke |
Re: Test-Programm
Hi,
suchst oder willst solch ein Programm machen? :gruebel: MfG Marc |
Re: Test-Programm
|
Re: Test-Programm
Also... :roll:
![]() ![]() Und für den Rest reicht ein Timer... Greetz Sergej |
Re: Test-Programm
Delphi-Quellcode:
Erst mal danke an alle die mir Antwort gaben
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, tlhelp32, ShellAPI, ExtCtrls, AppEvnts; const IC_CLICK = WM_APP + 201; type TForm1 = class(TForm) Label1: TLabel; Timer1: TTimer; ApplicationEvents1: TApplicationEvents; procedure ApplicationEvents1Minimize(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Timer1Timer(Sender: TObject); private { Private-Deklarationen } procedure Systray(var sMsg: TMessage); message IC_CLICK; public { Public-Deklarationen } end; var Form1: TForm1; NIM : TNotifyIconData; implementation {$R *.dfm} var bclose : boolean; function GetProcessID(Exename: string): DWORD; var hProcSnap: THandle; pe32: TProcessEntry32; begin result := 0; 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 pos(Exename, pe32.szExeFile) <> 0 then result := pe32.th32ProcessID; end; end; CloseHandle(hProcSnap); end; end; function GetProcessHandleFromID(ID: DWORD): THandle; begin result := OpenProcess(SYNCHRONIZE, False, ID); CloseHandle(result); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin bClose := True; end; procedure TForm1.Systray(var sMsg: TMessage); begin inherited; if (sMsg.LParam = WM_LBUTTONDOWN) then begin Show; Shell_NotifyIcon(NIM_DELETE, @NIM); Application.Restore; end; end; procedure TForm1.ApplicationEvents1Minimize(Sender: TObject); begin Form1.FormStyle:=fsStayOnTop; Hide; with NIM do begin cbSize := SizeOf (nIM); Wnd := Handle; uID := 0; uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; uCallbackMessage := IC_CLICK; hIcon := Application.Icon.Handle; szTip := 'Network'; end; Shell_NotifyIcon(NIM_ADD, @NIM); end; procedure TForm1.Timer1Timer(Sender: TObject); var hProcess: THandle; wf: DWORD; begin bClose := False; while bClose = False do begin hProcess := GetProcessHandleFromID(GetProcessID('notepad.exe')); if hProcess = 0 then winexec(pchar('notepad.exe'),sw_shownormal) else label1.caption := 'Bereits offen'; Application.HandleMessage; end; end; end. Habe bei dem obigen Quellcode noch ein Problem wenn ich das Programm satrte wenn es aus war versucht der Timmer das programm immer wieder neu zu öffnen also hab ich nachher zichtausend fenster offen kann man das irgendwie ausschalten also wenn das Programm laüft mach nix öffnen?? |
Re: Test-Programm
Zitat:
|
Re: Test-Programm
Also ich kann nicht erkennen wieso er ein Programmm mehrmals öffnet
Weis ich auch net kapiere ist wenn das programm geschlossen wird warum direkt es dirket wieder geöffnet wird also normalerweise dürfte er wes erst nach der zeit wieder öffnen oder kannman das mit mner abfrage machen wenn es schon offen ist dann mache das testen net kann mir jmd helfen?? |
Re: Test-Programm
Also ich versteh beim besten willen nicht was du willst!
Der Code den du hast überprüft in einem Interval das du im Timer einstellen kannst ob dein Notepad läuft. Wenn es nicht läuft wird es geöffnet und das ist ja genau das was du wolltest, oder? Und wenn nicht, was willst du denn dann überhaupt? :gruebel: |
Re: Test-Programm
Genau das will ich das macht es auch aber wenn es auf ist macht genau dieser Code das Programm nochmal und nochmal und nochmal... auf das will cih nicht ich will wenn das Programm nicht läuft das Program 1 einziges mal starten nicht so oft das Intervall erreicht wird
Beispiel Inetervall: 5 sec Programmstatus: aus So das Programm testet nun nach 5 sec ob notepad läuft (nein) so nun soll es notepade öffnen (macht es) 5 sec Später das programm öffnet notepad wieder (es ist aber schon offen) 5 sec Später das programm öffnet notepad wieder (es ist aber schon 2x offen) 5 sec Später das programm öffnet notepad wieder (es ist aber schon 3x offen) .... Dort liegt der Fehler |
Re: Test-Programm
Hmm...
Das Programm das ich aus deinem Code nachgebaut habe fuktioniert. Ich kann mir das nicht recht erklähren. Könnte es sein das der Prozess nicht notepad.exe heißt sondern vielleicht NOTEPAD.EXE? Das ist mir nämlich mal untergekommen. Ansonsten könntest du einfach mal dein Projekt Anhängen und ich teste es mal bei mir. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 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-2025 by Thomas Breitkreuz