Как запустить основанный на консоли процесс и применить пользовательское использование заголовка Powershell

Я преобразовываю старое cmd управляйте к Powershell и в настоящее время используйте:

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

Это работает как ожидалось для запуска ConsoleApp с Моим Заголовком, поскольку это - заголовок окна. Это было заменено Начинать-процессом, который работает правильно, но не обеспечивает механизм для изменения заголовка.

Есть ли другой способ сделать это, не обращаясь к использованию cmd команда?

11
задан Joey 1 July 2010 в 04:54
поделиться

3 ответа

При изменении текста в главном окне процесса есть небольшая причуда: если вы попытаетесь изменить текст сразу после того, как вы запустили процесс, он может потерпеть неудачу по одной из многих возможных причин (например, дескриптор элемент управления, отображающий текст, не существует на момент вызова функции). Поэтому решение состоит в том, чтобы использовать метод WaitForInputIdle () , прежде чем пытаться изменить текст:

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")

Имейте в виду, что само приложение все еще может изменять текст окна после того, как вы внесли свои собственные изменения.

10
ответ дан 3 December 2019 в 07:36
поделиться

Я пробовал это с cmd.exe, и это сработало.

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')
5
ответ дан 3 December 2019 в 07:36
поделиться

$ host.UI.RawUI.WindowTitle = "новый заголовок"

Как уже было сказано Джорджем, что угодно / кто угодно может вернуть его обратно (например, пользовательские функции подсказки).

1
ответ дан 3 December 2019 в 07:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: