Borrar filtros
Borrar filtros

Trigger event when content on system clipbooard changes

3 visualizaciones (últimos 30 días)
Martin
Martin el 23 de Oct. de 2023
Comentada: Martin el 24 de Oct. de 2023
Hi!
I would like to trigger an event and code when the content of the clipboard changes.
I am creating polygons in a GIS-software by using a built in function of that software which captures X and Y coordinates when clicking in a map and sends these coordinates in a standadized manner to the system clipboard. Currently I'm manually pasting these coordinates into an excel sheet column and then use a script to create a SQL-string which is re-imported into the GIS-software.
I would like to initiate a MATLAB listener which triggers when the content of the system cliipboard (i.e. the clipboartd('paste') ) changes so I can automate the whole process and create the SQL-string when e.g. pressing TAB three times in a row. That bit with the TAB I've got nailed down - but the part where an event triggers when the system cliupboard changes has got me stumped.
I believe that I have to create a custom class and create a observable property for the clipboard. I can then listen for changes on that property. But how would I make the property dynamically/automatically update when the system clipboard changes? Is there a way to do this?
I guess one way would be to create a timer and every say two seconds get the value of the clipboard and update the property - but I would very much prefer not to do it this way.
My difficulty may also in no small part be that I'm really a Naval Architect and in all honesty have very little experience in programming with classes. =)
Anyone got some ideas to do this? Or is it impossible and should I just go for the option with the timer instead?
Best regards
//Martin

Respuesta aceptada

chrisw23
chrisw23 el 24 de Oct. de 2023
asm = NET.addAssembly("System.Windows.Forms");
% Includes clipboard-class.
fCol = System.Collections.Specialized.StringCollection();
fInfo = System.IO.FileInfo("C:\Temp\dummy.txt");
fCol.Add(fInfo.FullName);
fClipboard = System.Windows.Forms.Clipboard;
fClipboard.SetFileDropList(fCol);
% Static methods:
%
% Clear ContainsFileDropList GetAudioStream GetFileDropList ReferenceEquals SetDataObject SetText
% ContainsAudio ContainsImage GetData GetImage SetAudio SetFileDropList
% ContainsData ContainsText GetDataObject GetText SetData SetImage
Here's an example how to access the clipboard class in Matlab. Unfortunately there's no event suited for your needs but a bunch of methods you could poll periodically. Check options by methodsview or details cmd.
  1 comentario
Martin
Martin el 24 de Oct. de 2023
Well - thank you. This will come in handy - but not for this need. All the "contains..." methods may well come to really good use. I can see a whole sleathe of great things to do with this actually.
I ended up with the "running a timer option" and triggering comparsion with the last unique captured data on the clipboard- That worked out great, and I could also have all the code that detects and validates the data I'm looking for on the clipboard using the same trigger function from the timer.
I could also make a small GUI to start and stiop the timer, and this could also be used for listening for key presses to end the capture of dat afrom the clipboard I wanted to.But I ended up using a button for this instead, since I anyhow had to make the GUI to allow for the key press listener.
It actually seems there is no way to make a listener for changes to the clipboard - at least I have not found a trace of a solution on how to do this.... Which is a shame since this would probably be less use of CPU and system resources. But I suppose you'll just get a Core i9 computer and more ram instead... ;)

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Environment and Settings en Help Center y File Exchange.

Productos


Versión

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by