我正在创建文件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 有没有办法在处理它时隐藏这个窗口?
在我的程序左侧编辑了一个图像,右边是我要隐藏的msinfo32.exe的小窗口。
答案 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);
}
}
}
}