2013-10-10 120 views
0

我有兩個獨立的進程 - 一個是控制檯應用程序,一個是winform應用程序。現在,如果winform最小化,那麼控制檯應用程序應該規範化它,反之亦然。我怎樣才能做到這一點?此外,控制檯應用程序啓動winform並開始它應該在其規範化的位置。我該如何去這在隨後的行從控制檯應用程序最小化和標準化winform

 var processes = Process.GetProcessesByName("MyWinformApp"); 
       if (processes.Length == 0) 
       { 
        Process.Start("MyWinformApp.exe"); 
    How to be sure that the winform will open up in Normalized state 
       } 
       else 
       { 
        IntPtr handle = processes[0].MainWindowHandle; 
    //If winform minimized the normalize and vice versa ....What to do here 
//Maybe use GetWindowPlacement 
?? 
handle = processes[0].MainWindowHandle; 
      if(if winform was minimized) //how to find this??? 
      { 
       ShowWindow(handle, Normal); 
      } 
      else 
      { 
       ShowWindow(handle, Minimize); 
      } 

       } 

我沒有找到pinvoke.net信息,但很困惑所以希望得到一些幫助。

感謝

回答

0

下面的代碼確實是和問題的另一部分是上述

#region For getting the hadnle and min/max operation 
     private const int SW_Minimize = 6; 
     private const int SW_Normal = 1; 

     [DllImport("user32.dll")] 
     [return: MarshalAs(UnmanagedType.Bool)] 
     static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 

     private static WINDOWPLACEMENT GetPlacement(IntPtr hwnd) 
     { 
      WINDOWPLACEMENT placement = new WINDOWPLACEMENT(); 
      placement.length = Marshal.SizeOf(placement); 
      GetWindowPlacement(hwnd, ref placement); 
      return placement; 
     } 

     [DllImport("user32.dll", SetLastError = true)] 
     [return: MarshalAs(UnmanagedType.Bool)] 
     internal static extern bool GetWindowPlacement(
      IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl); 

     [Serializable] 
     [StructLayout(LayoutKind.Sequential)] 
     internal struct WINDOWPLACEMENT 
     { 
      public int length; 
      public int flags; 
      public ShowWindowCommands showCmd; 
      public System.Drawing.Point ptMinPosition; 
      public System.Drawing.Point ptMaxPosition; 
      public System.Drawing.Rectangle rcNormalPosition; 
     } 

     internal enum ShowWindowCommands : int 
     { 
      Hide = 0, 
      Normal = 1, 
      Minimized = 2, 
      Maximized = 3, 
     } 
     #endregion 


var processes = Process.GetProcessesByName("MyWinformApp"); 
       if (processes.Length == 0) 
       { 
        Process.Start("MyWinformApp.exe"); 
       } 
       else 
       { 
        IntPtr handle = processes[0].MainWindowHandle; 
        var placement = GetPlacement(handle); 
        if (String.Equals(placement.showCmd.ToString(), "Minimized")) 
        { 
         ShowWindow(handle, SW_Normal); 
        } 
        else 
        { 
         ShowWindow(handle, SW_Minimize); 
        } 

       } 
-1

參考MSDN對WindowStyle枚舉文檔:

http://msdn.microsoft.com/en-us/library/system.diagnostics.processwindowstyle.aspx

(你想要的顯然是 '正常')

設置在此之前啓動的過程。

+2

理由downvotes不需要回答DeeMac,但他們是有幫助的! –

+0

我已經想通了......我在某種程度上被困在了發現它是否已經最小化了或者不是......我已經更新了這個問題......如果可能的話,請看看 – Why

+0

這與問題不是一回事你的操作(即使在編輯之後)。 「如何確保Winform將在Normalized狀態下打開」與「確定窗口是否已最小化」不同。除非你給我澄清,否則我無法幫助你。我已經回答了你的原始問題,並由於某種原因被某個人低估了,所以除非你完全清楚你的目標,否則不會再嘗試幫助。 –