15

Win32 を使用して、新しいウィンドウが作成されたときに通知を登録する方法はありますか。現在開いているウィンドウのリストを保持しようとしていますが、現在は を使用して現在のウィンドウのリストをポーリングしていますEnumWindows()

似たようなことをした人はいますか?

ありがとう


これが正しいかどうかはわかりませんが、SetWindowsHookEx メソッドを起動できません。

何か思い当たりますか?

ここに私のスニップがあります

[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);
}
4

5 に答える 5

0

autohotkey のWinEventHookライブラリを試すことができます。メモ帳のポップアップ ブロッカーのを次のように変更してみてください。

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 } }

于 2009-06-28T01:13:25.333 に答える