Wie ein konsolenbasierten Prozess starten und einen benutzerdefinierten Titel gilt Powershell mit

StackOverflow https://stackoverflow.com/questions/3155101

  •  01-10-2019
  •  | 
  •  

Frage

Ich bin ein alter cmd Befehl Powershell konvertieren, und zur Zeit verwenden:

START "My Title" Path/To/ConsoleApp.exe

Das funktioniert wie erwartet ConsoleApp mit My Titeln wie es Fenstertitel zu starten. Dies hat mit IBN-Verfahren ersetzt worden, die richtig funktioniert, aber stellt keinen Mechanismus, um den Titel zu ändern.

Gibt es eine andere Möglichkeit, dies zu tun ohne greift den cmd Befehl zu verwenden?

War es hilfreich?

Lösung

Es gibt eine kleine Marotte, wenn Sie den Text des Prozesses Hauptfenster zu ändern: Wenn Sie versuchen gerade, den Text zu ändern, nachdem Sie den Prozess gestartet hat, kann sie nicht mehr aufgrund eines von vielen möglichen Gründen (zB den Griff in dem Kontrolle, die zeigt den Text zum Zeitpunkt des Funktionsaufrufs ist nicht vorhanden). So ist die Lösung ist, die WaitForInputIdle() Methode zu verwenden, bevor Sie versuchen, den Text zu ändern:

Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;

public static class Win32Api
{
    [DllImport("User32.dll", EntryPoint = "SetWindowText")]
    public static extern int SetWindowText(IntPtr hWnd, string text);
}
"@

$process = Start-Process -FilePath "notepad.exe" -PassThru
$process.WaitForInputIdle()
[Win32Api]::SetWindowText($process.MainWindowHandle, "My Custom Text")

Beachten Sie, dass die Anwendung selbst kann immer noch das Fenster Text ändern, nachdem Sie Ihre eigene Änderung vorgenommen haben.

Andere Tipps

Ich habe versucht, dies mit cmd.exe und es hat gut funktioniert.

Add-Type -Type @"
using System;
using System.Runtime.InteropServices;
namespace WT {
   public class Temp {
      [DllImport("user32.dll")]
      public static extern bool SetWindowText(IntPtr hWnd, string lpString); 
   }
}
"@

$cmd = Start-Process cmd -PassThru
[wt.temp]::SetWindowText($cmd.MainWindowHandle, 'some text')

$ host.UI.RawUI.WindowTitle = "neue Titel"

Wie bereits gesagt wurde von George, etwas / jemand es wieder einstellen kann (wie benutzerdefinierten Prompt Funktionen zum Beispiel).

Wenn Sie einen Prozess mit Powershell mit einem benutzerdefinierten Titel Versuch zum Laichen:

$StartInfo = new-object System.Diagnostics.ProcessStartInfo
$StartInfo.FileName = "$pshome\powershell.exe"
$StartInfo.Arguments = "-NoExit -Command `$Host.UI.RawUI.WindowTitle=`'Your Title Here`'"
[System.Diagnostics.Process]::Start($StartInfo)

Beachten Sie die Grab-Zeichen, die die Zeichenfolge für den Titel zu entkommen, sind sie lebenswichtig!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top