2009-05-26 26 views
12

Tôi có một ứng dụng sử dụng quy trình móc bàn phím trong thư viện. Các wParam trong móc cho một tin nhắn là 255 mà chúng tôi nghĩ là "(reserved/OEMClear)". Tôi muốn tìm ra nguồn gốc của thông điệp này vì nó làm cho ứng dụng của tôi gặp sự cố trong thư viện và không nên xảy ra việc xác định nó. Thông báo liên tục chỉ trên một máy tính mà chúng tôi có - các máy tính khác không thấy thông báo nào cả.Làm cách nào ứng dụng của tôi có thể tìm thấy người gửi tin nhắn cửa sổ?

Vì vậy, có cách nào để theo dõi nguồn của thư được gửi đến cửa sổ hay không, hoặc tất cả những thư trên hệ thống?

+0

Giải pháp cuối cùng cho điều này, thật không may, là một thạch cao gắn bó. Tôi đã thêm một móc trong ứng dụng của tôi mà tìm giá trị wParam này và không gọi xuống chuỗi móc nếu phù hợp. Tôi đang làm cho nó máy tính cụ thể (registry) nhưng có vẻ là một cái gì đó sai trái với máy tính đó. – mj2008

Trả lời

5

Không có cách tích hợp để tìm ra ai đã gửi tin nhắn cửa sổ, thậm chí không win32k theo dõi điều này; bạn có thể tìm thấy nó với trình gỡ rối hạt nhân và điểm ngắt có điều kiện.

Tuy nhiên, tôi cho rằng bạn không thực sự cần thông tin này; bạn cần phải làm cho ứng dụng của bạn xử lý đúng cách bất kỳ thông báo nào được gửi đến ứng dụng đó.

+4

Tôi muốn một nửa đồng ý - mục đích của chúng tôi ở đây là tìm nguyên nhân, sau đó chúng ta có thể đánh giá mức độ nghiêm trọng và xử lý nó một cách thích hợp. Tôi không muốn chỉ dính một lớp thạch cao lên nó trong trường hợp nó cắn sau, đặc biệt vì đây là thư viện thương mại mà lỗi bị lỗi. – mj2008

+1

@ mj2008: Nếu bạn đang triển khai nó cho các máy bạn không hoàn toàn kiểm soát, bạn sẽ bị cắn; rất nhiều ứng dụng được viết kém gửi tin nhắn lạ tới tất cả các cửa sổ trong nỗ lực thực hiện các công cụ và bạn * có * để xử lý nó một cách trang nhã. Chỉ cần nắm bắt các thư bạn quan tâm và chuyển phần còn lại cùng với móc tiếp theo trong chuỗi. –

+1

Tôi muốn đề xuất thêm id người gửi vào thư. – Alpay

-1

Không chắc chắn nếu điều này làm những gì bạn muốn nó nhưng có một cái nhìn tại Process Monitor bởi sysinternals.

http: // technet.microsoft.com/en-us/sysinternals/bb896645.aspx

Nó cho thấy tất cả những gì xảy ra với một quá trình vì vậy tôi cho rằng nó bắt thông điệp là tốt. Trang web đã ngừng hoạt động tại thời điểm viết nên tôi không thể kiểm tra.

+0

Cảm ơn - nó không xuất hiện để theo dõi tin nhắn, nhưng nó dẫn tôi đến http://msdn.microsoft.com/en-us/library/cc267862.aspx mà chi tiết các tùy chọn gỡ lỗi trong xây dựng gỡ lỗi. Nhưng không có gì để truy tìm tin nhắn cả! – mj2008

+0

Tôi không thấy thông báo cửa sổ dưới dạng 'thao tác' trong Process Monitor. – Aardvark

1

(Ban đầu tôi đã đề xuất sử dụng Spy ++ hoặc winspector, nhưng chúng không móc vào gửi thư. Điều đó thậm chí không có ý nghĩa! Một cửa sổ nhận được thư nhưng không gửi chúng Tôi sẽ để lại đề xuất của tôi về cách sử dụng trình gỡ lỗi.)

Đôi khi gỡ lỗi có thể hữu ích. Thử tải xuống các cửa sổ PDB tệp và đặt điểm ngắt chỉ truy cập khi một trong các thông báo này xuất hiện. Nhìn vào ngăn xếp cuộc gọi tại thời điểm đó thường có thể làm sáng tỏ một số lý do tại sao mọi thứ đang xảy ra. Các tin nhắn và tin nhắn được gửi từ các quá trình khác sẽ đánh dấu cách tiếp cận này.

+0

Tôi nhìn vào Winspector đầu tiên (sử dụng nó trong nhiều năm) nhưng nó không hiển thị nguồn. Trình gỡ lỗi có thể là lựa chọn duy nhất ... – mj2008

1

Không có cách nào tích hợp để tìm ra người gửi thông điệp cửa sổ

Tất nhiên có. Nhưng đó là chương trình Win32 tiên tiến (bằng cách lấy CSRSS)

+1

CSRSS không xử lý thông điệp cửa sổ, win32k thực hiện ở chế độ hạt nhân. –

+2

Chăm sóc chi tiết? – Virus721

Các vấn đề liên quan