cuốn sách gpt4 ai đã làm

c++ - Móc chuột - Hạn chế và hiệu suất

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 01:15:23 27 4
mua khóa gpt4 Nike

Tôi có một số câu hỏi về WH_MOUSE. Từ những gì tôi đã đọc, bằng cách đặt hook vào DLL, nó sẽ thực hiện quy trình. Điều này có nghĩa là việc bắt chuột cũng hoạt động trên máy tính để bàn của tôi, khởi chạy menu, v.v. phải không? Thanh tiêu đề của ứng dụng thì sao? Tôi đã thấy một số bài đăng trên Internet có loại vấn đề này, nhưng không biết liệu chúng có bị lỗi vì lý do nào đó hay có một số hạn chế nào đó (hoặc phương pháp khác).

Tôi cũng có câu hỏi về hiệu suất giữa WH_MOUSE và WH_MOUSE_LL. Tôi đã tìm thấy ở đâu đó rằng WM_MOUSE nhanh hơn WH_MOUSE_LL, nhưng điều đó có thực sự rõ ràng không? Nếu vậy, trong trường hợp nào nó làm chậm hệ thống đến mức chúng ta có thể nhận thấy? Nếu tôi chỉ muốn ghi lại các lần nhấp chuột và bàn phím, WH_MOUSE_LL có hoạt động không?

Cảm ơn!

câu trả lời hay nhất

  • Cả hai Móc này đều cho phép bạn nhập chuột vào bất cứ đâu trên màn hình (ngoại trừ những trường hợp được liệt kê bên dưới) và từ góc độ chức năng nâng cao này, về cơ bản chúng giống nhau.

  • Cả hai đều bị ràng buộc UIPI: không có hook nào cho phép bạn nhập dữ liệu bằng chuột khi chuột vượt qua quá trình nâng cao.

  • Hook cấp thấp không yêu cầu DLL và do đó có thể được sử dụng bởi C#. Loại còn lại yêu cầu một DLL riêng được viết bằng mã không được quản lý (C/C++).

  • Nếu chạy trên máy 64 bit, bạn có thể chạy kết hợp các quy trình 32 bit và 64 bit, đồng thời các móc cấp thấp sẽ nhận các sự kiện từ cả hai loại quy trình, nhưng các loại móc khác sẽ chỉ thấy các sự kiện từ các quy trình có "bitness" giống như các sự kiện của quy trình (hạn chế này bắt nguồn từ việc sử dụng hook DLL; DLL hook 32 bit chỉ có thể móc vào các quy trình 32 bit và điều tương tự cũng xảy ra với các quy trình 64 bit.) Vì vậy, nếu bạn quan tâm đến tình huống này, sử dụng LL Hook bạn chỉ cần một quy trình, còn sử dụng các loại Hook khác , bạn cần hai quy trình hợp tác, một quy trình dành cho 32 bit và một quy trình dành cho 64 bit.

  • Móc LL yêu cầu vòng lặp thông báo để chạy.

  • Móc LL viết đơn giản hơn vì lệnh gọi lại xảy ra trong quy trình của riêng bạn, do đó bạn có quyền truy cập vào các biến toàn cục của riêng mình, v.v. Với các loại hook khác, lệnh gọi lại xảy ra trong một quy trình khác, do đó bạn phải thực hiện thêm công việc để chuyển thông tin trở lại quy trình chính. (Trong cả hai trường hợp, bạn nên giữ mã trong các lệnh gọi lại ở mức tối thiểu; chỉ cần thực hiện lọc và kiểm tra cơ bản, đồng thời thực hiện bất kỳ công việc quan trọng nào từ mã dòng chính của bạn thay vì các lệnh gọi lại.)

  • LL Hook "chậm hơn" vì thông báo đầu vào được mã hóa vào quy trình của bạn, được xử lý ở đó và sau đó ngữ cảnh lại được chuyển trở lại quy trình ban đầu. Với các loại Hook khác, không có chuyển đổi ngữ cảnh. Tuy nhiên, điều này có thể được người dùng chú ý hoặc không và có thể phụ thuộc vào những gì bạn làm trong lệnh gọi lại, cách bạn xử lý thông tin, thời điểm Hook được cài đặt và các yếu tố khác.

Vấn đề về thanh tiêu đề dường như đã được giải quyếttrong câu hỏi này ;Tóm tắt là những gì bạn nhận được trên thanh tiêu đề (và các khu vực không dành cho khách hàng khác) WM_NCMOUSEMOVE tin nhắn, tin nhắn WM_MOUSEMOVE được nhận ở nơi khác, vì vậy bạn phải kiểm tracả hai.

2c của tôi: Nếu bạn đang viết một tiện ích đơn giản hoặc viết mã cho vui, hãy chọn _LL; nó dễ dàng hơn nhiều và có thể xử lý hầu hết các tình huống khó khăn cho bạn; bạn không phải lo lắng về các vấn đề 64/32 bit hoặc Giao tiếp giữa các quy trình; có thể đứng dậy và chạy nhanh hơn. Khi logic ứng dụng của bạn hoạt động bình thường, sau này bạn có thể chuyển đổi mã sang các loại Hook khác nếu cần. Mặt khác, nếu bạn muốn một ứng dụng "chuyên nghiệp" hơn, là một "công dân tốt" và giảm thiểu tác động của nó đến các ứng dụng khác thì các loại Hook khác có thể phù hợp hơn nhưng với tất cả những thứ liên quan đến hiệu suất, thước đo; đầu tiên, đừng giả định, vì vậy, tốt nhất bạn nên bắt đầu với móc _LL (Hook).

Về c++ - Mouse Hook - Hạn chế và Hiệu suất, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/11192713/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress