Frage

Gibt es eine Möglichkeit mit Win32, für Benachrichtigungen zu registrieren, wenn ein neues Fenster erstellt wird. Ich versuche, eine Liste der aktuell geöffneten Fenster zu halten, aber bin jetzt nur Abfrage der Liste der aktuellen Fenster mit EnumWindows().

Jeder getan etwas ähnliches?

Danke


Ich bin mir nicht sicher, ob ich das richtig mache, aber ich bin nicht in der Lage die SetWindowsHookEx Methode Feuer zu bekommen.

etwas in den Sinn kommen?

Hier ist mein schnipp

[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(HookType hook, HookProc callback, IntPtr hMod, uint dwThreadId);

[DllImport("user32.dll")]
private static extern int CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
const int HSHELL_WINDOWCREATED = 1;

private static HookProc winDelegate = ShellHookProcDelegate;
internal static void RegisterWindowCreatedEvent()
{
    SetWindowsHookEx(HookType.WH_SHELL, winDelegate, IntPtr.Zero, 0);
}

private static int ShellHookProcDelegate(int code, IntPtr wParam, IntPtr lParam)
{
    if (code != HSHELL_WINDOWCREATED)
    {
        return CallNextHookEx(IntPtr.Zero, code, wParam, lParam);
    }

    //App specific code here

    return CallNextHookEx(IntPtr.Zero, code, wParam, lParam);
}
War es hilfreich?

Lösung

Verwenden Sie SetWindowsHookEx ein einzurichten < a href = "http://msdn.microsoft.com/en-us/library/ms644991(VS.85).aspx" rel = "noreferrer"> WH_SHELL Haken und suchen Sie nach dem HSHELL_WINDOWCREATED Ereignis.

Andere Tipps

Sicher - können Sie schreiben einen CBT Haken und achten Sie auf HCBT_CREATEWND. Siehe auch SetWindowsHookEx() .


Beachten Sie, dass dies ermöglicht es Ihnen mitgeteilt alle Fenster Schöpfung werden, bevor die Fenster erstellt werden sogar vollständig initialisiert. Wenn alles was Sie brauchen unowned sind, Top-Level-Fenster, RichieHindle Vorschlag kann besser arbeiten ...

Detours werden Sie erlauben Haken auf beliebige Win32-Funktionen zu befestigen. Allerdings Polling ist wahrscheinlich ein zuverlässiger Weg, um das Problem zu nähern: Sie müssen sie nicht darum kümmern, ob Sie eine bestimmte Fenster-Erstellungsmethode verpaßt haben (? Wie viele gibt es in Win32 Ich wette, mehr als eine!), Und , natürlich, werden Sie nicht auf sein, den Maschinencode für Windows-Funktionen zur Laufzeit Umschreiben .

Aber, wissen Sie, Ihren Anruf.

Sie könnten versuchen, WinEventHook Bibliothek für autohotkey. Versuchen Sie, den Notizblock Popup-Blocker Beispiel rel="nofollow mit folgenden :

HookProc( hWinEventHook, Event, hWnd, idObject, idChild, dwEventThread, dwmsEventTime ) { if Event ; EVENT_SYSTEM_FOREGROUND = 0x3 {
WinGetTitle, title, ahk_id %hWnd% If (title = "your_window_name" msgbox, your window has been created } }

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top