http://digilander.libero.it/Cenati Accedere agli Appunti (clipboard) |
|
|
||
|
Scrivere negli "appunti" di Windows o "clipboard" Ricordo che fin dalla prima versione, Windows stupiva per la possibilità di ritagliare degli appunti da una applicazione per incollarli successivamente in un'altra. Questa funzione è di grande utilità nell'attività di ogni giorno, ma per lungo tempo non ne ho avuto la necessità nella scrittura di script. Qualche tempo fa mi è invece capitato di dover scrivere un programmino per comporre automaticamente dei testi che dovevano essere successivamente incollati in un programma che non supportava direttamente il colloquio con VbScript. In particolare dovevo prendere dei dati da una riga di un foglio di Excel e comporre il testo di una lettera. Insomma, una specie di mailmerge, ma ogni lettera doveva essere incollata separatamente in un programma che non potevo raggiungere tramite lo script, anche per permettere all'utente un controllo sul risultato ed eventuali aggiunte. VbScript non ha alcun comando per scrivere negli appunti, ma non è necessario acquistare un componente Active/x apposito, se avete almeno Internet Explorer oppure Word. Scriviamo negli Appunti usando Internet Explorer Il primo esempio che vi propongo è proprio con IE, che essendo presente su ogni installazione di Windows rispetta la mia politica di limitare al massimo l'insallazione di componenti aggiuntivi. Il codice che vi mostro crea una istanza di IE che rimane invisibile. Crea al volo una pagina html e ci scrive dentro quello che l'utente vuole. Infine esegue due comandi di IE: seleziona tutto il testo contenuto nella finestra e attiva il comando "Copy". Come se lo si scegliesse dalla barra dei menu. StrClipboard= inputbox("Questo testo sarà messo nella clipboard") With CreateObject("InternetExplorer.Application") .Navigate "about:blank" 'http://digilander.libero.it/Cenati do until .ReadyState = 4 : Wscript.Sleep 100 : Loop .visible = false With .document .writeln("<html><head><title></title></head><body><pre>") .writeln(StrClipboard) .writeln("</pre></body></html>") .execcommand "SelectAll" .execcommand "Copy" end with ' document end with 'Createobject Il documento creato contiene il testo della variabile "StrClipboard" tra due tag "pre". Questo significa che il testo è preformattato, quindi mantiene i ritorni a capo tra le righe. Potete quindi scrivere il vostro testo anche su più righe utilizzando il carattere speciale di VbScript che si chiama VbCrLf. Questo forza un ritorno a capo nella stringa (carriage return e line feed). Per avere nella clipboard un testo composto da più righe puoi quindi scriverlo così: strClipboard = "Riga uno " & vbcrlf strClipboard = strClipboard & "Riga 2 " & vbcrlf Il codice può anche essere trasformato in procedura, e diventerà così: setClipboard("Apri notepad e scegli Modifica/Incolla") sub SetClipboard(StrClipboard) With CreateObject("InternetExplorer.Application") .Navigate "about:blank" 'http://digilander.libero.it/Cenati do until .ReadyState = 4 : Wscript.Sleep 100 : Loop .visible = false With .document .writeln("<html><head><title></title></head><body><pre>") .writeln(StrClipboard) .writeln("</pre></body></html>") .execcommand "SelectAll" .execcommand "Copy" end with ' document end with 'Createobject end sub Anziché usare il tag "pre" si può giocare un po' con i font e creare un testo html complesso. La formattazione verrà mantenuta se il testo sarà incollato in un programma che la riconosce, come Word o Wordpad. Inoltre, se al posto del testo ci mettete il link ad una immagine, la otterrete negli appunti e potrete incollarla dove volete. Anziché scrivere la riga con .writeln(StrClipboard) dovete scrivere qualcosa come .writeln("<img src" & chr(34) & "C:\Documenti\Immagini\abc.jpg" & chr(34) & ">") Ovviamente dovrete indicare la posizione del file con l'immagine che vi interessa. Notate che per ottenere il nome del file tra virgolette (all'interno del documento html) è necessario inserire il chr(34) che genera le virgolette, oppure la combinazione speciale "doppie virgolette". E ora usiamo Word Un secondo metodo per copiare qualcosa negli appunti è utilizzando Word. Spesso è fornito con Windows al momento dell'acquisto, magari nella suite ridotta (io ho Office 2000 sbe, senza Frontpage né Access). Msg = " line 1 " & vbCrLf Msg = Msg & " LINE 2 " Set objWord = CreateObject("Word.Application") 'http://digilander.libero.it/Cenati objWord.Visible = False With objWord .Documents.Add .Selection.TypeText Msg .Selection.WholeStory .Selection.Copy .Quit 0 End With Questo codice esegue una istanza di MS Word, ci scrive il contenuto della variabile Msg, seleziona tutto il testo e lo copia. Il funzionamento è analogo a quello illustrato con Internet Explorer. In entrambi i casi accadrà che la prima volta che viene chiamata questa funzione, il disco fisso lavorerà per qualche istante prima di continuare l'elaborazione. Questo accade perchè bisogna caricare IE o Word in memoria. La seconda volta che usate questa funzione all'interno del programma sarà molto più veloce, perchè in realtà al termine della procedura la memoria non viene scaricata e Word (o IE) rimane a disposizione per ulteriori istanze. Usando Word c'è un limite di circa 11.000 caratteri che possono
essere scritti negli appunti. Quando, usando normalmente il word processor,
si copiano molti dati e si chiude Word, appare un messaggio che ci informa
della grande mole di informazioni copiate. Word ci chiede se vogliamo
mantenere questi dati negli appunti in modo che siano accessibili da altre
applicazioni. Possiamo rispondere si oppure no. Leggere i dati presenti nella Clipboard Il più è fatto... Scrivere negli Appunti di Windows non è facile, anche perchè il testo può essere più o meno formattato. La lettura dei dati presenti nella clipboard ci offre meno possibilità di scelta. In VbScript possiamo solo recuperare stringhe di testo. Se vogliamo altri tipi di dati dovremo comunque incollarli in Word o in qualche altro programma per poterli utilizzare. Anche nel caso della lettura degli appunti non troviamo alcuna istruzione nativa in VbScript. Bisogna quindi appoggiarsi a qualche altro programma, come ad esempio Internet Explorer. Anche questa volta ci viene in aiuto, per fini che non hanno nulla a che fare con la rete internet. Lo spezzone di codice che segue crea un oggetto htmlfile e lo usa per accedere alla funzione GetData di Internet Explorer. Set objHTML = CreateObject("htmlfile") strText = objHTML.ParentWindow.ClipboardData.GetData("text") msgbox strText oppure in modo più conciso si può anche scrivere strText = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text") msgbox strText A me questo metodo funziona senza problemi, ma potreste incontrare delle difficoltà se sono impostate delle restrizioni alla sicurezza di IE. Infatti pare che questo sistema funzioni solo se le impostazioni sono settate su sicurezza Media o Bassa. In alternativa potrete utilizzare i metodi di Word (del Visual Basic for Application, quindi anche di Excel). Ecco il codice, che non è molto diverso da quello mostrato per copiare i dati negli Appunti. In questo caso si crea un documento vuoto, si incolla il contenuto degli appunti, si seleziona tutto il testo e si legge in una variabile (strText) la selezione. Con Word invisibile l'utente non si accorge di nulla. Set objWord = CreateObject("Word.Application") objword.visible=false with objWord .Documents.add .Selection.Paste .Selection.WholeStory strText= .Selection end with msgbox strText Giovanni Cenati |
||
© Cenati Giovanni 2004/2010 - http://digilander.libero.it/Cenati - Reventlov at Katamail com
|