2010-02-19 4 views
9

Per una piccola utility che sto scrivendo (.NET, C#), voglio monitorare le operazioni di copia degli appunti e le operazioni di incolla degli appunti.Come ottenere una notifica di incollatura di appunti e fornire i miei dati personali?

La mia idea è di fornire i miei dati quando si incolla in un'applicazione arbitraria.

Il monitoraggio di un'operazione di copia può essere eseguito facilmente utilizzando clipboard viewer.

Qualcosa che sembra molto più avanzato per me è quello di scrivere un "appunti fornitore di pasta":

  • risposta alla domanda "quali formati sono disponibili" query di applicazioni.
  • Fornire dati alle operazioni di incolla dell'applicazione.

Ho trovato this posting e this posting, ma nessuno di loro sembra davvero aiutarmi.

Quello che penso è che in qualche modo devo imitare/dirottare gli appunti corrente.

Domanda:

E 'possibile "wrap" negli appunti in termini di operazioni di copia e di fornire il mio tipo di "proxy appunti"?

+1

PS: Ti conosco su CodeProject;) Ironico che ti ho reindirizzato a CodeProject per questo !! !! : D lol – t0mm13b

risposta

11

È necessario agganciare il gancio degli appunti utilizzando un gancio di Windows. Un hook di Windows è un modo per intercettare gli eventi globali e fornire la propria procedura di hook per sostituire o intercettare il messaggio. Dai un'occhiata qui allo CodeProject che spiega come agganciare. Ecco uno clipboard helper che ascolta la funzionalità di copia/incolla. Ecco uno Clipboard spy che fa proprio questo. Ecco un altro articolo che implementa un Clipboard hook.

+5

Grazie, Tom! Il miglior riferimento all'articolo è quello che aggancia "Ctrl + V". Ma: cosa succede se l'utente fa clic con il pulsante destro del mouse e seleziona "Incolla" da un menu di scelta rapida o in qualche altro modo? Immagino che la soluzione sarebbe _non_ da agganciare a tastiera/mouse/qualsiasi altra cosa ma per intercettare direttamente la comunicazione degli appunti. –

9

Controllare "rendering ritardato" in WinAPI. Con questa tecnica, si caricano gli appunti con maniglie null e, incollati, Windows ti avvisa con un messaggio WM_RENDERFORMAT. Questo è il modo in cui app come Excel riescono a "copiare" 25 diversi formati. In realtà non li copia tutti. In realtà produrrà alcuni di quelli comuni come TEXT, ma "pubblicizzerà" gli altri come Bitmap, Html, WKS, ecc., Scegliendo di aspettare per vedere cosa l'applicazione di destinazione vuole incollare.
Considera questo: è possibile selezionare 5000 celle in Excel e copiare e gli appunti vengono aggiornati abbastanza rapidamente. Ora incollare in Windows Paint e improvvisamente il sistema esegue la ricerca per indicizzazione mentre Excel tenta di eseguire il rendering di un'enorme bitmap. Le versioni precedenti di solito si bloccavano, dopo aver utilizzato tutta la memoria disponibile e mangiato il file di paging. Questo era di nuovo nei giorni di Windows 3.1. Le versioni moderne danno un messaggio su "bitmap troppo grande" o "memoria insufficiente". Avviso: il rendering differito verrà attivato prematuramente dalle app che monitorano gli Appunti e incollano automaticamente i dati in se stessi, come Desktop remoto, VMWare, Appunti di Office e il mio ClipMate. Alcuni programmi di monitoraggio clipboard può essere detto di ignorare l'aggiornamento appunti utilizzando il flag CF_Clipboard_Viewer_Ignore, che ho documentato qui: link text

+0

Uomo ...... incredibile .. –