Autor Beitrag
aramintaros
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 28.05.09 16:26 
Hallo liebe Gemeinde,

seit 3 Tagen reiße ich mir ein Bein aus und lese und lese...., :autsch: bin mitnerweile soweit und verstehe die Wichtigkeit der StartupInfo (CreateProcess), ihrer einzelnen Flags, und wie man diese benutzt.

Klappt soweit auch toll, wer hätte das gedacht Bouncing 1 Nun bin ich darüber gestolpert, daß ich die run.exe, nicht in mein Programmfenster bekomme.
(habe die avidemux2_cli.exe nur in run.exe umbenannt, ist kürzer, werde sie später wieder richtig bennen)

Habe dazu folgenden Code geschrieben.
Die Variablen h und j sind als globale Variablen bekannt, aber auch als "lokale" funzt es nicht.

ausblenden volle Höhe 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:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
var
                     Form1: TForm1;
                      h, j: Thandle;
   AviCmdLine, WindowsName: TEdit;

implementation
{$R *.dfm}

// Klappt wenn die Eingabeaufforderung auf dem Desktop ist. Setzt die Box ind die richtige Ecke und gibt Ihr die Länge und Höhe.
procedure TForm1.Button1Click(Sender: TObject);
begin
  h:=FindWindow(nil,'Eingabeaufforderung');
  If h<>0 then SetWindowPos(h,000670100, SWP_NOZORDER);
  edit1.Text:= GetCurrentDir + '  '+ IntToStr(GetActiveWindow);
end;

// Klappt auch wenn die Eingabeaufforderung auf dem Desktop ist, das Handle der Eingabeaufforderung wird auch angezeigt und das Panel ist der Owner.
procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
begin
  h:= Windows.FindWindow(nil'Eingabeaufforderung');
  Windows.SetParent(h, Panel1.Handle);
  Edit1.Text:= IntToStr(h);
end;

// Hier wird nur das Programm aufgerufen, arbeit seine Befehle ab und es passiert nichts von dem was ich oben hingekriegt habe, Warum nur??
procedure TForm1.Button3Click(Sender: TObject);
var         i: integer;
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  AviCmdLine:= TEdit.Create(Self);

  FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
  StartupInfo.cb := Sizeof(TStartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow:=SW_Show;

  AviCmdLine.Text:=
  'C:\Programme\Avidemux 2.4\run.exe --load E:\FILME\os.avi --external-mp3 E:\FILME\os.mp3 --save E:\_OrdnerTest\ms.avi';

  WindowsName.Text:= 'C:\Programme\Avidemux 2.4\run.exe';
  for i:= 0 to 1 do
  begin
    CreateProcess(nil,
                 PChar(AviCmdLine.Text),
                 nil,
                 nil,
                 False,
                 NORMAL_PRIORITY_CLASS,
                 nil,
                 PChar('c:\'),
                 StartupInfo,
                 ProcessInfo);
    h:= Windows.FindWindow(nil, PChar(WindowsName.Text));
    j:= GetWindow(h, 0);
    Windows.SetParent(j, Panel1.Handle);
    WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
  end;
  CloseHandle(ProcessInfo.hProcess);
end;


Bin kein ausgefuchster Delphi-Programmierer und meine Kenntnise sind so lala, ihr seht's ja. Habe den Quelltxt der besseren Lesbarkeit etwas auseinander gezogen, mir ist das sehr Hilfreich.
Und bei diesem Ansatz brauche ich Hilfe, freu mich auf alles was ihr dazu zu sagen=schreiben habt :D
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: So 31.05.09 10:13 
Also wenn es Dir nur darum geht, eine andere Anwendung zu starten, würde ich das eher so machen, wie (z.B. bei meinem Beitrag) in diesem Thema.

Oder habe ich Dich jetzt falsch verstanden?
In sofern wäre es schön, wenn man am Ende seines (Eröffnungs-)Beitrags immer noch mal die konkreten Fragen formuliert.
aramintaros Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mi 03.06.09 22:54 
Hallo ffgorcky,

ich brauche viel mehr als nur ein Programm starten! Mein Programm soll in der Lage sein Videos zu "Analysieren-vor allem den SoundCodec, es soll auf 2-3 Teile auseinander gezippte Videos wieder verbinden, anschließend den Soundfile extrahieren und umwandeln (natürlich nur wenn nötig) danach soll es mit mp3Gain auf einen Standard von ca. 89 db gebracht werden. Ganz zum Schluß soll es die Files wieder miteinander verbinden. Und das machen alles die CLI-Programme, die man natürlich nicht sieht. Zur zeit experimentiere ich für Infos über den Clip mit MediaInfo, Avidemux und FFMpeg, werde für die anderen Arbeiten zwischen Avidemux und FFMpeg entscheiden, es kommtdarauf an wer insgesmt leichter zu handeln ist. Alle Codecs sollen später frei wählbar sein und durch den User festgelegt werden können. Wenn du eine gute Idee hast dann schreib mir, bin im Moment in der richtigen Experimentier- und Lernphase. Sozusagen über "ShellExute" zum "CreateProcess" denn TDosCommand nun erledigt :D .
Danke für deine Zuschrift, ich hoffe man liest sich wieder, bis denn mal