如何隐藏msinfo32.exe进程窗口?

时间:2013-08-01 15:11:23

标签: c# winforms

我正在创建文件msinfo:

ProcessRun.Processing(contentDirectory, "msinfo32.exe" , "/nfo " + "\"" + contentDirectory + "\\msinfo.nfo" + "\"",false,"");

这是创建和使用创建文件的过程的类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.IO;

namespace Diagnostic_Tool_Blue_Screen
{
    class ProcessRun
    {


        public void ProcessesRun()
        {

        }

        public static void Processing(string WorkingDirectory, string FileName, string Arguments, bool StandardOutput, string OutputFileName)
        {
            Process proc = new Process();
            proc.EnableRaisingEvents = true;
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.RedirectStandardOutput = StandardOutput;
            proc.StartInfo.FileName = FileName;
            proc.StartInfo.CreateNoWindow = true;
            proc.StartInfo.WorkingDirectory = WorkingDirectory;
            proc.StartInfo.Arguments = Arguments;
            proc.Start();
            if (StandardOutput == true)
            {
                string output = proc.StandardOutput.ReadToEnd();
                DumpOutput(WorkingDirectory + "\\" + OutputFileName, output);
            }
            proc.WaitForExit();
            proc.Close();
        }

        private static void DumpOutput(string filename, string output)
        {
            StreamWriter w = new StreamWriter(filename);
            w.Write(output);
            w.Close();
        }
    }
}

一旦进程启动并运行msinfo32.exe,就会出现一个小窗口,显示屏幕中间msinfo32.exe的进程。

它不是cmd窗口!它的一部分是msinfo32.exe 有没有办法在处理它时隐藏这个窗口?

enter image description here

在我的程序左侧编辑了一个图像,右边是我要隐藏的msinfo32.exe的小窗口。

3 个答案:

答案 0 :(得分:0)

您可以使用本机函数ShowWindow。您需要查看pinvoke以了解如何使用它,否则我很乐意为您提供代码段。

答案 1 :(得分:0)

你可以补充一下:

 proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

答案 2 :(得分:0)

您可以通过引用 user32.dll 隐藏窗口。

尽管该窗口将显示一小段时间,但可以防止用户意外触摸取消按钮。

using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;

namespace Diagnostic_Tool_Blue_Screen
{
    public class GetSystemInfo
    {
        [DllImport("user32.dll")]
        private static extern int FindWindow(string className, string windowText);

        [DllImport("user32.dll")]
        private static extern int ShowWindow(int hwnd, int command);

        public void GetInfo(string path)
        {
            using (Process exeObj = new Process())
            {
                exeObj.StartInfo.FileName = "msinfo32.exe";
                exeObj.StartInfo.Arguments = string.Format("{0}{1}{2}", "/nfo ", path, @"\mysysinfo.nfo");

                exeObj.StartInfo.UseShellExecute = false;
                exeObj.StartInfo.RedirectStandardInput = true;
                exeObj.StartInfo.RedirectStandardOutput = true;
                exeObj.EnableRaisingEvents = true;
                exeObj.Start();
                exeObj.BeginOutputReadLine();
                exeObj.Close();
            }

            Thread.Sleep(1000);
            const int SW_HIDE = 0;

            int hwnd = FindWindow(null, "System Information");

            if (hwnd != 0)
            {
                var num = ShowWindow(hwnd, SW_HIDE);
            }
        }
    }
}