2011-05-26 119 views
1

我正在創建一個計劃任務來以最高權限運行進程監視器。我有一個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

可以通過命令行和將procmon上/最小化開關將推出最小化到任務欄。另外/ AcceptEula將繞過EULA對話框,並且/ Quiet阻止篩選器設置確認。 – hemp 2011-05-27 06:47:59

回答

0

最好告訴程序首先不顯示窗口,而不是在之後隱藏窗口。

從.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

1

你需要得到處理的窗口句柄監控第一,那麼你需要調用ShowWindowSW_HIDE隱藏它。

您可以使用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(); 
    } 

最有可能的,你的代碼的問題是,你正在嘗試找到不存在的進程名稱的完全匹配。

+0

編輯你的問題並在那裏粘貼你的完整代碼 – Aamir 2011-05-26 07:04:10

+0

是的,先生,完成! – Derek 2011-05-26 07:57:30

0

Procmon具有內置的功能,可以在啓動時自動登錄,如果這就是您想要完成的功能。

+0

不,我想隱藏procmon的主應用程序窗口,我希望它在後臺運行而不顯示任何應用程序窗口。 – Derek 2011-05-26 06:59:04

+0

如果使用引導記錄功能,則根本不需要顯示應用程序窗口。 – hemp 2011-05-27 06:45:51

相關問題