문제

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);
}
도움이 되었습니까?

해결책

사용 SetWindowsHookEx a WH_SHELL 갈고리를 찾으십시오 HSHELL_WINDOWCREATED 이벤트.

다른 팁

물론 - 당신은 쓸 수 있습니다 CBT 후크 그리고 지켜봐 HCBT_CREATEWND. 또한보십시오 SetWindowsHookEx().


이것은 당신이 통보받을 수있게 해줄 것입니다. 모두 창이 생성되기 전에 창 생성은 완전히 초기화되기도합니다. 필요한 모든 것이 소유하지 않은 최상위 창이라면 Richiehindle의 제안 더 잘 작동 할 수 있습니다 ...

우회 고리를 임의의 Win32 기능에 첨부 할 수 있습니다. 그러나 폴링은 아마도 문제에 접근 할 수있는보다 안정적인 방법 일 것입니다. 특정 창 생성 방법을 놓쳤는지 걱정할 필요가 없습니다 (Win32에 몇 개가 있습니까? 나는 하나 이상의 내기!). 물론, 당신은 그렇지 않을 것입니다 런타임에 Windows 함수의 기계 코드를 다시 작성합니다.

그러나 당신은 당신의 전화입니다.

당신은 시도 할 수 있습니다 Wineventhook Autohotkey를위한 도서관. 메모장 팝업 차단기를 수정 해보십시오 예시 다음과 함께 :

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top