Thema: Delphi ShellExecute

Einzelnen Beitrag anzeigen

JB-1990

Registriert seit: 3. Okt 2007
56 Beiträge
 
#1

ShellExecute

  Alt 3. Okt 2007, 19:19
Hey ho Leuz,
ich hab mich vor einiger Zeit schon an ein Programm gesetzt, was einen Befehlgeneriert, den man dann bei "Start"-->"Ausführen" einfügen kann...bis jetzt muss man wie gesagt den Befehl selbst eintragen. Irgendwann hab ich etwas von ShellExecute gelesen und mich ran gemacht, ist auch nicht so schwer zu verstehen der Befehl, 5min. kann man ihn schon für einfache Sachen verwenden.
Mein Programm soll den Befehl jetzt mittels ShellExecute automatisch eintragen. Da das Programm aber Zeit berechnet und diese bis jetzt immer in einem Memo ausgegeben hat:

Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var S1,S2,M1,M2,SE1,SE2,e,x,y,z :double;
 begin
  {Variablen}
  S1:=StrToFloat(Combobox1.Text);
  M1:=StrToFloat(Combobox2.Text);
  SE1:=StrToFloat(Combobox3.Text);
  S2:=StrToFloat(Combobox4.Text);
  M2:=StrToFloat(Combobox5.Text);
  SE2:=StrToFloat(Combobox6.Text);
  x:=0;
  y:=0;
  z:=0;
  {Programm}
...
IF S1<S2 THEN BEGIN
   IF M1=M2 THEN BEGIN
    IF SE1=SE2 THEN BEGIN // std "<" min "=" sec. "="
     WHILE S1<>S2 DO BEGIN
      S1:=S1+1;
       z:=z+1;
     end;
     e:=z*3600;
     Memo1.Text:='shutdown -s -f -t '+FloatToStr(e)+' //Ausgabe im Memofeld XD
    end;
    IF SE1<SE2 THEN BEGIN // std "<" min "=" sec. "<"
     WHILE S1<>S2 DO BEGIN
      S1:=S1+1;
       z:=z+1;
     end;
     WHILE SE1<>SE2 DO BEGIN
      SE1:=SE1+1;
        x:=x+1;
     end;
     e:=z*3600+x; //z*3600, denn 1h hat 3600sekunden
     Memo1.Text:='shutdown -s -f -t '+FloatToStr(e)+' '       // Befehl funktioniert nur mit Sekunden
     end;
    IF SE1<>SE2 THEN BEGIN // std "<" min "=" sec. ">"
     WHILE SE1<>60 DO BEGIN
      SE1:=SE1+1;
        x:=x+1;
     end;
     SE1:=SE1*0;
     WHILE SE1<SE2 DO BEGIN
      SE1:=SE1+1;
        x:=x+1;
     end;
     M1:=M1+1;
     WHILE M1<>60 DO BEGIN
      M1:=M1+1;
       y:=y+1;
     end;
     M1:=M1*0;
     WHILE M1<>M2 DO BEGIN
      M1:=M1+1;
       y:=y+1;
     end;
     S1:=S1+1;
     WHILE S1<>S2 DO BEGIN
      S1:=S1+1;
       z:=z+1;
     end;
     e:=z*3600+y*60+x; //y*60 (1min=60sec.)
     Memo1.Text:='shutdown -s -f -t '+FloatToStr(e)+' ';
    end;
   end;
...
end.
e= Zeit in Sekunden
x= Zählvariable für Sekunden
y= Zählvariable für Minuten
z= Zählvariable für Stunden

Wie aus dem Auszug meines Quelltextes zu entnehmen ist, wird "e" aus verschiedenen Faktoren berechnet, also variabel ist.
Also hab ich versucht das Programm via ShellExecute so zu gesatlten, dass man nurnoch Buttons drücken muss:

ShellExecute(Handle,nil,'C:\Windows\system32\cmd.exe',('/c shutdown -a'),nil,1) /c = führt den Befehl aus und schließt "cmd.exe"

Der Befehl oben funktioniert einwandfrei.

JETZT kommen wir zum eigentlichen Problem:

"e" ist variabel, somit ist der Befehl immer anders. Diesen muss ich jedoch in den 4. Parameter reinschreiben.
Das Problem ist, die Parameter von ShellExecute sind vom Typ char. aber ich arbeite hier mit Strings, gibt es irgendwie eine Möglichkeit, wie ich einen Befehl, der generiert werden muss, in diesen 4. Parameter bekomme?

z.B.:

In welcher Zeit soll der PC heruntergefahren werden?: xx Stunden xx Minuten xx Sekunden

xx = Anzahl der Stunden/Minuten/Sekunden, die durch den Benuzter eingetragen werden.


DANKE im Voraus.
  Mit Zitat antworten Zitat