Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Programmstart bestimmen (https://www.delphipraxis.net/139145-programmstart-bestimmen.html)

Major1337 24. Aug 2009 16:57


Programmstart bestimmen
 
Hey,

ich möchte das mein Programm nachdem ich den PC hochgefahren habe selbst innerhalb von einer bestimmten Zeit startet.
Meine erste Lösung war eine Batch-Datei zu erstellen in der ich das Programm erst auffordere nach einer gewissen Zeit das Programm zu starten.
Diese Batch-Datei habe ich dann in den Autostart kopiert und es ging auch alles wunderbar. Das Programm muss erst nach ein paar Minuten starten, da es eine gewisse Zeit brauch bis sich der PC mit W-Lan verbindet, da das Programm ohne W-Lan nichts anfangen kann und Fehlermeldungen bringt. Finde diese Lösung nicht wirklich praktisch.
Habt ihr noch Vorschläge, wie es über das Delphiprogramm steuern kann? oder andere Ideen? :P


Mfg
Major1337

Andreas L. 24. Aug 2009 17:00

Re: Programmstart bestimmen
 
Kannst zum Beispiel mit einem Timer und Hier im Forum suchenShellExecute machen.

himitsu 24. Aug 2009 17:08

Re: Programmstart bestimmen
 
er muß aber auch so oder so erstmal ein Programm starten (egal welchen der schon genannten Weger er verwendet)

statt der Batch kannst du aber auch dein Programm, mit der "warte noch etwas"-Nachricht über einen Linl (.lnk) im Autostart starten oder du trägst den Befehl in eines der Autostart-Verzeichnisse in der Registry ein.

also entweder er startet sein Programm sofort und sagt ihm per parameter "warte noch 5 Minuten",
dann wird z.B. in der .DPR gleich zum Anfang darauf eingegangen, gewartet und erst nach Zeitablauf fortgesetzt,

oder er baut sich einen Loader, welcher via Autostart startet, etwas wartet, dann das andere Programm startet und sich wieder beendet.



PS: Wenn ich Zeit hab, bastel ich hier an einem Tool, welches unter Anderem auch mal die Autostarts (anderer Programme) ändern können soll ... erstellen, löschen, nur deaktiveren oder eben zeitversetzt starten.
Wollte da mal einige Funktionen Pluginmäßig kombinieren, damit nur ein Propzess ständig aktiv ist und nicht tausende für jede kleine Aufgabe

Andreas L. 24. Aug 2009 17:15

Re: Programmstart bestimmen
 
Ich dachte das zu startende Programm ist nicht von ihm bzw. er hat keinen Zugriff auf den Source. Sowas hab ich auch gemeint:
Zitat:

Zitat von himitsu
oder er baut sich einen Loader, welcher via Autostart startet, etwas wartet, dann das andere Programm startet und sich wieder beendet.


himitsu 24. Aug 2009 17:19

Re: Programmstart bestimmen
 
ich dachte er meint ein Eigenes

Zitat:

möchte das mein Programm ... selbst innerhalb von einer bestimmten Zeit startet.

Major1337 24. Aug 2009 17:30

Re: Programmstart bestimmen
 
Hey,

ich habe schon Zugriff auf den Source :P aber die Idee mit einem extra Programm ist schon gut.
Die werde ich vermutlich auch umsetzten, gibts bei ShellExecute auch einen Parameter mit der ich die Zeit steuern kann?
So kann ich dann auch ein try except einbauen, wenn er keinen W-Lan Zugriff bekommt und ein tolles Intro mit Ladebalken machen ^^

Matze 24. Aug 2009 17:35

Re: Programmstart bestimmen
 
Ich würde das mit einer Anwendung lösen.
Zu Beginn startest du einen Timer, der die entsprechenden Funktionen nach einer gewissen Zeit aufruft. Es wäre auch denkbar, im Timer alle 15 Sekunden zu prüfen, ob eine WLAN-Verbindung vorhanden ist. Ist sie das, kannst du entsprechende Aktionen ausführen.

Ich vermute, dass du im Internet (evtl. auch in der DP) etwas findest, um zu prüfen, ob eine WLAN-Verbindung vorhanden ist. Vielleicht reicht es schon, einen Server anzupingen und auf ein entsprechendes Timeout zu reagieren.

Reinhard Kern 24. Aug 2009 17:44

Re: Programmstart bestimmen
 
Hallo,

eine eigene Anwendung lohnt sich kaum, weil das Gleiche mit einer 2zeilgen Batchdatei geht:

sleep 10
start meineAnwendung.exe

sleep ist aus dem Resource Kit, Download bei Microssoft.

Gruss Reinhard

himitsu 24. Aug 2009 18:17

Re: Programmstart bestimmen
 
dann hat man immer noch das rumligende (maximal minimierte) Konsolenfenster ... die Anwendung könnte man solange wenigstens aus der Taskleiste entfernen :angel2:

Major1337 24. Aug 2009 19:01

Re: Programmstart bestimmen
 
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);

begin
try
 Progressbar1.Position := Progressbar1.Position +1;
 Application.ProcessMessages;
 if Progressbar1.Position = 100 then
  begin
    Timer1.Enabled := False;
    Progressbar1.Position := 0;
  end;
finally
shellexecute(0, 'open', pchar('C:\Programme\Zattoo\zatto1.exe'), nil, nil, 0);
end;
PS: Der Zatto Pfad ist nur mal testweise ^^


Ich bekomme den Fehler: Undeclare Indefier ShellExecute :O

turboPASCAL 24. Aug 2009 19:08

Re: Programmstart bestimmen
 
Es ist ja nun wirklich kein Ackt solch eine Funktion in die eigene Application zu implementieren.
Über einen Parameter kann man dann bestimmen ob bzw. wann das Programm "sarten" oder besser gesagt seine Funcktion aufnemen soll.
Dann braucht mal nicht einmal eine Zusatzprogramm nur einen Link mit dem entsp. Parameter im Autostartordner.

Es gibt ja zu dem unter Windows noch den Taskplaner (bzw. in Vischda der Aufgabenplaner)

generic 24. Aug 2009 19:12

Re: Programmstart bestimmen
 
Wie wäre es mit einen Dienst, welche als Abhängigkeit das Netzwerk hat?

Major1337 24. Aug 2009 19:17

Re: Programmstart bestimmen
 
Sorry, aber ich habe mich schon für ein Intro.exe entschieden, das vor dem Start aufgerufen wird. Habe nur noch den Fehler mit ShellExecute :(

Andreas L. 24. Aug 2009 19:36

Re: Programmstart bestimmen
 
Zitat:

Zitat von Major1337
Habe nur noch den Fehler mit ShellExecute :(

Delphi-Quellcode:
uses
  .., ShellAPI;

...

...

CODE

Major1337 24. Aug 2009 19:37

Re: Programmstart bestimmen
 
:P wollte grade schreiben das ich den Fehler gefunden hab ^^

Major1337 24. Aug 2009 19:44

Re: Programmstart bestimmen
 
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);

begin
try
 Progressbar1.Position := Progressbar1.Position +1;
 Application.ProcessMessages;
 if Progressbar1.Position = 100 then
  begin
    Timer1.Enabled := False;
    Progressbar1.Position := 0;
  end;
finally

ShellExecute(Handle, 'open', 'C:\Programme\test\test.exe', nil, nil, SW_SHOWNORMAL) ;

  end;
end;


Der Ladebalken lädt bis zum Schluss aber dann startet er nicht die exe

Andreas L. 24. Aug 2009 19:49

Re: Programmstart bestimmen
 
Wozu try-finally? Wie lautet der Rückgabewert von ShellExecute?

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  errorcode: Integer;
begin
  Progressbar1.Position := Progressbar1.Position +1;
  Application.ProcessMessages;
  if Progressbar1.Position = 100 then
  begin
    Timer1.Enabled := False;
    Progressbar1.Position := 0;
    errorcode := ShellExecute(Handle, 'open', 'C:\Programme\test\test.exe', nil, nil, SW_SHOW);
    if errorcode > 32 then
      ShowMessage('Fehler: ' + IntToStr(errorcode));
  end;
end;

Major1337 24. Aug 2009 20:09

Re: Programmstart bestimmen
 
wollte mit try-finally bewirken das er nach dem Laden direkt die *.exe öffnet.
War das mit dem Rückgabewert eine rhetorische Frage? :O hmm.. ich habe mal deinen Quellcode importiert, aber da tut sich trotzdem nix.. :(

Luckie 24. Aug 2009 20:28

Re: Programmstart bestimmen
 
Es wird auch keine ShowMessage angezeigt?

DeddyH 25. Aug 2009 08:20

Re: Programmstart bestimmen
 
Müsste das nicht auch eher
Delphi-Quellcode:
if errorcode < 33 then
heißen?

Major1337 25. Aug 2009 09:36

Re: Programmstart bestimmen
 
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Borland.Vcl.ComCtrls, System.ComponentModel, Borland.Vcl.StdCtrls,
  Borland.Vcl.ExtCtrls, ShellAPI;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    ProgressBar1: TProgressBar;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.nfm}

procedure TForm1.FormCreate(Sender: TObject);
var Bild : TImage;

begin


  Bild:= Timage.create(nil);
  Bild.picture.LoadFromFile('D:\bdetouch_Schleiferei\images\bild.bmp');
  Bild.autosize:=true;
  Bild.Top:= 15;
  Bild.Left:=0;
  Bild.Visible:=true;
  Bild.Parent := self;
 
end;
procedure TForm1.Timer1Timer(Sender: TObject);

begin
  Progressbar1.Position := Progressbar1.Position +1;
  Application.ProcessMessages;
  if Progressbar1.Position = 100 then
  begin
    Timer1.Enabled := False;
    Progressbar1.Position := 0;

     ShellExecute(Application.Handle, 'open', 'D:\Program\Ding.exe', nil, nil, SW_NORMAL);
   
  end;
end;

end.


Ich finde absolut nicht meinen Fehler bei ShellExecute, habe gegoogelt und überall gelesen das man an ShellExecute so die Parameter übergeben muss.

Fehlermeldung:
[Pascal Fehler] Unit1.pas(58): E2250 Es gibt keine überladene Version von 'ShellExecute', die man mit diesen Argumenten aufrufen kann

DeddyH 25. Aug 2009 09:41

Re: Programmstart bestimmen
 
SW_NORMAL sagt mir jetzt nichts, versuch mal SW_SHOWNORMAL.

Major1337 25. Aug 2009 09:42

Re: Programmstart bestimmen
 
funktioniert leider auch nicht mit SW_SHOWNORMAL :?

DeddyH 25. Aug 2009 09:44

Re: Programmstart bestimmen
 
Wenn ich mir Deine uses-Klausel anschaue, bin ich etwas verwirrt. Ist das jetzt Delphi Win32 oder Delphi.NET?

hoika 25. Aug 2009 09:45

Re: Programmstart bestimmen
 
Hallo,

nimm mal statt NIL ''

Bei mir wird das aber auch mit NIL compiliert.
Was ist das für ein Compiler ?
Sieht doch aus wie .Net ?

Wenn es .Net ist:
ShellExecute mit .Net


Heiko

Major1337 25. Aug 2009 10:33

Re: Programmstart bestimmen
 
es lag an .NET :P

DeddyH 25. Aug 2009 10:41

Re: Programmstart bestimmen
 
Es ist immer Gold wert, gleich in der richtigen Sparte zu posten :?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:39 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