كيفية بدء عملية قائمة على وحدة التحكم وتطبيق عنوان مخصص باستخدام PowerShell
-
01-10-2019 - |
سؤال
أنا أقوم بتحويل قديم cmd
أمر إلى PowerShell ، واستخدم حاليًا:
START "My Title" Path/To/ConsoleApp.exe
يعمل هذا كما هو متوقع أن يطلق Consomeapp بعنواني كعنوان نافذة. تم استبدال هذا بعملية بدء التشغيل التي تعمل بشكل صحيح ، ولكنها لا توفر آلية لتغيير العنوان.
هل هناك طريقة اخرى لعمل هذا بدون اللجوء إلى استخدام cmd
يأمر؟
المحلول
هناك Quirk صغير عند تغيير نص النافذة الرئيسية للعملية: إذا حاولت تغيير النص مباشرة بعد بدء العملية ، فقد يفشل بسبب أحد الأسباب العديدة المحتملة (على سبيل المثال ، المقبض على عنصر التحكم الذي يعرض النص غير موجود في وقت استدعاء الوظيفة). لذا فإن الحل هو استخدام 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 = "العنوان الجديد"
كما قيل بالفعل من قبل جورج ، يمكن لأي شخص/أي شخص أن يعيده (مثل وظائف المطالبة المخصصة على سبيل المثال).
إذا كنت ترغب في تفريخ عملية مع PowerShell مع عنوان مخصص حاول:
$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)
لاحظ الأحرف القبر التي تهرب من السلسلة للعنوان ، فهي حيوية!