2017-10-07 1 views
0

** EDIT: Wenn ich einen Breakpoint in meine MinimizePlayer() -Methode setzen und durch sie gehen, minimiert es den Wmplayer-Prozess. Aber es geht nicht ohne durchzukommen. Ich weiß nicht warum. **Minimize Window-Funktion funktioniert nur, wenn Sie im Debugger (C# - Konsole) gehen

Ich hatte ein ähnliches Skript auf meinem Linux-Rechner, wo ich einige Aufgaben automatisiere, die ich jedes Mal verwende, wenn ich hochfahre. Ich konnte Rhythmbox starten, meine Playlist abspielen und den Vorgang minimieren.

Nun, ich versuche das gleiche auf meinem neuen Windows 10-Rechner, und ich weiß nicht, wie ich den wmplayer.exe-Prozess von meinem Skript zu minimieren.

Das ist was ich bisher habe. Es funktioniert gut, ich will nur wmplayer minimiert werden:

using System; 
using System.Diagnostics; 
using System.Threading; 
using System.Runtime.InteropServices; 


namespace Playlist 
{ 
    class Program 
    { 

     [DllImport("user32.dll")] 
     private static extern bool ShowWindow(IntPtr hWnd, WindowShowStyle nCmdShow); 

     private enum WindowShowStyle:uint 
     { 
      Hide = 0, 
      ShowMinimized = 2, 
      Minimize = 6 
     } 

     static void Main(string[] args) 
     { 
      Run(); 
     } 


     public static void Run() 
     { 

      String username = Environment.UserName; 
      username = char.ToUpper(username[0]) + username.Substring(1); 
      Console.WriteLine("Hello " + username); 
      Thread.Sleep(2000); 
      Console.WriteLine("Opening Playlist..."); 
      Thread.Sleep(2000); 

      Process.Start("wmplayer.exe", "C:\\Users\\" + username + "\\Music\\A_ChillstepMix.mp3"); 
      //Thread.Sleep(2000); 
      //Console.WriteLine("Opening your IDE..."); 
      //Thread.Sleep(2000); 
      //Process.Start("C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\Common7\\IDE\\devenv.exe"); 
      //Thread.Sleep(2000); 
      MinimizePlayer(); 
      Thread.Sleep(2000); 
      Console.WriteLine("Goodbye..."); 
      Thread.Sleep(2000);     
      System.Environment.Exit(0); 

     }  
     public static void MinimizePlayer() 
     { 
      Process[] ps = Process.GetProcesses(); 
      foreach(Process p in ps) 
      { 
       if(p.ProcessName.Contains("wmplayer")) 
       { 
        IntPtr h = p.MainWindowHandle; 

        ShowWindow(h, WindowShowStyle.Minimize); 
       } 
      } 
     } 
    } 
} 
+1

Meinst du, wie man die Fenstergröße für den Prozess minimiert? Wenn ja, können Sie versuchen, [this] (https://stackoverflow.com/questions/30486724/setting-process-window-size-and-location-before-process-start) und [this] zu überprüfen (https: // stackoverflow.com/questions/3321535/how-can-i-control-the-size-and-position-of-a-new-process-window-from-a-winforms) –

+0

Sorry, aber nein, tue ich nicht denken? Ich möchte nur Windows Media Player minimieren, wenn es startet. Und das zweite Beispiel verwendet WinForms. Ich führe dies in einer Konsolen-App aus. – IRGeekSauce

+0

Schauen Sie sich die Antwort auf dem zweiten Link an, wo Sie ** Win32API ** -Funktionen, 'SetWindowPos' und' ShowWindow' verwenden können. Es spielt keine Rolle, Konsolen-App oder winforms –

Antwort

0

Ok, ich habe es. Ich musste Thread.Sleep() vor der MinimizePlayer() -Methode hinzufügen. Der Arbeitscode ist wie folgt (ich habe die Visual Studio-Sachen während der Fehlersuche auskommentiert, um die Dinge zu beschleunigen):

using System; 
using System.Diagnostics; 
using System.Threading; 
using System.Runtime.InteropServices; 


namespace Playlist 
{ 
    class Program 
    { 

     [DllImport("user32.dll")] 
     private static extern bool ShowWindow(IntPtr hWnd, WindowShowStyle nCmdShow); 

     private enum WindowShowStyle:uint 
     { 
      Hide = 0, 
      ShowMinimized = 2, 
      Minimize = 6 
     } 

     static void Main(string[] args) 
     { 
      Run(); 
     } 


     public static void Run() 
     { 

      String username = Environment.UserName; 
      username = char.ToUpper(username[0]) + username.Substring(1); 
      Console.WriteLine("Hello " + username); 
      Thread.Sleep(2000); 
      Console.WriteLine("Opening Playlist..."); 
      Thread.Sleep(2000); 

      Process.Start("wmplayer.exe", "C:\\Users\\" + username + "\\Music\\A_ChillstepMix.mp3"); 
      //Thread.Sleep(2000); 
      //Console.WriteLine("Opening your IDE..."); 
      //Thread.Sleep(2000); 
      //Process.Start("C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\Common7\\IDE\\devenv.exe"); 
      Thread.Sleep(2000); 
      Console.WriteLine("Minimizing Player..."); 
      Thread.Sleep(2000); 
      MinimizePlayer(); 
      Thread.Sleep(2000); 
      Console.WriteLine("Goodbye..."); 
      Thread.Sleep(5000);    
      System.Environment.Exit(0); 

     }  
     public static void MinimizePlayer() 
     { 
      Process[] ps = Process.GetProcesses(); 
      foreach(Process p in ps) 
      { 
       if(p.ProcessName.Contains("wmplayer")) 
       { 
        IntPtr h = p.MainWindowHandle; 

        ShowWindow(h, WindowShowStyle.Minimize); 
       } 
      } 
     } 
    } 
} 
1

Sie können die Window des Prozesses angeben beginnen Sie, wenn Sie das Process Objekt verwenden:

var psi = new System.Diagnostics.ProcessStartInfo(); 
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized; 
psi.FileName = "wmplayer.exe"; 
System.Diagnostics.Process.Start(psi); 
+0

Ich habe meine Frage und Code bearbeitet, um Änderungen anzuzeigen. Es funktioniert nur, wenn ich mit dem Debugger durchgehe. Ich weiß nicht warum. – IRGeekSauce

Verwandte Themen