簡體   English   中英

如何在Windows應用程序中以隱藏模式啟動notepad.exe?

[英]How to start notepad.exe in hidden mode in windows application?

我正在嘗試以隱藏模式啟動notepad.exe,如下所示是我編寫的代碼:-

try
{
     ProcessStartInfo startInfo = new ProcessStartInfo();
     startInfo.CreateNoWindow = false;
     startInfo.UseShellExecute = false;
     startInfo.FileName = "notepad.exe";
     startInfo.WindowStyle = ProcessWindowStyle.Hidden;
     startInfo.Arguments = @"C:\Users\Sujeet\Documents\test.txt";
}
catch
{ 

}

但問題是進程(即notepad.exe)已成功啟動,但startInfo.WindowStyle = ProcessWindowStyle.Hidden無法正常工作。 我已經為此問題上網了,但是無法獲得正確的解決方案。

這個版本適用於我的盒子:

try
{
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.CreateNoWindow = false;
    startInfo.UseShellExecute = true;
    startInfo.FileName = @"%windir%\system32\notepad.exe";
    startInfo.WindowStyle = ProcessWindowStyle.Hidden;
    startInfo.Arguments = @"C:\Users\Sujeet\Documents\test.txt";
    Process.Start(startInfo);
}
catch
{ }

我只收到一個Win32Exception,告訴它找不到文件(test.txt),但是該過程正在運行,並且沒有可見的窗口。

請小心退出該進程,否則用戶最終將運行不可見的進程。

如果您的應用程序不合作(例如您在注釋中提到的calc.exe),則可以嘗試以下操作:

在某處定義:

    [DllImport("user32.dll")]
    private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);
    const int SW_SHOW = 5;
    const int SW_HIDE = 0;

然后在創建進程之后執行以下操作:

    var proc = Process.Start(startInfo);
    while (proc.MainWindowHandle == IntPtr.Zero) //note: only works as long as your process actually creates a main window.
        System.Threading.Thread.Sleep(10);
    ShowWindow(proc.MainWindowHandle, SW_HIDE);

我不知道為什么路徑%windir%\\system32\\calc.exe不起作用,但是它與startInfo.FileName = @"c:\\windows\\system32\\calc.exe";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM