隐藏“进程监视器”应用程序窗口

| 我正在创建一个计划任务,以最高特权运行进程监视器。我有一个Windows服务,该服务在启动时执行计划的任务。因此,在我开始服务时,将在一个窗口中显示进程Monitor.exe。但是我不想看窗户。我只希望进程monitor.exe在后台运行而不显示任何窗口。 在AutoIT中,有一个命令:
Run (Procmon.exe,\"\",@SW_Hide) @SW_Hide = Hidden Window
我尝试了这个:
foreach (Process pr in Process.GetProcesses())
{
    if(pr.ProcessName == \"procmon\")
    {
        hWnd = pr.MainWindowHandle.ToInt32();
        ShowWindow(hWnd, SW_HIDE);
    }
}
    
已邀请:
最好告诉该过程首先不显示任何窗口,而不是在之后将其隐藏。 从.net运行程序时,通常已经有了
ProcessStartInfo
。然后只需将其
WindowStyle
属性设置为
ProcessWindowStyle.Hidden
,就应该注意这一点。 我自己还没有尝试过,但这是直接调用WinApi函数时通常采用的方式。 http://msdn.microsoft.com/zh-CN/library/system.diagnostics.processstartinfo.windowstyle.aspx http://msdn.microsoft.com/zh-CN/library/system.diagnostics.processwindowstyle.aspx     
您需要首先获取Process Monitor的Window Handle,然后需要使用
SW_HIDE
调用ShowWindow来隐藏它。 您可以使用FindWindow获取ProcMon窗口的窗口句柄。 编辑: 看完您的代码后,我尝试了一下,它可以与以下代码一起使用:
    [DllImport(\"user32.dll\")]
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

    public static void HideWindow()
    {
        int SW_HIDE = 0;

        foreach (Process pr in Process.GetProcesses())
        {
            if (pr.ProcessName.Contains(\"Procmon\"))
            {
                //Int32 hWnd = pr.MainWindowHandle.ToInt32();
                ShowWindow(pr.MainWindowHandle, SW_HIDE);
            }
        }
    }

    static void Main(string[] args)
    {
        HideWindow();
    }
您的代码最有可能出现的问题是,您正在尝试查找与之不完全匹配的进程名称。     
Procmon具有内置功能,可以在启动时自动进行登录(如果您要这样做)。     

要回复问题请先登录注册