Entwickler-Ecke
Windows API - brauche f1, scheiter an variablen
kens - Mo 09.07.07 15:23
Titel: brauche f1, scheiter an variablen
hi,
ich bau mir nen kleines programm um meinen pc nach eingestellter zeit runterzufahren,
doch die variablen sind in integer und sollen als pointer eingegeben werden, guckt am besten selbst:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button1Click(Sender: TObject); var a,b,c : integer; begin a := StrToInt(edit1.text); b := StrToInt(edit2.text); c := a*3600+b*60; ShellExecute(0, Nil,'C:\WINDOWS\system32\shutdown.exe', '-s -t',pchar(c) , nil, SW_NORMAL); end; |
es soll C:\WINDOWS\system32\shutdown.exe -s -t 21 ausgeführt werden und als 21 soll die variable c eingesetzt werden
vielen dank
Moderiert von
Gausi: Delphi-Tags hinzugefügtModeriert von
Christian S.: Topic aus Dateizugriff verschoben am Mo 16.07.2007 um 20:06
ZeitGeist87 - Mo 09.07.07 15:26
Hallo!
Täusch ich mich, oder sind die Argumente für Shellexecute falsch.. :gruebel:
Dunkel - Mo 09.07.07 15:29
Hallo!
Delphi-Quelltext
1:
| ShellExecute(0, nil, PChar('C:\WINDOWS\system32\shutdown.exe -s -t'+IntToStr(c)), nil , nil, SW_NORMAL); |
könnte funktionieren.
ZeitGeist87 - Mo 09.07.07 15:35
Dunkel hat folgendes geschrieben: |
Hallo!
Delphi-Quelltext 1:
| ShellExecute(0, open, PChar('C:\WINDOWS\system32\shutdown.exe -s -tspace'+IntToStr(c)), nil , nil, SW_NORMAL); |
könnte funktionieren. |
Space = Leerzeichen :wink:
kens - Mo 09.07.07 15:51
@zeitgeist: da stürzt das programm ab, aber ich kann compilieren
@dunkel: da passiert nix, aber ich kann compilieren
ZeitGeist87 - Mo 09.07.07 15:58
Shutdown funktioniert erst ab W2K!!!
Delphi-Quelltext
1:
| shellExecute(handle, pchar('command'), pchar('shutdown.exe -s -t ' + inttostr(c)), nil, pchar(''), sw_ShowNormal); |
LG
Stefan
kens - Mo 09.07.07 16:02
das funktioniert auchnich und ich hab xp und schonmal ohne variablen getestet,das funktioniert
wenn ich jezz nochmal teste stüzt das programm mit folgender meldung ab: project1.exe raised exception class EConvertError with message ""std" is not a valid integer value. process stopped. use step or run to continue, also könnte das von dunkel doch funktioneren, muss nurma neustarten oder so
ZeitGeist87 - Mo 09.07.07 16:06
kens hat folgendes geschrieben: |
| das funktioniert auchnich und ich hab xp und schonmal ohne variablen getestet,das funktioniert |
Delphi-Quelltext
1:
| ShellExecute(0, 'open', PChar('C:\WINDOWS\system32\shutdown.exe -s -t '+IntToStr(c)), nil , nil, SW_NORMAL); |
kens - Mo 09.07.07 16:10
da passiert garnix, geht das bei dir??
ich mein wenn am anfang dieses open steht gehts nich und wenn ich das pchar vor alles setzte stürzt das programm mit dem fehler ab
ZeitGeist87 - Mo 09.07.07 16:14
bin gleich daheim..dann probier ichs..
kens - Mo 09.07.07 16:26
vergiss nich mit start -> ausführen -> shutdown -a das abzubrechen
ZeitGeist87 - Mo 09.07.07 16:30
ich kenn den befehl sehr gut, trotzdem danke :wink:
ich würde in den befehl noch ein -f (Force) einbauen, denn sonst bekommst du probleme wenn du zum bleistift ein word-dokument offen hast..dann schließt er es nicht und der pc fährt herunter :)
LG
Stefan
BenBE - Mo 09.07.07 16:30
Warum so umständlich ??? Hier im Forum gibt's ne Anleitung, wie das ganze mit InitiateSystemShutdown viel einfacher geht ... Man müsste halt mal suchen ...
Ach ja: F1 findest Du in der obersten Reihe, 2. Taste von Links ...
kens - Mo 09.07.07 16:42
ne ich würds gern übern die shutdown.exe machen
und ich such keine taste sondern hilfe, is doch die f1 funktion :)
Timosch - Mo 09.07.07 16:53
Was hast du den gegen ExitWindowsEx:
http://www.delphi-library.de/topic_Windows+beendenneustarten_8272.htmlEin externes Programm aufzurufen ist die schlechteste Möglichkeit, so was zu machen. Ich hab selbst unter Win2k komischerweise keine shutdown.exe (Oh, im Resource Kit ist eine...). Wenn es API-Funktionen gibt, dann benutzt man API-Funktionen.
kens - Mo 09.07.07 21:26
naja ich wollt das nur ganz einfach machen, da ich das sonst unter start ausführen selbst in sekunden eingebe, kann ja nich so schwer sein ;)
Calculon - Do 12.07.07 12:28
Um mal zu deinem ursprünglichen Code zurückzukommen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Button1Click(Sender: TObject); var a,b,c : integer; str: string; begin a := StrToInt(edit1.text); b := StrToInt(edit2.text); c := a*3600+b*60; str := '-s -t ' + inttostr(c); ShellExecute(0, Nil,'C:\WINDOWS\system32\shutdown.exe', PChar(str), nil, SW_NORMAL); end; |
Gruß
Calculon
--
kens - So 15.07.07 12:50
dankeeeeeeeeeeeeeeeeeeeeee @ calculon :D
zu matin: hab ewig nicht mit delphi zu tun gehabt und dachte ich hab es hier mit profis zu tun die helfen und nich nerven (nich so böse gemeint wies klingt) ... in meinen augen sah das ganz einfach aus und aus fehlern lernt man ja, aber mich da durch ewige tutorials zu schlagen nur um eine funktion zu erstetzen die ich schon habe ist in meinen augen zeitverschwendung.
wenn mir jetzt noch jemand sagt, warum die exception nicht funktionert bin ich wunschlos glücklich :D
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| procedure TForm1.Button1Click(Sender: TObject); var a,b,c : integer; str: string; begin try a := StrToInt(edit1.text); b := StrToInt(edit2.text); c := a*3600+b*60; if c <= 299 then begin str := '-s -t ' + inttostr(c); ShellExecute(0, Nil,'C:\WINDOWS\system32\shutdown.exe', PChar(str), nil, SW_NORMAL); end else begin ShowMessage ('Wert ist zu klein! Mindestens 5 Minuten'); edit1.Text := 'Stunden'; edit2.Text := 'Minuten'; end; except ShowMessage ('Keine erlaubte Eingabe!'); edit1.Text := 'Stunden'; edit2.Text := 'Minuten'; end; end; |
ZeitGeist87 - Mo 16.07.07 16:14
kens hat folgendes geschrieben: |
dankeeeeeeeeeeeeeeeeeeeeee @ calculon :D
zu matin: hab ewig nicht mit delphi zu tun gehabt und dachte ich hab es hier mit profis zu tun die helfen und nich nerven (nich so böse gemeint wies klingt) ... in meinen augen sah das ganz einfach aus und aus fehlern lernt man ja, aber mich da durch ewige tutorials zu schlagen nur um eine funktion zu erstetzen die ich schon habe ist in meinen augen zeitverschwendung.
wenn mir jetzt noch jemand sagt, warum die exception nicht funktionert bin ich wunschlos glücklich :D
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| procedure TForm1.Button1Click(Sender: TObject); var a,b,c : integer; str: string; begin try a := StrToInt(edit1.text); b := StrToInt(edit2.text); c := a*3600+b*60; if c <= 299 then begin str := '-s -t ' + inttostr(c); ShellExecute(0, Nil,'C:\WINDOWS\system32\shutdown.exe', PChar(str), nil, SW_NORMAL); end else begin ShowMessage ('Wert ist zu klein! Mindestens 5 Minuten'); edit1.Text := 'Stunden'; edit2.Text := 'Minuten'; end; except on e: exception do begin ShowMessage ('Keine erlaubte Eingabe!'); edit1.Text := 'Stunden'; edit2.Text := 'Minuten'; end; end; end; | |
Delete - Mo 16.07.07 17:22
1. Exceptions sind nicht dafür gedacht fehlerhafte Eingaben abzufangen.
2. Benötigt shutdown.exe administrative Rechte.
3. Bist du damit zu Betriebssystem < Windows XP inkompatible.
Ich sehe da eigentlich nur Nachteile. Und ein Programierer, der zu faul ist eine gescheite Lösung zu implementieren...
Timosch - Mo 16.07.07 17:27
Luckie hat folgendes geschrieben: |
1. Exceptions sind nicht dafür gedacht fehlerhafte Eingaben abzufangen.
2. Benötigt shutdown.exe administrative Rechte.
3. Bist du damit zu Betriebssystem < Windows XP inkompatible.
Ich sehe da eigentlich nur Nachteile. Und ein Programierer, der zu faul ist eine gescheite Lösung zu implementieren... |
Kann ich nur beipflichten. Man ruft keine exe auf, um eine Aktion durchzuführen, sondern verwendet die API-Funktionen des Betriebssystems, in dem Fall ExitWindowsEx. Wenn ich will, dass der Benutzer Text eingibt, rufe ich doch auch nicht über ShellExecute den Notepad auf, sondern lege ein TMemo auf mein Formular...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!