AGB  ·  Datenschutz  ·  Impressum  







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

Konolenanwendung / DOS-Funktionen

Ein Thema von Desty · begonnen am 2. Mär 2007 · letzter Beitrag vom 2. Mär 2007
Antwort Antwort
Desty

Registriert seit: 29. Jul 2006
2 Beiträge
 
Delphi 2005 Personal
 
#1

Konolenanwendung / DOS-Funktionen

  Alt 2. Mär 2007, 08:48
Hallo Forum,

das ist mein erster Post; viele Grüße aus Neuburg a. d. Donau.

Ich steige gerade wieder hobbymäßig in Delphi ein und möchte ein kleines Programm entwicklen, dass MOPAC2007 steuert (semiempirisches Rechenprogramm zum Berechnen von Molekülgeometrien etc., s. OpenMopac.Net).
Ich habe zu meinem Problem reichlich gelesen (ich weiß also, dass es diverse DOS-Befehle-Threads gibt), keine Lösung trifft meine kleinen Fragen richtig.
Delphi-Quellcode:
program MopRun;

{$APPTYPE CONSOLE}

uses
  SysUtils, ShellAPI, Windows;
var i: integer;
begin
  { TODO -oUser -cConsole Main : Hier Code einfügen }
  writeln('Das Programm startet MOPAC2007 unter Windows XP');
  writeln('');
  writeln('Anzahl der übergebenen Parameter: '+inttostr(paramcount));
  for i:=1 to paramcount do
  begin
   writeln(paramstr(i));
  end;
  readln;
  ShellExecute(0,'open','cmd.exe', '/k dir',nil,SW_NORMAL);
  sleep(2000);
  readln;

end.
Hierzu meine Fragen (ich hoffe, Sie sind nicht allzu dämlich oder irgendwoanders exakt so zu finden):
  • Warum muss ich als ersten Parameter im ShellExecute-Befehl '0' angeben und kann nicht Application.Handle benutzen? Da fehlt die Einbindung einer Unit in 'uses' oder? Welche?
  • Warum steht im Konsolenfenster nicht korrekt "Anzahl der übergebenen Parameter:" sondern "Anzahl der µbergebenen Parameter:" (also irgendein komisches Sonderzeichen statt dem 'ü')?
  • Gibt es eine einfache Möglichkeit, dass eben nicht ein neues Konsolenfenster aufpoppt, sondern der "DIR"-Befehl im bereits offenen Fenster ausgeführt wird?

Viele Grüße, herzlichen Dank,


Thomas aka Desty
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Konolenanwendung / DOS-Funktionen

  Alt 2. Mär 2007, 09:01
Herzlich willkommen in der Delphi-PRAXiS, Thomas.

(1) Application.Handle steht dir nur in einer fensterorientierten Anwendung zur Verfügung.

(2) Deine Zeichenketten-Konstanten hast du unter Windows mit der CodePage 1252 erfasst. Die Konsole interpretiert die Zeichen aber anhand der CodePage 850. Du kannst die Ausgabe an die Konsole anpassen:

Delphi-Quellcode:
function AnsiToOem (const s: string): string;
begin
  SetLength(Result, Length(s));
  if Length(s) > 0 then
    CharToOemBuff(@s[1], @Result[1], Length(s));
end;
(3) "Einfache Lösung" ist gewiss relativ. Durch ein Verbiegen der STDIO Handles sollte möglich sein, was du dir vorstellst.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Desty

Registriert seit: 29. Jul 2006
2 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Konolenanwendung / DOS-Funktionen

  Alt 2. Mär 2007, 09:17
Zitat von marabu:
Herzlich willkommen in der Delphi-PRAXiS, Thomas.

(1) Application.Handle steht dir nur in einer fensterorientierten Anwendung zur Verfügung.

(2) Deine Zeichenketten-Konstanten hast du unter Windows mit der CodePage 1252 erfasst. Die Konsole interpretiert die Zeichen aber anhand der CodePage 850. Du kannst die Ausgabe an die Konsole anpassen:

Delphi-Quellcode:
function AnsiToOem (const s: string): string;
begin
  SetLength(Result, Length(s));
  if Length(s) > 0 then
    CharToOemBuff(@s[1], @Result[1], Length(s));
end;
(3) "Einfache Lösung" ist gewiss relativ. Durch ein Verbiegen der STDIO Handles sollte möglich sein, was du dir vorstellst.

Freundliche Grüße vom marabu
Danke für die nette Begrüßung!
Code wurde integriert und funktioniert natürlich!
Damit sind zwei von drei Fragen erledigt, das geht ja extrem schnell, herzlichen Dank!
Zur dritten Frage: Das würde jetzt (ich beschreibe es mal, wie ich es mir denke, programmieren könnte ich es noch nicht) wahrscheinlich so laufen: Versteckte Kommandokonsole o. ä., liest über Stream oder so Daten in z. B. ein Stringarray und anschließend muss ich diesen dann mit writeln auf der angezeigten (gewollten) Konsole) ausgeben, oder?
Das wollte ich umgehen, dachte ich könnte Delphi hier als eine Art Super-Batch-Sprache ausnutzen...

Ist nicht so wichtig, ich will das Ding sowieso später mit Formularanwendung laufen lassen, dachte nur, auch mal in die Konsolenprogrammierung reinzuschauen schadet nichts

Viele Grüße,


Thomas
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

Re: Konolenanwendung / DOS-Funktionen

  Alt 2. Mär 2007, 09:48
Hi und Herzlich willkommen in der DP.

Zu deiner dritten Frage gibt es hier in Forum schon einige Lösungen die dir weiterhelfen
können. zB. hier

Hier im Forum suchenCreateProcess AND CloseHandle
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:55 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