Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Hilfe bei Autostart und .Bat Datei (https://www.delphipraxis.net/108265-hilfe-bei-autostart-und-bat-datei.html)

CreekMary 10. Feb 2008 13:13


Hilfe bei Autostart und .Bat Datei
 
Hallo

Ich bin grad dabei mein erstes Programm zu schreiben, darum bitte keine "Fremdwörter" :)

Also, mein Programm soll sich automatisch in die Registry als Autostart eintragen. Aus einem anderen Thread hier im Forum hab ich diesen Sourcecode für die Registry Eintragung einfach genommen.
Desweitere soll mein Programm nach 60 Minunten den PC automatisch herunterfahren (Gelöst per .BAT datei mit "Shutdown -s") und schließlich soll mein Programm sich auch noch von selbst beenden.

Hier ist erstmal der Source Code meines Programms:
Delphi-Quellcode:
unit MeinProgrammU;

interface

uses
  Windows, Messages, Registry, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
  var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CURRENT_USER;
    Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);
    Reg.WriteString('EigenesProgramm', ParamStr(0));
    Reg.CloseKey;
  finally
    Reg.Free;
    Sleep (3600000);
    WinExec('Shutdown.bat', SW_SHOWNORMAL);
    close;
end;
end;
end.
Nun gibt es folgende Probleme:

1. Das Programm beendent sich nicht.
2. Nach dem Neustart funktioniert meiner ansicht nach alles nur der PC wird nicht herunter gefahren.


Bitte beachten (und genau das finde ich das komische), dass bei ersten mal öffnen, das Programm seine Funktionen alles ausführt, nur beim nächsten mal, wo es über den Autostart gestartet wird funktioniert das herunterfahren nicht mehr =(

Hoffe ihr könnt mir helfen. Vielen Dank

lbccaleb 10. Feb 2008 13:26

Re: Hilfe bei Autostart und .Bat Datei
 
hallo und willkommen in der dp ;-) :dp: :dp:

dein problem ist deine sleep funktion, mit der sagst du ihm quasi, das er in dem quellcode erst na einer stunde weiter machen soll, deswegen beendet er das programm auch nicht, weil er quasi ne pause macht!!! auch dein 2 problem sollte daran ligen..


edit:
ach ja, mit dem runterfahren nach dem neustarten hat er wahrscheinlich probleme, weil er die "*.bat" datei nicht findet, denn bei dem neustart hat er einen anderen augenblicklichen pfad drinne, als wenn du dein programm direkt startest! abhilfe schafft dabei, eine pfadangabe mit dem winexec parameter zu übergeben..

und noch als anmerkung, die funktion winexec ist veraltet und nur noch für kompatiblität abwärtshalber vorhanden..
z.b. createprocess!!

rollstuhlfahrer 10. Feb 2008 13:27

Re: Hilfe bei Autostart und .Bat Datei
 
Hi CreekMary,
zuallererst Wilkommen in der DP!

Dann hab ich noch 5 Fragen:
1.) Hast du es schon mal mit kürzeen Zeiten für einen Testlauf versucht?
2.) Warum benutzt du eine BatDatei, wenn es auch in der EXE miteinkompiliert werden kann (MSDN-Library durchsuchenShellExecute(...))??
3.) Arbeitet die Anwendung richtig??
4.) Im Regestry-Zweig HKCU werden die Programme erst nach der Anmeldung ausgeführt. Wie sieht es da aus?
5.) Warum bei jedem Programmstart den Regestry-Key überschreiben, wenn er doch schon da ist?

rollstuhlfahrer

EDIT: über den Win-Befehl shutdown kann man mit Hilfe des -t eine bestimme Zeit festlegen, bis die Aktion ausgeführt wird.

CreekMary 10. Feb 2008 13:38

Re: Hilfe bei Autostart und .Bat Datei
 
Zitat:

Zitat von lbccaleb
dein problem ist deine sleep funktion, mit der sagst du ihm quasi, das er in dem quellcode erst na einer stunde weiter machen soll, deswegen beendet er das programm auch nicht, weil er quasi ne pause macht!!! auch dein 2 problem sollte daran ligen..

An der Sleep unktion kanns meiner Ansicht nach nicht liegen, da das Programm ja, per Hand gestartet, einwandfrei läuft. Das Problem ist nur, das wenn das Programm nach einem Neustart automatisch im Hintergrund läuft (durch den Autostart eintrag in der Registry), der PC nicht mer herunter gefahren wird. Das Programm ist aber gestartet worden (Autostart funktioniert !!!) da bin ich mir sicher da man das Programm ja in der Taskleiste und im Taksmanager sehn kann.


Zitat:

Zitat von rollstuhlfahrer
Dann hab ich noch 5 Fragen:
1.) Hast du es schon mal mit kürzeen Zeiten für einen Testlauf versucht? Ja aber es funktioniert trotzdem nicht. Ich hab es schon mit 10 Sekunden, 30 Sekunden und 1 Minute probiert.
2.) Warum benutzt du eine BatDatei, wenn es auch in der EXE miteinkompiliert werden kann ( ShellExecute (...))?? Weil ich mich mit dem ShellExecute nicht auskenne. Da sind mir zu viele Parameter drinn, die ich nicht verstehe. Ich weiß das Winexec veraltert ist aber es ist so schön einfach. Wenn du mir bei der ShellExecute hilfst nehm ich auch gern die =)
3.) Arbeitet die Anwendung richtig?? Beim ersten mal Programmstart funktioniert alles !!! Nach dem Neustart des PCs und des Starts des Programms per Autostart Funkzioniert alles auser das Herunterfahrn des PCs funktioniert alles.
4.) Im Regestry-Zweig HKCU werden die Programme erst nach der Anmeldung ausgeführt. Wie sieht es da aus? Versteh ich net was soll damit sein?
5.) Warum bei jedem Programmstart den Regestry-Key überschreiben, wenn er doch schon da ist? Weil ich nicht weiß wie ich das programmiern soll, dass das Programm prüft ob schon eine Eintragung vorhanden ist.

Ich hoffe ihr versteht wo mein Problem liegt und ich nerve euch nicht zu doll =)

Danke jetzt schon einmal

lbccaleb 10. Feb 2008 13:43

Re: Hilfe bei Autostart und .Bat Datei
 
schau dir noch mal den edit in meinem 1 post an^^

und für shellexecute findest du hier was:

shellexecute und sich helfen dir auch welche hier bei der anwendung von shellexecute ;-)

sk0r 10. Feb 2008 13:50

Re: Hilfe bei Autostart und .Bat Datei
 
Anstatt die BAT-Datei zu starten, solltest du lieber
Delphi-Quellcode:
ExitWindowsEx(EWX_SHUTDOWN, 0);
nehmen.

CreekMary 10. Feb 2008 14:18

Re: Hilfe bei Autostart und .Bat Datei
 
also das hier:
Zitat:

Zitat von sk0r
Anstatt die BAT-Datei zu starten, solltest du lieber
Delphi-Quellcode:
ExitWindowsEx(EWX_SHUTDOWN, 0);
nehmen.

funktioniert irgendwie garnicht da macht er einfach nix.

und wegen dem hier:
Zitat:

Zitat von lbccaleb
edit:
ach ja, mit dem runterfahren nach dem neustarten hat er wahrscheinlich probleme, weil er die "*.bat" datei nicht findet, denn bei dem neustart hat er einen anderen augenblicklichen pfad drinne, als wenn du dein programm direkt startest! abhilfe schafft dabei, eine pfadangabe mit dem winexec parameter zu übergeben..

versteh ich schon was du meinst, nur das komische ist das er die .Bat datei ja findet. Falls ich mich da irre was für eine Lösung gibts den für das Problem? Den mit dem Shell Execute is das ja dann noch nicht vom Tisch gewischt.

lbccaleb 10. Feb 2008 14:29

Re: Hilfe bei Autostart und .Bat Datei
 
na gebe einfach eine pfad an, (ich weiß ja nicht wo deine datei sich befindet) zb so:
Delphi-Quellcode:
    WinExec('C:\Shutdown.bat', SW_SHOWNORMAL);
ich denke mal dann sollte er das mit dem runterfahren machen..

rollstuhlfahrer 10. Feb 2008 14:30

Re: Hilfe bei Autostart und .Bat Datei
 
nochmal zu ShellExecute:

Bei MSDN staht folgendes Beispiel:
Code:
ShellExecute(handle, 'open', file, params, verz, SW_SHOWNORMAL);
Setze einfach für file den kompletten absoluten Dateinamen ein. bei params kannst du NULL eintragen und bei verz evt. auch.
hieße:
Code:
ShellExecute(handle, 'open', 'C:\Verzeichnis1\Verzeichnis2\Datei.bat', NULL, NULL, SW_SHOWNORMAL);
Ob das mit NULL so einfach geht bin ich mir nicht sicher (MSDN bezieht sich sehr auf C-Compiler) ansonsten einfach ein LeerString


rollstuhlfahrer

PS: shutdown sieht so aus
Code:
ShellExecute(handle, 'open', 'shutdown', '-r -f -t 3600', NULL, SW_SHOWNORMAL);  reboot in 3600 sek

CreekMary 10. Feb 2008 15:46

Re: Hilfe bei Autostart und .Bat Datei
 
Zitat:

PS: shutdown sieht so aus
Code:
ShellExecute(handle, 'open', 'shutdown', '-r -f -t 3600', NULL, SW_SHOWNORMAL);  reboot in 3600 sek

Wenn ich dies hier anwende sagt er mir:
Inkompatible Typen: 'Variant' und 'PChar'

:gruebel: :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:40 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz