![]() |
Re: cmd fenster
da ich viel mit batchdateien mache, möchte ich so ein kleines fenster haben
zur kontrolle ! wollte erstmal bei meinen batchdateien bleiben! ist doch ok oder ? gruß andre |
Re: cmd fenster
Klar ist das ok. ;-)
Ich hätte jetzt nur gedacht, dass Du die Funktionen der Batch-Dateien auch in Delphi nachprogrammieren kannst. Überprüfen kannst ja dort genau so gut. Wenn Dir aber der Weg mit den Batch-Dateien lieber ist, will ich Dich auch nicht davon abhalten. |
Re: cmd fenster
danke,
aber scheint doch nicht so einfach zu sein, so ein blödes fenster zu programmieren oder ? ich muss noch viel üben :!: |
Re: cmd fenster
|
Re: cmd fenster
was bin ich nervig oder :x :x
was ist das für ein fehler ?? [Fataler Fehler] Unit1.pas(6): Datei nicht gefunden: 'Variants.dcu' was muß ich hier ändern ?? unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) MemoOutput: TMemo; Button1: TButton; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure BtnWriteCmdClick(Sender: TObject); procedure EdCmdKeyPress(Sender: TObject; var Key: Char); procedure Button1Click(Sender: TObject); private fInputPipeRead, fInputPipeWrite, fOutputPipeRead, fOutputPipeWrite: Cardinal; fProcess: Cardinal; procedure FClbProc(Sender: TObject; const ABuffer: String; ABufSize: Cardinal); procedure FOpenProcess; procedure FCloseProcess; procedure FWriteToStdIn(const AText: String); { Private declarations } public { Public declarations } end; TPipeClbProc = procedure(Sender: TObject; const ABuffer: String; ABufSize: Cardinal) of Object; TPipeReadThread = class(TThread) private fBuffer: String; fBytesRead: Cardinal; fClbProc: TPipeClbProc; fPipeOutput: Cardinal; procedure FSyncProc; protected procedure Execute; override; constructor Create(AClbProc: TPipeClbProc; APipeOutput: Cardinal); end; var Form1: TForm1; implementation {$R *.dfm} {================================================= =============================} constructor TPipeReadThread.Create(AClbProc: TPipeClbProc; APipeOutput: Cardinal); begin inherited Create(True); fClbProc := AClbProc; fPipeOutput := APipeOutput; SetLength(fBuffer, 5000); FreeOnTerminate := True; Resume; end; {================================================= =============================} procedure TPipeReadThread.Execute; var LBufSize: Cardinal; LRes : Boolean; begin LBufSize := Length(fBuffer); repeat LRes := ReadFile(fPipeOutput, fBuffer[1], LBufSize, fBytesRead, nil); Synchronize(fSyncProc); until not(LRes) or Terminated; end; {================================================= =============================} procedure TPipeReadThread.FSyncProc; begin fClbProc(Self, fBuffer, fBytesRead); end; {================================================= =============================} {================================================= =============================} {================================================= =============================} procedure TForm1.FClbProc(Sender: TObject; const ABuffer: String; ABufSize: Cardinal); var LNew: String; LPos: Integer; begin LNew := copy(ABuffer, 1, ABufSize); LPos := pos(#$C, LNew); if (LPos > 0) then begin MemoOutput.Text := ''; LNew := copy(LNew, LPos + 1, Length(LNew)); end; MemoOutput.Text := MemoOutput.Text + LNew; PostMessage(MemoOutput.Handle, WM_VSCROLL, SB_BOTTOM, 0); end; {================================================= =============================} procedure TForm1.FOpenProcess; var LStartupInfo: TStartupInfo; LProcessInfo: TProcessInformation; LSecurityAttr: TSECURITYATTRIBUTES; LSecurityDesc: TSecurityDescriptor; begin FillChar(LSecurityDesc, SizeOf(LSecurityDesc), 0); InitializeSecurityDescriptor(@LSecurityDesc, SECURITY_DESCRIPTOR_REVISION); SetSecurityDescriptorDacl(@LSecurityDesc, True, nil, False); LSecurityAttr.nLength := SizeOf(LSecurityAttr); LSecurityAttr.lpSecurityDescriptor := @LSecurityDesc; LSecurityAttr.bInheritHandle := True; fProcess := 0; if CreatePipe(fInputPipeRead, fInputPipeWrite, @LSecurityAttr, 0) then //Input-Pipe begin if CreatePipe(fOutputPipeRead, fOutputPipeWrite, @LSecurityAttr, 0) then //Output-Pipe begin FillChar(LStartupInfo, SizeOf(LStartupInfo), 0); FillChar(LProcessInfo, SizeOf(LProcessInfo), 0); LStartupInfo.cb := SizeOf(LStartupInfo); LStartupInfo.hStdOutput := fOutputPipeWrite; LStartupInfo.hStdInput := fInputPipeRead; LStartupInfo.hStdError := fOutputPipeWrite; LStartupInfo.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW; LStartupInfo.wShowWindow := SW_HIDE; if CreateProcess(nil, 'cmd', @LSecurityAttr, nil, True, 0, nil, nil, LStartupInfo, LProcessInfo) then begin fProcess := LProcessInfo.hProcess; TPipeReadThread.Create(FClbProc, fOutputPipeRead); end else begin CloseHandle(fInputPipeRead); CloseHandle(fInputPipeWrite); CloseHandle(fOutputPipeRead); CloseHandle(fOutputPipeWrite); end; end else begin CloseHandle(fInputPipeRead); CloseHandle(fInputPipeWrite); end; end end; {================================================= =============================} procedure TForm1.FCloseProcess; begin if (fProcess <> 0) then begin CloseHandle(fInputPipeRead); CloseHandle(fInputPipeWrite); CloseHandle(fOutputPipeRead); CloseHandle(fOutputPipeWrite); TerminateProcess(fProcess, 0); fProcess := 0; end; end; {================================================= =============================} procedure TForm1.FWriteToStdIn(const AText: String); var LPos, LWritten: Cardinal; LRes : Boolean; begin LPos := 1; repeat LWritten := 0; LRes := WriteFile(fInputPipeWrite, AText[LPos], Cardinal(Length(AText)) - LPos + 1, LWritten, nil); inc(LPos, LWritten); until not(LRes) or (LPos > Cardinal(Length(AText))); end; {================================================= =============================} procedure TForm1.FormCreate(Sender: TObject); begin fProcess := 0; FOpenProcess; end; {================================================= =============================} procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin FCloseProcess; end; {================================================= =============================} procedure TForm1.BtnWriteCmdClick(Sender: TObject); begin FWriteToStdIn(EdCmd.Text + #13#10); EdCmd.Text := ''; end; {================================================= =============================} procedure TForm1.EdCmdKeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then begin Key := #0; BtnWriteCmdClick(nil); end; end; {================================================= =============================} procedure TForm1.Button1Click(Sender: TObject); procedure TForm1.Button1Click(Sender: TObject); VAR e: INTEGER; begin e := ShellExecute (Handle, NIL, PCHAR('C:\Dokumente und Einstellungen\Administrator\Desktop\Handyalarm\NEF .BAT'), PCHAR(''), NIL, SW_SHOW); IF (e<=32) THEN begin ShowMessage('Fehler: Batch-Datei konnte nicht ausgeführt werden!') end; end. |
Re: cmd fenster
Du hast anscheinend noch ein Delphi < 7 (oder war das 6?). Lösch einfach die Unit "Variants" aus der uses-Klausel heraus.
|
Re: cmd fenster
habe ich gemacht, jetzt habe ich die probleme:
[Fehler] Unit1.pas(199): Undefinierter Bezeichner: 'EdCmd' [Fehler] Unit1.pas(199): Anweisung erforderlich, aber Ausdruck vom Typ 'TCaption' gefunden [Fehler] Unit1.pas(217): ';' erwartet, aber '.' gefunden [Fehler] Unit1.pas(222): Undefinierter Bezeichner: 'ShellExecute' [Fehler] Unit1.pas(244): ';' erwartet, aber '.' gefunden [Fehler] Unit1.pas(246): Deklaration erwartet, aber Dateiende gefunden [Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden arbeite mit delphi 5 |
Re: cmd fenster
der fehler:
Fehler] Unit1.pas(222): Undefinierter Bezeichner: 'ShellExecute habe ich gerade selber behoben |
Re: cmd fenster
Ich habe auch Delphi 5 und musste nur Variants aus der uses-Klausel löschen, damit es ging. Sicher, dass du nichts anderes geändert hast?
Mfg |
Re: cmd fenster
es geht danke :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz