Bonjour à toutes et à tous,

Je me demandais si il était possible d'afficher une console PowerShell sur un TPanel avec Delphi 6 comme pour l'affichage d'une console Dos ?

Le script est .ps1

J'ai fait des essais avec un TMemo mais la fenêtre est vide.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
62
63
64
65
66
 
procedure RunDosInMemo(DosApp:String;AMemo:TMemo);
const
  ReadBuffer = 2400;
var
  Security : TSecurityAttributes;
  ReadPipe,WritePipe : THandle;
  start : TStartUpInfo;
  ProcessInfo : TProcessInformation;
  Buffer : Pchar;
  BytesRead : DWord;
  Apprunning : DWord;
begin
    With Security do begin
      nlength := SizeOf(TSecurityAttributes);
      binherithandle := true;
      lpsecuritydescriptor := nil;
    end;
 
    if Createpipe (ReadPipe, WritePipe, @Security, 0) then
      begin
        Buffer := AllocMem(ReadBuffer + 1);
        FillChar(Start,Sizeof(Start),#0);
        start.cb := SizeOf(start);
        start.hStdOutput := WritePipe;
        start.hStdInput := ReadPipe;
        start.dwFlags := STARTF_USESTDHANDLES +
        STARTF_USESHOWWINDOW;
        start.wShowWindow := SW_HIDE;
 
 
        if CreateProcess(nil, PChar(DosApp), @Security, @Security, true,
           NORMAL_PRIORITY_CLASS, nil, nil, start, ProcessInfo) then
          begin
            repeat
              Apprunning := WaitForSingleObject
              (ProcessInfo.hProcess,100);
              Application.ProcessMessages;
            until (Apprunning <> WAIT_TIMEOUT);
            Repeat
              BytesRead := 0;
              ReadFile(ReadPipe,Buffer[0],
              ReadBuffer,BytesRead,nil);
              Buffer[BytesRead]:= #0;
              OemToAnsi(Buffer,Buffer);
              AMemo.Text := AMemo.text + String(Buffer);
            until (BytesRead < ReadBuffer);
          end;
        FreeMem(Buffer);
        CloseHandle(ProcessInfo.hProcess);
        CloseHandle(ProcessInfo.hThread);
        CloseHandle(ReadPipe);
        CloseHandle(WritePipe);
      end;
end;
 
procedure TForm1.BTestClick(Sender: TObject);
Var
  NomFichier : String ;
begin
  Memo1.Clear;
  Memo1.Color:=clblack;
  Memo1.Font.Color:=clwhite;
  NomFichier := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName))+'MonScript.ps1' ;
  RunDosInMemo(NomFichier,Memo1); 
end;
@+,

cincap