AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi [gelöst] UpdateProcThreadAttribute mit PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE
Thema durchsuchen
Ansicht
Themen-Optionen

[gelöst] UpdateProcThreadAttribute mit PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE

Ein Thema von himitsu · begonnen am 4. Nov 2023 · letzter Beitrag vom 13. Nov 2023
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.202 Beiträge
 
Delphi 12 Athens
 
#1

[gelöst] UpdateProcThreadAttribute mit PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE

  Alt 4. Nov 2023, 14:19
Mahlzeit,

ich versuche mich grade an den neuen Pseudo-Consolen (ConPTY), also nicht die uralte ConsolenAPI (WinPTY) ala WriteConsoleOutput (wozu es im Gegensatz leider Unmassen an Beispielen gäbe),
aber irgendwie will da was nicht so, wie ich will.
https://learn.microsoft.com/de-de/wi...pseudoconsoles

Ja, zuerst einmal ein Bug in der API-Deklaration des Delphi 11.3.
* der erste Parameter müsste eigentlich VAR sein, oder zumindestens ein Pointer.
* * VAR wie beim InitializeProcThreadAttributeList
* * Pointer ala https://www.delphipraxis.net/205348-...ainer-wie.html
* hab diesen Fehler noch nicht gemeldet ... wollte noch warten, bis es funktioniert

Dann ein noch Fehler in der Demo bei Microsoft.
* hpc müsste &hpc sein

Jo, in der eigentlichen Hilfe wird auch noch das PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE nirgendwo erwähnt.
https://learn.microsoft.com/en-us/wi...hreadattribute

Jaaaa, das geNILe beim ersten InitializeProcThreadAttributeList ist schon OK.
Nur bissl ungünstig, dass Emba es als VAR deklariert hat.



Hab schon gefühlt alle Möglichkeiten beim ersten Parameter versucht
und auch hpc in verschiedenen Varianten,
sowie statt meinem eigentlichen GetMemory das HeapAlloc der C++-Demo.


Demo: https://learn.microsoft.com/en-us/wi...onsole-session
Delphi-Quellcode:
const
  PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE = $00020016;

var
  FInput, FInputWrite: THandle;
  FOutput, FOutputRead: THandle;
  FConsoleApp: string;
  FConsoleSize: COORD;
  FConsoleFlags: DWORD;
  FConsole: HPCON;
  FConsoleProcess: THandle;
  FConsoleThreadID: DWORD;

var
  SI: STARTUPINFOEX;
  RS: SIZE_T;
  PI: PROCESS_INFORMATION;
begin
  Result := S_OK;
  SI.lpAttributeList := nil;
  try
    if not CreatePipe(FInput, FInputWrite, nil, 0) or not CreatePipe(FOutputRead, FOutput, nil, 0) then
      Exit(HResultFromWin32(GetLastError));

    FConsoleSize := COORD(TSmallPoint.Create(80, 40));
    FConsoleFlags := 0; // PSEUDOCONSOLE_INHERIT_CURSOR=$1 : Inherit cursor position from my parent process-console.

    Result := CreatePseudoConsole(FConsoleSize, FInput, FOutput, FConsoleFlags, FConsole);
    if FConsole = INVALID_HANDLE_VALUE then
      FConsole := 0;
    if Failed(Result) then
      Exit;

    ZeroMemory(@SI, SizeOf(SI));
    SI.StartupInfo.cb := SizeOf(STARTUPINFOEX);
    InitializeProcThreadAttributeList(PProcThreadAttributeList(nil)^, 1, 0, RS);
    SI.lpAttributeList := HeapAlloc(GetProcessHeap, RS, 0); //GetMemory(RS);
    if not Assigned(SI.lpAttributeList) then
      Exit(E_OUTOFMEMORY);
    //SI.StartupInfo.dwXSize := FConsoleSize.X; // see UpdateProcThreadAttribute+FConsole
    //SI.StartupInfo.dwYSize := FConsoleSize.Y; // ...
    //SI.StartupInfo.dwFlags := STARTF_USESIZE;
    //SI.StartupInfo.hStdInput := FInput;
    //SI.StartupInfo.hStdOutput := FOutput;
    //SI.StartupInfo.hStdError := FOutput;
    if not InitializeProcThreadAttributeList(SI.lpAttributeList^, 1, 0, RS) then
      Exit(HResultFromWin32(GetLastError));
    if not UpdateProcThreadAttribute(SI.lpAttributeList, 0, PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE, {Pointer(FConsole)}@FConsole, SizeOf(FConsole), nil, RS) then
      RaiseLastOSError;//Exit(HResultFromWin32(GetLastError));

    ....
aber es bleibt bei Zugriffsverletzungen oder
Zitat von ERROR_INVALID_PARAMETER:
Falscher Parameter


[add]
Versuche mir grade hier den Wert der Konstante auszurechnen ... mal sehn ob der übereinstimmt.
https://github.com/wine-mirror/wine/...lude/winbase.h -> PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE
[add2]
passt
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 4. Nov 2023 um 15:44 Uhr)
  Mit Zitat antworten Zitat
 


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 16:03 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