2010-02-19 24 views
9

Đối với một tiện ích nhỏ tôi đang viết (.NET, C#), tôi muốn theo dõi các hoạt động sao chép clipboard và các hoạt động dán clipboard.Cách nhận thông báo dán clipboard và cung cấp dữ liệu của riêng tôi?

Ý tưởng của tôi là cung cấp dữ liệu của riêng tôi khi dán vào một ứng dụng tùy ý.

Việc giám sát hoạt động sao chép có thể dễ dàng thực hiện bằng cách sử dụng clipboard viewer.

Cái gì mà dường như nhiều cải tiến đối với tôi là viết một "clipboard của nhà cung cấp dán":

  • trả lời cho "những gì các định dạng có sẵn" truy vấn của các ứng dụng.
  • Cung cấp dữ liệu cho các thao tác dán ứng dụng.

Tôi tìm thấy this postingthis posting, nhưng không ai trong số họ có vẻ thực sự giúp tôi.

Điều tôi đoán là tôi bằng cách nào đó phải bắt chước/chiếm đoạt khay nhớ tạm thời hiện tại.

Câu hỏi:

Có thể "quấn" clipboard về thao tác cắt dán và cung cấp loại riêng của tôi về "vào clipboard proxy"?

+1

PS: Tôi biết bạn trên CodeProject;) mỉa mai rằng tôi chuyển hướng bạn tới CodeProject cho điều này !! !! : D lol – t0mm13b

Trả lời

11

Bạn cần móc trong móc tạm bằng cách sử dụng móc cửa sổ. Một móc cửa sổ là một cách để ngăn chặn các sự kiện toàn cầu xảy ra và cung cấp thủ tục móc của riêng bạn để thay thế hoặc chặn thông báo. Có một cái nhìn ở đây trên CodeProject giải thích cách móc. Đây là số clipboard helper lắng nghe chức năng sao chép/dán. Đây là một số Clipboard spy chỉ thực hiện điều đó. Đây là một bài viết khác thực hiện một Clipboard hook.

+5

Cảm ơn, Tom! Tham khảo bài viết hay nhất là tham chiếu móc "Ctrl + V". Nhưng: Điều gì sẽ xảy ra nếu người dùng nhấp chuột phải và chọn "Dán" từ trình đơn ngữ cảnh hoặc một số cách hoàn chỉnh khác? Tôi đoán các giải pháp sẽ được _not_ để móc trên bàn phím/chuột/bất cứ điều gì, nhưng để ngăn chặn giao tiếp clipboard trực tiếp chính nó. –

9

Xem xét "hiển thị bị trì hoãn" trong WinAPI. Với kỹ thuật này, bạn tải clipboard bằng các tay cầm rỗng, và khi dán, các cửa sổ sẽ thông báo cho bạn thông báo WM_RENDERFORMAT. Đây là cách các ứng dụng như Excel có thể lấy đi bằng cách "sao chép" 25 định dạng khác nhau. Nó không thực sự sao chép tất cả. Nó thực sự sẽ tạo ra một số thông tin phổ biến như TEXT, nhưng "quảng cáo" những người khác như Bitmap, Html, WKS, v.v., chọn chờ xem ứng dụng đích muốn dán gì.
Hãy xem xét điều này: bạn có thể chọn 5000 ô trong Excel và sao chép và khay nhớ tạm được cập nhật khá nhanh. Bây giờ dán vào Windows Paint, và đột nhiên hệ thống của bạn thu thập dữ liệu như Excel cố gắng để render một bitmap rất lớn. Các phiên bản cũ hơn thường sẽ sụp đổ, sau khi sử dụng tất cả bộ nhớ có sẵn và ăn tệp trang. Điều này đã trở lại trong Windows 3.1 ngày mặc dù. Các phiên bản hiện đại cung cấp thông báo về "bitmap quá lớn" hoặc "không đủ bộ nhớ". Cảnh báo: Hiển thị bị trì hoãn sẽ sớm được kích hoạt bởi các ứng dụng theo dõi clipboard và tự động dán dữ liệu vào chính chúng, chẳng hạn như Remote Desktop, VMWare, Office Clipboard và ClipMate của riêng tôi. Một số chương trình quản lý clipboard có thể được thông báo để bỏ qua việc cập nhật vào clipboard bằng cách sử dụng lá cờ CF_Clipboard_Viewer_Ignore, mà tôi đã ghi nhận ở đây: link text

+0

Man ...... tuyệt vời .. –

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