Most Efficient Weise, um im geöffneten Fenster benachrichtigt zu werden

7

Ich schreibe eine App (C # und WPF in .NET 4.0), die offene Fenster öffnen und sie schließen muss, wenn sie nicht in der Whitelist enthalten sind.

Bisher konnte ich mit EnumDesktopWindows Windows API von User32.dll alle offenen Fenster in etwa 10 ms auf meinem Rechner aufzählen. Wie Sie wahrscheinlich schon erraten haben, muss ich dies in kleinen Zeiträumen tun, um so schnell wie möglich zu sein, und auf der anderen Seite wird die Auswahl kleiner Zeitperioden einen großen Aufwand für das System bedeuten.

Die Frage ist: "Gibt es eine Möglichkeit, benachrichtigt zu werden, wenn ein Fenster geöffnet wird (wie zum Beispiel ein Ereignis)? Wie auch immer, was ist der effizienteste Weg, dies zu tun?

    
Arashv 20.02.2014, 15:44
quelle

3 Antworten

15

Sie können sich an der Shell anmelden, um Nachrichten mithilfe der API-Funktionen RegisterWindowMessage und RegisterShellHookWindow zu empfangen.

Sie werden die folgenden Interop-Importe benötigen:

%Vor%

Um sich an die Shell anhängen zu können, benötigen Sie eine Klasse, die von Form erbt und die Funktion WndProc überschreibt. Sie können dieses Formular so gestalten, dass ein Ereignis ausgelöst wird, wenn ein Fenster seinen Status ändert.

%Vor%

Und dann können Sie in Ihrer Hauptfunktion Ihrer Anwendung zum Beispiel haben:

%Vor%

Ausgabestichprobe:

    
thepirat000 20.02.2014 17:08
quelle
8

Verwenden Sie den Namensraum System.Windows.Automation .

Beispiel (genommen von The Old New Thing ) welches wartet für einen bestimmten Prozess, um ein Dialogfeld zu öffnen, und dann entlässt es:

%Vor%     
Mitch 07.03.2014 03:29
quelle
0

Wenn Sie auf Windows von einer anderen Anwendung aus zugreifen, wird dies keine einfache Aufgabe, aber Sie könnten versuchen, Haken in Windows.

    
Tinu 20.02.2014 15:56
quelle

Tags und Links