Có cách nào sử dụng Win32 hay không, để đăng ký thông báo khi cửa sổ mới được tạo. Tôi đang cố gắng giữ một danh sách các cửa sổ đang mở hiện tại, nhưng bây giờ chỉ cần bỏ phiếu danh sách các cửa sổ hiện tại sử dụng EnumWindows()
.Làm thế nào tôi có thể được thông báo khi một cửa sổ mới được tạo trên Win32?
Bất kỳ ai cũng làm điều gì đó tương tự?
Cảm ơn
Tôi không chắc chắn nếu tôi đang làm điều này đúng, nhưng tôi không thể có được phương pháp SetWindowsHookEx để bắn.
có điều gì đáng nhớ không?
đây là ảnh chụp của tôi
[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);
}
Kể từ WH_SHELL là một móc tiêm, móc của bạn phải cư trú trong một DLL, và các DLL phải là bitness giống như ứng dụng nâng cao sự kiện này. Và kể từ khi bạn đang viết móc của bạn trong mã được quản lý, móc của bạn phải nhắm mục tiêu cùng một phiên bản của CLR khi ứng dụng nâng cao sự kiện. Bất kỳ cái nào trong số đó sẽ ngăn cản móc của bạn chạy. Ngoài ra, hook của bạn chạy trong bối cảnh của ứng dụng nâng cao sự kiện, vì vậy ngay cả khi nó chạy, bạn có thể không nhìn thấy hiệu ứng kể từ khi bạn đang ở trong quá trình sai. Một móc tiếp cận có lẽ là cách tiếp cận tốt nhất ở đây vì nó tránh được tất cả các vấn đề này. –