我正在创建一个计划任务,以最高权限运行进程监视器。我有一个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);
}
}
答案 0 :(得分:1)
您首先需要获取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();
}
最有可能的是,您的代码存在的问题是您正在尝试查找与其不存在的进程名称的完全匹配。
答案 1 :(得分:1)
最好告诉进程首先不显示窗口,而不是之后隐藏它。
从.net运行程序时,您通常已经拥有ProcessStartInfo
。然后,只需将其WindowStyle
属性设置为ProcessWindowStyle.Hidden
,即可完成此操作。
我自己没有尝试过这种方法,但这是你通常直接调用WinApi函数的方式。
http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.windowstyle.aspx http://msdn.microsoft.com/en-us/library/system.diagnostics.processwindowstyle.aspx
答案 2 :(得分:0)
Procmon具有内置功能,可以在启动时自动登录,如果这是您要完成的任务。