2011-01-04 5 views
1

Ich habe vor kurzem eine Lizenz für WinX DVD Ripper Platinum erhalten, und bin genervt von der Tatsache, dass, wenn es fertig ist, eine DVD zu rippen, es mir nicht so erzählt. Es gibt kein Popup, kein System "Piep" - nichts. Der Fortschrittsdialog wird einfach geschlossen. Das Hauptfenster nicht einmal selbst konzentrieren ...Wie kann ich feststellen, ob ein Fenster von einer anderen Anwendung sichtbar ist?

Zu meiner DVD-Ripping proccess zu beschleunigen, Ich mache eine einfache Konsolenanwendung (C# und VS2010 verwenden), dass:

  1. Sucht den Griff dem Prozesses findet den Griff des Fortschrittsdialogs an diesem Prozess unter Verwendung des GetChildWindows Verfahren nach this sample at pinvoke.net
  2. Startet eine System.Timers.Timer Instanz, die überprüft, den Namen „WinX_DVD_Ripper_Platinum“ (der Prozessname der WinX DVD Ripper Platinum Software)
  3. (oder soll überprüfen) ob der Fortschritt di alog hat alle 5 Sekunden geschlossen (unter Verwendung von the GetWindowLong function und
  4. Spielt einige Pieptöne mit der System.Console.Beep-Methode ab, um dem Benutzer mitzuteilen, dass der Kopiervorgang abgeschlossen ist. Der Timer setzt sich automatisch zurück und führt alle 5 Sekunden die Überprüfung aus (oder wiederholt den Signalton, wenn das Dialogfeld geschlossen wurde), bis der Benutzer eine Taste im Konsolenfenster drückt.

Schritte 1, 2 und 4 arbeiten gut, aber ich habe Probleme mit Schritt 3 dieses ist, meine Frage ist, welche der window style constants sollte ich überprüfen verwenden, wenn das Fenster sichtbar ist? (WS_VISIBLE hat nicht funktioniert ...)

Für weitere Informationen, ist dies die Funktion verwende ich die Sichtbarkeit des Dialogs zu überprüfen:

private static bool IsWindowVisible(IntPtr hwnd) 
{ 
    var style = GetWindowLong(hwnd, GWL.GWL_EXSTYLE); 
    var visible = style & (WS flag goes here); 
    return visible != 0; 
} 

Antwort

4

Haben Sie IsWindowVisible() stattdessen verwenden versucht?

+0

Wow, ich fühle mich dumm ... :) Danke für die schnelle und einfache Antwort. Ich glaube, ich habe in den letzten 2 Tagen etwa 50 Mal Variationen von "pinvoke window visible" gegoogelt und diese Funktion irgendwie nie gesehen. Danke, Lambert. –

+2

Froh, dass es geholfen hat! :) (Edit: By the way, aus Erfahrung: ** nie ** google "pinvoke", es sei denn du willst Artikel über 'DllImport'!) – Mehrdad

Verwandte Themen