2016-07-31 4 views
0

Ich versuche das Sound Control Panel Fenster über FindWindow zu finden. Da die Anwendung in mehreren Sprachen verwendet wird, ändert sich mit lpWindowName beispielsweise "Sound" auf einem finnischen System zu "Ääni". Der lpClassName bleibt jedoch gleich.Wie finde ich ein Fenster mit bekanntem lpClassName, aber mehrsprachiger lpWindowName

 // Get a handle to an application window. 
     [DllImport("USER32.DLL", CharSet = CharSet.Unicode)] 
     public static extern IntPtr FindWindow(string lpClassName, 
     string lpWindowName); 

     // The window class and window name 
     // were obtained using the Spy++ tool. 
     IntPtr soundHandle = FindWindow("#32770", "Sound"); 

     // Verify that Sound is a running process. 
     if (soundHandle == IntPtr.Zero) 
     { 
      System.Windows.MessageBox.Show("Sound is not running."); 
      return; 
     } 

Ich habe gesucht und kann keinen Weg finden, ein Fenster basierend auf seiner LpClassName allein zu greifen. Ich glaube, dies ist, weil es für die meisten Fenster ändern kann, scheint dies nicht der Fall für Sound Control Panel zu sein.

Gibt es eine Möglichkeit, den lpWindowName auf verschiedenen Sprachsystemen zu ändern?

Vielen Dank für das Lesen.

+0

http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem –

+0

Entschuldigung. Ich dachte, es würde zeigen, dass ich versucht habe, eine Lösung zu finden, anstatt mit XY in Konflikt zu geraten. Bearbeiteter Originalbeitrag. – Fairfight

Antwort

0

Das Problem ist, mehrere Fenster können den gleichen Klassennamen haben. FindWindow() filtert Fenster basierend auf dem Klassennamen.

Sie könnten Folgendes verwenden: EnumWindows() und alle Instanzen Ihrer Fensterklasse selbst aufzählen. Vorsicht, es kann mehr als einen geben.

Verwandte Themen