كيفية بدء عملية قائمة على وحدة التحكم وتطبيق عنوان مخصص باستخدام PowerShell

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

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

لاحظ الأحرف القبر التي تهرب من السلسلة للعنوان ، فهي حيوية!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top