2010-02-19 20 views
9

Dla małego narzędzia piszę (.NET, C#), chcę monitorować operacje kopiowania schowka i operacje wklejania schowka.Jak uzyskać powiadomienie ze schowka i podać własne dane?

Moim pomysłem jest dostarczenie własnych danych po wklejeniu do dowolnej aplikacji.

Monitorowanie operacji kopiowania można łatwo wykonać za pomocą clipboard viewer.

Coś, co wydaje się o wiele bardziej zaawansowany jest dla mnie, aby napisać „schowka pasty dostawcy”:

  • odpowiedzi na „Jakie formaty są dostępne” zapytań aplikacji.
  • Dostarcz dane do operacji wklejania aplikacji.

Znalazłem this posting i this posting, ale żadna z nich nie wydaje mi się naprawdę przydatna.

Chyba jest tak, że muszę jakoś naśladować/przejąć obecny schowek.

Pytanie:

Czy można „owinąć” schowek pod względem operacji wklejania i dostarczyć własne rodzaju „pełnomocnictwa schowka”?

+1

PS: Znam cię na CodeProject;) Ironiczny, że przekierowanie do codeproject za to !! !! : D lol – t0mm13b

Odpowiedz

11

Musisz zaczepić hak schowka za pomocą haka do okien. Hak do okien to sposób na przechwytywanie globalnych zdarzeń i udostępnienie własnej procedury przechwytywania w celu zastąpienia lub przechwycenia wiadomości. Zajrzyj tutaj na stronie CodeProject, która wyjaśnia, w jaki sposób przechwycić. Oto clipboard helper, który nasłuchuje funkcji kopiowania/wklejania. Oto Clipboard spy, który właśnie to robi. Oto kolejny artykuł, który implementuje Clipboard hook.

+5

Dzięki, Tom! Najlepszym odnośnikiem do artykułu jest ten, który przechwytuje "Ctrl + V". Ale: Co zrobić, jeśli użytkownik kliknie prawym przyciskiem myszy i wybierze "Wklej" z menu kontekstowego lub w inny kompletny sposób? Sądzę, że rozwiązaniem byłoby _nie_ podpięcie się na klawiaturze/myszy/cokolwiek, ale przechwycenie bezpośredniej komunikacji w schowku. –

9

Sprawdź w "WinAPI" "renderowanie opóźnione". Za pomocą tej techniki ładujesz schowek za pomocą pustych uchwytów, a po wklejeniu system Windows powiadamia o wiadomości WM_RENDERFORMAT. W ten sposób aplikacje takie jak Excel mogą uciec z "kopiowaniem" 25 różnych formatów. To naprawdę nie kopiuje ich wszystkich. W rzeczywistości powstają pewne wspólne, takie jak TEKST, ale "reklamują" inne, takie jak Bitmap, HTML, WKS itp., Decydując się czekać, aby zobaczyć, co docelowa aplikacja chce wkleić.
Rozważ to: możesz wybrać 5000 komórek w programie Excel i skopiować, a schowek zostanie zaktualizowany dość szybko. Teraz wklej do systemu Windows Paint i nagle system przeszukuje, ponieważ program Excel próbuje renderować ogromną bitmapę. Starsze wersje zazwyczaj ulegają awarii, po użyciu całej dostępnej pamięci i zjedzeniu pliku stronicowania. To było jednak w Windows 3.1 dni. Nowoczesne wersje dają komunikat o "bitmapzie za dużym" lub "za mało pamięci". Ostrzeżenie: Opóźnione renderowanie zostanie przedwcześnie wywołane przez aplikacje monitorujące zawartość schowka i automatycznie wklejające do niego dane, takie jak Pulpit zdalny, VMWare, Schowek pakietu Office i moje własne narzędzie ClipMate. Niektóre programy monitorowania schowka można powiedzieć, aby zignorować aktualizację schowka za pomocą flagi CF_Clipboard_Viewer_Ignore, co mam udokumentowane tutaj: link text

+0

Mężczyzna ...... niesamowity .. –

Powiązane problemy