Win32에서 새 창이 작성되면 어떻게 알 수 있습니까?
문제
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
}
}