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.