如何在Windows应用程序中以隐藏模式启动notepad.exe?

时间:2015-05-08 06:30:37

标签: c#

我试图以隐藏模式启动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无效。 我已经为这个问题上网了,但无法得到正确的解决方案。

1 个答案:

答案 0 :(得分:0)

此版本适用于我的包装盒:

array1 = new int[dic.Count];
array2 = new int[dic.Count];

int position = 0;

foreach (var kvp in dic)
{
    array1[position] = kvp.Value;
    array2[position] = kvp.Key;
    position++;
}

我只收到Win32Exception,告知无法找到文件(test.txt),但进程正在运行,并且没有可见的窗口。

注意退出流程,否则用户最终会运行不可见的进程。

如果您的应用程序不合作(如评论中提到的calc.exe),您可以尝试以下操作:

定义某处:

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
{ }

然后在创建过程后执行以下操作:

    [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