Wie ein konsolenbasierten Prozess starten und einen benutzerdefinierten Titel gilt Powershell mit
-
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?
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!