Tôi có thể thiết lập chính xác một móc cửa sổ, nhưng tôi bị nhầm lẫn bởi dòng trong MSDN nói rằng "Gọi chức năng CallNextHookEx để chuỗi đến thủ tục móc tiếp theo là tùy chọn, nhưng nó là rất khuyến khích Nếu không, các ứng dụng khác đã cài đặt móc sẽ không nhận được thông báo móc và có thể hoạt động không chính xác như là kết quả. Bạn nên gọi CallNextHookEx trừ khi bạn hoàn toàn cần phải ngăn chặn các thông báo được nhìn thấy bởi các ứng dụng khác.Làm thế nào để sử dụng chính xác SetWindowsHookEx & CallNextHookEx
Tôi muốn trở thành công dân lập trình tốt và gọi móc tiếp theo. Tuy nhiên, quy trình móc của tôi trông giống như sau:
LRESULT CALLBACK CBTProc(int code, WPARAM wp, LPARAM lp)
{
if (code != HCBT_CREATEWND)
{
// What do I do here? It's not the event I requested so how do I pass it on?
return 0;
}
// It's the code we want (create window)
CallNextHookEx(...);
...
}
Vì vậy, điều gì xảy ra trong quy trình móc nếu mã không phải là mã tôi quan tâm? Làm thế nào để tôi gọi móc tiếp theo?
Chỉnh sửa: Vấn đề chính là HHOOK được trả về từ SetWindowsHookEx và cần được chuyển đến hàm CallNextHookEx.
Cập nhật: Có vẻ như các tham số móc bị bỏ qua trên nền tảng NT:
http://msdn.microsoft.com/en-us/library/ms644974.aspx
http://www.klenotic.com/pl/null_hhook/
Điều đó không có tác dụng vì CallNextHookEx nhận tham số HHOOK (được trả về từ SetWindowsHookEx). –
Rất tiếc, tôi sẽ cập nhật câu trả lời của mình. – Charlie
Hmm, bạn có thể vào một cái gì đó ở đó. Tôi bị mất một chút về tham số "hhk" bị bỏ qua trên NT/XP/2003. Bây giờ hãy thử một chút. –