TProcess für shutdown Anwendung

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
darkhawk
Beiträge: 1
Registriert: Do 4. Aug 2016, 13:21
OS, Lazarus, FPC: Win10
CPU-Target: 64Bit

TProcess für shutdown Anwendung

Beitrag von darkhawk »

Hi Leute,
ich bin grade dabei ein kleines shutdown Programm in Lazarus zu schreiben.
Hier ein grober Überblick über die (angestrebte) Funktionsweise:
1. man gibt eine Zeit ein, wann der PC runtergefahren werden soll
2. man klickt auf den Start Button -->
-die eingegebene Zeit wird zur aktuellen Systemzeit addiert
-es wird ein TProcess erstellt, ihm ein Dateipfad und Parameter zugeordnet
-und es wird ein Timer gestartet
3.der Timer vergleicht jede Sekunde die Systemzeit mit der vorher berechneten Zeit --> wenn diese gleich sind soll TProcess ausgeführt werden und der Timer beendet werden

Meine Probleme:
1.Nach dem Ablauf der Zeit zählt der Timer wieder hoch und es wird kein TProcess ausgeführt.
2.Ich habe heute versucht das Problem zu beheben, jetzt bekomme ich jedoch eine Fehlermeldung wenn ich das Programm ausführen möchte: "Projekt project1 hat Exception-Klasse >>EReadError<< ausgelöst mit der Meldung: Stream read error Bei Adresse 10003B1A5"

Vielen Dank für euer Hilfe
darkhawk

Hier ist noch der Code:

Code: Alles auswählen

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls, Process;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Panel1: TPanel;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  t:ttime;
  ts:string;
  AProcess:TProcess;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
 
procedure TForm1.Button1Click(Sender: TObject);
var h,m,s:string;
begin
AProcess:=TProcess.Create(nil);
AProcess.Executable:='C:\Windows\System32\shutdown.exe';
with Aprocess.parameters do begin
add('-s');
add('-f');
end;
h:=edit2.text;
m:=edit3.text;
s:=edit4.text;
if h='' then h:='00';
if m='' then m:='00';
if s='' then s:='00';
ts:=(h)+(':')+(m)+(':')+(s);
t:=strtotime(ts)+now;
Edit1.Text:=ts;
Panel1.Visible:=False;
Edit1.Visible:=True;
Button2.Visible:=True;
Button3.Visible:=True;
timer1.Enabled:=true;
 
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  Timer1.Enabled:=False;
  Panel1.Visible:=True;
  Edit1.Visible:=False;
  Button2.Visible:=False;
  Button3.Visible:=False;
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
  Timer1.Enabled:=False;
  t:=strtotime(ts)+now;
  timer1.Enabled:=true;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Edit1.Text:=timetostr(t-now);
if now=t then begin
   AProcess.Execute;
   timer1.Enabled:=false;
 end;
 
 
end;
 
end.

Thandor
Beiträge: 153
Registriert: Sa 30. Jan 2010, 18:17
OS, Lazarus, FPC: Windows 10 64Bit/ lazarus 3.0 mit FPC 3.2.2 (32Bit + 64bit)
CPU-Target: 64Bit
Wohnort: Berlin

Re: TProcess für shutdown Anwendung

Beitrag von Thandor »

Setze doch einfach den Shutdownbefehl ab. Der bietet schon die Möglichkeit das System in x Sekunden herunter zu fahren.
http://wiki.freepascal.org/Executing_External_Programs

www.windows7-tuning.de hat geschrieben:shutdown /s /t 180 (Rechner wird in 3 Minuten runtergefahren)

shokwave
Beiträge: 470
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: TProcess für shutdown Anwendung

Beitrag von shokwave »

Hallo,

ich denke dein Problem liegt bei "now", welches nicht nur die aktuelle Zeit, sondern auch das Datum enthält und somit nicht mit deiner Zeit "t" verglichen werden kann.

Probier mal "time" statt "now" zu nutzen.
mfg Ingo

Antworten