AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ShellExecute

Ein Thema von JB-1990 · begonnen am 3. Okt 2007 · letzter Beitrag vom 4. Dez 2008
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
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
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

Re: ShellExecute

  Alt 3. Okt 2007, 19:22
Hallo, Du kannst Strings direkt nach PChar casten. Wenn also Deine Variable e dem '/c shutdown -a' entspricht:ShellExecute(Handle,nil,'C:\Windows\system32\cmd.exe',PChar(e),nil,1); P.S.: Willkommen in der DP

[edit] Quatsch, e ist ja eine Double, also müsstest Du den 4. Parameter erst formatieren. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
LAWn-M0W3R

Registriert seit: 31. Jul 2006
Ort: Potsdam / Berlin
38 Beiträge
 
#3

Re: ShellExecute

  Alt 3. Okt 2007, 19:28
Hallo,
überhaupt kein Problem:
ShellExecute(Handle,nil,'C:\Windows\system32\cmd.exe',('/c shutdown -a'),PChar([ZeitVar: string]),SW_Hide) Such dir aber lieber mal ne andere Methode zum runterfahren. Hab gerade keine da, aber da gibts auf jeden Fall noch andere Möglichkeiten. So kannst du das runterfahren schwer stoppen, falls noch irgendetwas sein sollte. Such dir lieber ne Methode zum direkten runterfahren, ohne dieses komische Fenster, und lass dein Prog die Zeit zählen!

Viel Glück
Max
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#4

Re: ShellExecute

  Alt 4. Okt 2007, 12:23
Nimm doch gleich shutdown.exe, was bei WINDOWS dabei ist.
Mit shutdown.exe /? kannst Du Dir die Parameter anzeigen lassen.

z.B.:
Delphi-Quellcode:
If FileExists('shutdown.exe') then
    WinExec('shutdown.exe -i -s -f -t 10 -c "SHUTDOWN in 10 Seconds"', SW_SHOW);
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#5

Re: ShellExecute

  Alt 4. Okt 2007, 12:38
Das was du in die Memo schreibst, kannst du gleich so ausführen lassen -> ShellExecute (Handle, 'open', 'cmd.exe', PChar ('/c ' + Memo1.Text), nil, SW_SHOW); Allerdings sollte man hier nicht "Memo1.Text" nehmen, da du nicht immer 'nen Memo in deinen Anwendungen rumschleppen wirst. Daher am besten in ne String-Variable ablegen, die in der Klasse (private) deklariert ist und diese statt Memo1.Text verwenden.

Ich würde aber auch nicht "ShellExecute" nehmen, da diese Funktion eigentlich dazu gedacht ist, um mit der Win-Shell verknüpfte Dateien zu öffnen, z.B. .doc, .jpg, ... Damit Programme damit zu starten ist eigentlich ein Missbrauch der Funktion. Schau dir hierzu lieber mal "WinExec" oder "CreateProcess" an.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#6

Re: ShellExecute

  Alt 4. Okt 2007, 12:53
WinExec gilt schon seit Delphi 2 als veraltet
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#7

Re: ShellExecute

  Alt 4. Okt 2007, 13:00
Funzt aber trotzdem noch gut ... ^^
  Mit Zitat antworten Zitat
LAWn-M0W3R

Registriert seit: 31. Jul 2006
Ort: Potsdam / Berlin
38 Beiträge
 
#8

Re: ShellExecute

  Alt 9. Okt 2007, 20:12
@hathor: Du machst im Prinzip genau dasselbe wie ich!
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#9

Re: ShellExecute

  Alt 9. Okt 2007, 21:24
Hier mal zwei andere Möglichkeiten den Rechner herunterzufahren :

Link 1
Link 2
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: ShellExecute

  Alt 9. Okt 2007, 21:30
Zitat von Nuclear-Ping:
Funzt aber trotzdem noch gut ... ^^
unter Vista auch noch? Und bei der nächsten Windowsversion auch noch? Irgendwann wird es weg rationalisiert und man ist gut beraten wenn man die Funktion dann nicht verwendet hat.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:01 Uhr.
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