AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Konsole nachproggen - kleine Schwierigkeiten
Thema durchsuchen
Ansicht
Themen-Optionen

Konsole nachproggen - kleine Schwierigkeiten

Ein Thema von Skiron · begonnen am 28. Jul 2004 · letzter Beitrag vom 4. Sep 2004
Antwort Antwort
Seite 1 von 2  1 2      
Skiron

Registriert seit: 14. Dez 2003
153 Beiträge
 
#1

Konsole nachproggen - kleine Schwierigkeiten

  Alt 28. Jul 2004, 19:50
Ich will mir eine eigene Konsole basteln. Da es aber wenig Sinn macht, alle DOS-Befehle nochmal zu implementieren (Wozu das Rad neu erfinden?), nehm ich die Konsole dafür her:
ShellExecute(Handle,'open','cmd','/c '+Kommando,nil,SW_HIDE); Das Ergebnis speichere ich mir dann in eine File ('>File' anhängen).
Dabei hab ich aber immernoch einige kleine Probleme:
1. Wenn ich z.B. in Unterordner gehe, müsst ich die Befehle abfangen, überprüfen, in welchen unterordner er geht ect. damit ich das auch dann richtig hinschreibe. Hoffentlich wärs da einfacher, die Konsole danach zu fragen
2. Wenn ich einen Befehl ausführe, beendet sich die Konsole wieder. Wie kann ich das verhindern /bzw. wie kann ich dafür sorgen, dass ich immer eine Konsole (versteckt) offen habe und die Befehle immer der sende?
Mann zu Frau:
Zieh dich aus, wir müssen reden!
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#2

Re: Konsole nachproggen - kleine Schwierigkeiten

  Alt 28. Jul 2004, 21:56
Such mal nach "Pipe" oder "Pipeline". Damit hast du nicht das Problem, in Dateien zwischenzuspeichern.
Christoph
char l[]="\xd6N\x96\xa6\xe6\xce.\xa6\xe4\xce\x04N\x86\xae\ xce\xfc",I,*i=l-1;for(;I=3,*i
++;){while(*i=*i&~(1<<I|1<<7-I)|(*i&1<<I)<<7-2*I|(*i&1<<7-I)>>7-2*I,I--);}puts(l);
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#3

Re: Konsole nachproggen - kleine Schwierigkeiten

  Alt 1. Sep 2004, 10:22
Ich hab mir jetzt auch mal vorgenommen, sowas zu proggen, dh, über Delphi eine Konsole anzusteuern, und hab auch ähnliche probleme.
Ich hab mich schon mal vor einiger Zeit kurz mit Pipes auseinandergesetzt, aber da hab ichs immer nur geschafft, zwischen 2 selbstgeschriebenen Progs zu kommunizieren. Ich hab leider keine Ahnung, wie ich eine Pipe zu einer Konsole legen kann...
Die google und dp-suche über Pipes hat mir auch nicht so richtig geholfen.
Kann mir jemand erklären, wie ich eine Pipe zu einem fremden Prog legen kann?
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#4

Re: Konsole nachproggen - kleine Schwierigkeiten

  Alt 2. Sep 2004, 12:08
[push]
Kann mir da niemand helfen?
[/push]
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#5

Re: Konsole nachproggen - kleine Schwierigkeiten

  Alt 4. Sep 2004, 01:06
[push]
fragen wir mal so: ist das überhaupt möglich? Wenn ich eine Pipe leg, muss mir das prog doch antworten, oder?
Gibts da noch 'ne andere möglichkeit, vielleicht den Inhalt der Konsole auszulesen?
[/push]
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Nightshade

Registriert seit: 7. Jan 2003
Ort: Menden
192 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Konsole nachproggen - kleine Schwierigkeiten

  Alt 4. Sep 2004, 04:50
Ich hab da hier im Forum irgendwo mal diese Function gefunden,
vielleicht hilft dir das weiter :

Delphi-Quellcode:
procedure TEditForm.CaptureDosCmd(command, Params:String; var OutputMemo:TStringList);
const
  CaptureBufferSize = 4096;
var
  SecAttrib : TSecurityAttributes;
  ReadPipe,writePipe : THandle;
  Startup : TStartUpInfo;
  ProcessInfo : TProcessInformation;
  CaptureBuffer : Pchar;
  BytesRead : DWord;
  WaitHandle : DWord;
  CurSize : Cardinal;
  procedure GetBuffer;
  begin
      Repeat
        BytesRead := 0;
        ReadFile(ReadPipe,CaptureBuffer[0],CaptureBufferSize,BytesRead,nil);
        CaptureBuffer[BytesRead]:= #0;
        OemToAnsi(CaptureBuffer,CaptureBuffer);
        OutputMemo.Text := OutputMemo.Text+String(CaptureBuffer);
      until (BytesRead < CaptureBufferSize);
  end;

begin
  OutPutMemo.clear;
// OutputMemo.add('# Starte "'+command+'"');
  With SecAttrib do begin
    nlength := SizeOf(TSecurityAttributes);
    binherithandle := true;
    lpsecuritydescriptor := nil;
  end;
  if Createpipe (ReadPipe, writePipe, @SecAttrib, 0) then begin
    CaptureBuffer := AllocMem(CaptureBufferSize + 1);
    FillChar(Startup,Sizeof(Startup),#0);
    Startup.cb := SizeOf(Startup);
    Startup.hStdOutput := writePipe;
    Startup.hStdInput := ReadPipe;
    Startup.dwFlags := STARTF_USESTDHANDLES +
                           STARTF_USESHOWWINDOW;
    Startup.wShowWindow := SW_HIDE;
// Startup.wShowWindow := SW_NORMAL;
    if CreateProcess(PChar(command), PChar(params), @SecAttrib, @SecAttrib, true, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, Startup, ProcessInfo) then begin
      repeat
        WaitHandle := WaitForSingleObject( ProcessInfo.hProcess,0);

        CurSize := FileSeek(ReadPipe,0,2);
        If (CurSize >= 4096) then // Puffer in Memo ausgeben und damit leeren
          GetBuffer;
        Application.ProcessMessages;
      until (WaitHandle = WAIT_OBJECT_0) or (WaitHandle = WAIT_FAILED) or application.terminated;

      if not application.terminated then begin
        CurSize := FileSeek(ReadPipe,0,2);
        If (CurSize > 0 ) then // Falls Rest im Puffer, in Memo ausgeben
          GetBuffer;
      end
      else
        OutPutMemo.add('# Operation canceled!');
      FreeMem(CaptureBuffer);
      CloseHandle(ProcessInfo.hProcess);
      CloseHandle(ProcessInfo.hThread);
      CloseHandle(ReadPipe);
      CloseHandle(writePipe);
    end
    else
      OutPutMemo.add('# cannot create process. Error: #'+inttostr(getlasterror));
  end
  else
    OutPutMemo.add('# cannot create pipe. Error: #'+inttostr(getlasterror));
end;
Christian
Killing for peace is like fucking for virginity

Nightshade
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#7

Re: Konsole nachproggen - kleine Schwierigkeiten

  Alt 4. Sep 2004, 13:24
hmm, der Code funzt bei mir nicht so richtig. Er kann den Prozess nicht erstellen. wenn ich als cmd 'ping', als params 'localhost' und eine Stringlist mitgebe kommt immer in der Stringlist, dass er den Prozess nicht erstellen kann! (errorcode 2)
Muss ich da irgendwas anders machen?
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Benutzerbild von Duffy
Duffy

Registriert seit: 19. Mär 2003
Ort: Wuppertal
835 Beiträge
 
Delphi 3 Standard
 
#8

Re: Konsole nachproggen - kleine Schwierigkeiten

  Alt 4. Sep 2004, 14:01
Hallo Chimaira,
ja, Du mußt den vollständigen Pfad zu "ping.exe" angeben. Also z.B unter XP 'C:\Windows\System32\ping.exe'.

das war es auch dann schon ...

bye
Claus
Künftige Generationen wollen ihre Fehler selber machen.
Jedes Programm wird nie das können, was Du wirklich brauchst.
Das Gegenteil von gut ist gut gemeint
-----
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#9

Re: Konsole nachproggen - kleine Schwierigkeiten

  Alt 4. Sep 2004, 15:16
aha, dann siehts schon 'n bissl besser aus, aber:
wenn ich dann den Ping ausführ krieg ich bloß die hilfe:
Zitat:
Syntax: ping [-t] [-a] [-n Anzahl] [-l Größe] [-f] [-i Gültigkeitsdauer]
[-v Diensttyp] [-r Anzahl] [-s Anzahl] [[-j Hostliste] |
[-k Hostliste]] [-w Zeitlimit] Zielname
Optionen:
-t Sendet fortlaufend Ping-Signale zum angegebenen Host.
.....
und wenn ich z.B. einen NSLookup starten will, krieg ich jede menge "unrecognized command" und das prog hängt sich auf.
und noch 'ne frage: ich hab den Beitrag gefunden, woher der Code kommt. Da steht geschrieben, das das alles erst gesendet wird, nachdem der befehl ausgeführt wurde. Problem: In meiner Konsole möcht ich auch ftp verwenden können. geht aber nicht, nachdem das ein eigenes prog is und somit erst fertig sein muss, bevor ich irgendwas krieg.
Könnts da noch 'ne andere möglichkeit geben?
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Benutzerbild von Duffy
Duffy

Registriert seit: 19. Mär 2003
Ort: Wuppertal
835 Beiträge
 
Delphi 3 Standard
 
#10

Re: Konsole nachproggen - kleine Schwierigkeiten

  Alt 4. Sep 2004, 15:52
Hallo Chimaira,
Zitat von Chimaira:
Syntax: ping [-t] [-a] [-n Anzahl] [-l Größe] [-f] [-i Gültigkeitsdauer]
[-v Diensttyp] [-r Anzahl] [-s Anzahl] [[-j Hostliste] |
[-k Hostliste]] [-w Zeitlimit] Zielname
Optionen:
-t Sendet fortlaufend Ping-Signale zum angegebenen Host.
.....
  • Die Demo sollte Dir helfen
  • Wenn die Konsole läuft, mußt Du ein bißchen basteln. Dann wird sich eine Lösung für Dein FTP Problem sicherlich finden.

bye
Claus

[EDIT]Demo getauscht ...[/EDIT]
Angehängte Dateien
Dateityp: zip demo_168.zip (228,7 KB, 24x aufgerufen)
Künftige Generationen wollen ihre Fehler selber machen.
Jedes Programm wird nie das können, was Du wirklich brauchst.
Das Gegenteil von gut ist gut gemeint
-----
  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 17:14 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