AGB  ·  Datenschutz  ·  Impressum  







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

Eingabeaufforderung starten

Ein Thema von S - tefano · begonnen am 29. Mai 2003 · letzter Beitrag vom 30. Mai 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#1

Eingabeaufforderung starten

  Alt 29. Mai 2003, 16:34
Hi,

ich schreib zur Zeit an einem Programm, mit dem ich java- Klassen über einen Java- Interpreter starten lasse. (normalerweise mach ich das von dem Java- Editor heraus, den ich benutze. Ich würd die aber auch gerne so starten, ohne zuerst den Editor zu öffnen)
Diese Klassen verhalten sich wie DOS- Programme (also keine GUI, einfach nur Konsolenanwendung- in nem Dosfenster).
Wenn ich die Klassen vom Editor aus starte, dann ruft der die Eingabeaufforderung auf, übergibt als einen Parameter den Dateinamen des Interpreters, und dahinter dann für den Interpreter als Parameter wo er die Klasse findet.
Wenn die Klassen durchgelaufen sind (z.B. ne kleine Zinsrechnung), dann gehn sie einfach aus und das Dosfenster is noch da, zurückgekehrt zum Ordner in dem es vorher war.
Ich habe jetzt mal ausprobiert ob man nicht einfach nur den Interpreter mit seinen nötigen Parametern ausführen kann. Klappt auch soweit ganz gut. Wenn allerdings bei dieser Variante die Klasse zu Ende ist, dann verschwindet das Fenster sofort, und der User kann z.B. nicht mehr die letzte Ausgabe lesen.
Das ist mein Problem.
Um dies zu lösen müsste ich entweder dem Fenster des Interpreters sagen, dass es nach Beendigung der Klasse auf nen Befehl zum Schließen warten soll (z.B. Klick aufs X), oder ich muss den Interpreter- Aufruf der Eingabeaufforderung übergeben, weil die ja nach Beendigung der Klasse offen bleibt.
Bei ersterem hab ich partout keine Ahnung wie das gehen soll, und bei zweiterem stehe ich vor dem Problem dass ich nicht weiß, wie ich gewährleisten kann dass mein Programm auf jedem Windows- Rechner die Eingabeaufforderung findet.
Das könnte man einerseits dadurch lösen dass man immer den Systemordner ermittelt und dann die Datei aufruft, aber die Eingabeaufforderung heißt ja -wenn ich mich recht erinnere- nicht auf jeder Windows- Version gleich.
Dann gäbs noch die Möglichkeit einfach "ein keyword", wie z.B. "command" oder "cmd" auszuführen. Das klappt unter Windows XP, aber gibt es diese keywords auch unter Win98, Me, NT und 2000?

Habt ihr andere Lösungsansätze, oder wisst ihr mehr über diese keywords oder wie man den Pfad zur Eingabeaufforderung unter den verschiedenen WindowsVersionen herausfindet?
Wenn ihr eine der anderen Windosen außer XP habt, könntet ihr die keywords ja auch mal ausprobieren und mir dann sagen, welche klappen und welche nicht.

Danke schonmal,

S - tefano
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 29. Mai 2003, 16:51
Moin Stefano,

die Umgebungsvariable COMPSEC sollte auf jedem Windowssystem den Pfad zum Commandoprozessor enthalten.
(genaugenommen gilt dies i.d.R. schon seit DOS)

Da dieser normaler Weise aber auch immer im Suchpfad liegt, könntest Du diesen auch mit einem Aufruf von COMMAND.COM, ohne Pfadangabe (!), starten.
Für XP weiss ich es nicht, aber ansonsten gibt es auch bis incl. W2K die COMMAND.COM. Es muss nicht zwingend die CMD.EXE sein, voraussetzt, man kann auf die NT spezifischen Erweitrungen verzichten.

Eine dritte Variante, ähnlich der zweiten:
Du prüfst beim Programmstart die Windowsversion (NT oder nicht) und trägst dann, in Abhängigkeit der Version, den Namen des jeweiligen Commandoprozessors (COMMAND.COM oder CMD.EXE) in eine globale Variable/Feld ein. Die Pfadangabe sollte ja grundsätzlich entfallen können.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
chris

Registriert seit: 24. Mai 2003
Ort: Düsseldorf
196 Beiträge
 
Delphi 2009 Professional
 
#3
  Alt 29. Mai 2003, 19:14
hi,

du könntest auch die konsolenausgabe abfangen und sie in deinem programm anzeigen
Chris
D2009.4 | Vista SP2 x32
  Mit Zitat antworten Zitat
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#4
  Alt 29. Mai 2003, 20:12
Hi,

habs jetz mal auf Christian Seehases Art ausprobiert. Die Methode an sich is bestimmt ganz gut, aber irgendwie krieg ich das mit dem Starten mit Parametern nicht hin:

Delphi-Quellcode:
Param:= ' -java.exe -classpath "' + strpath + '" "' + strname + '"'; //alles hinter "java.exe" sind Parameter für den Interpreter
ShellExecute(application.Handle, 'open', PChar(commandedit.text), PChar(param), PChar(extractfilepath(interpretedit.Text)), SW_ShowNormal); //in commandedit steht der Shortcut zur Eingabeaufforderung drin (cmd.exe), param siehe oben, und interpretedit.text entält den kompletten Pfad zum Interpreter
Dachte es hilft vielleicht was wenn ich der Eingabeaufforderung sage, in welchem Ordner sie die java.exe findet. Hab vorher kein Verzeichnis übergeben, dafür vor java.exe den kompletten Pfad angegeben.
Aber irgendwie passiert bei diesem Aufruf nix.
Die Eingabeaufforderung geht an, und das wars dann auch. Ich befinde mich dann entweder im Programmordner (wenn ich kein default directory mitgegeben hab) oder im Verzeichnis des Interpreters.
Aber kein Interpreter und kein Java- Programm starten.
Mach ich irgendwas falsch? K, das is wohl klar. Aber wie übergibt man der Eingabeaufforderung denn dann Parameter?

Bis dann,

S - tefano
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
chris

Registriert seit: 24. Mai 2003
Ort: Düsseldorf
196 Beiträge
 
Delphi 2009 Professional
 
#5
  Alt 29. Mai 2003, 20:45
hi,

ich habe mal die erfahrung gemacht das ShellExecute die parameter einfach übergangen hat.
ich habe sie dann einfach mit in den 'executablestring' (bei dir commandedit.text) gepackt und die params leer gelassen, danach klappte es dann.
ich habe allerdings keine ahnung mehr unter welchen umständen das damals war, vielleicht hilft es dir ja.
Chris
D2009.4 | Vista SP2 x32
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 29. Mai 2003, 21:28
Moin Stefano,

wenn die Java.exe nicht im Suchpfad steht, muss der Pfad mit angegeben werden.
Das - vor der java.exe sollest Du auch mal weglassen, ausserdem braucht der cmd.exe noch ein /c bzw. /k vor dem zu startenden Programm.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#7
  Alt 29. Mai 2003, 21:49
@chris:
Auch ne Idee, werds mal ausprobieren.
@Seehase:
Wofür steht dann das /c oder /k? Gibts noch andere "Schalter" die man übergeben kann/muss?

S - tefano
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8
  Alt 29. Mai 2003, 21:53
Moin Stefano,

bei /c wird der Befehl ausgeführt, und die Konsole anschliessend geschlossen, bei /k bleibt sie anschliessend weiter offen.
Das hattest Du doch selber schon geschrieben

BTW: Ein Blick in die Windows Hilfe zum Thema CMD.EXE kann auch ganz hilfreich sein
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#9
  Alt 29. Mai 2003, 23:05
Hi,

das mit dem /k hat geklappt, den Parameter konnte ich auch seperat übergeben.
Der Aufruf ist fehlgeschlagen, weil die Namen der Verzeichnisse irgendwie zu lang waren. Ich hab sie dann mit ExtractShotPathName ins 8.3 Format gekürzt, jetzt klappt alles.
Danke nochmal!
Ach übrigens, dieses "k" hab ich ja laut dir, Seehase, schon geschrieben... ich glaub du meintest das in meinem ersten Post
Sollte eigentlich nur Kurzform von "ok" sein, sodass dann der letzte Satz den vorherigen relativiert, wo ich frage ob ich was falsch mache. Aber das war ja klar, sonst hättes ja geklappt.
Aber jetz gehts ja zum Glück.
Vielen Dank

Bis dann,

S - tefano
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#10
  Alt 29. Mai 2003, 23:08
Achja:
Meine Windows- Hilfe hatte zu dem Thema nix parat. Holt die sich solfe Infos aus dem Internet? Das hab ich ihr nämlich verboten...
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01:15 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