Я преобразовываю старое cmd
управляйте к Powershell и в настоящее время используйте:
START "My Title" Path/To/ConsoleApp.exe
Это работает как ожидалось для запуска ConsoleApp с Моим Заголовком, поскольку это - заголовок окна. Это было заменено Начинать-процессом, который работает правильно, но не обеспечивает механизм для изменения заголовка.
Есть ли другой способ сделать это, не обращаясь к использованию cmd
команда?
При изменении текста в главном окне процесса есть небольшая причуда: если вы попытаетесь изменить текст сразу после того, как вы запустили процесс, он может потерпеть неудачу по одной из многих возможных причин (например, дескриптор элемент управления, отображающий текст, не существует на момент вызова функции). Поэтому решение состоит в том, чтобы использовать метод 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")
Имейте в виду, что само приложение все еще может изменять текст окна после того, как вы внесли свои собственные изменения.
Я пробовал это с 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')
$ host.UI.RawUI.WindowTitle = "новый заголовок"
Как уже было сказано Джорджем, что угодно / кто угодно может вернуть его обратно (например, пользовательские функции подсказки).