Laden...

ClipBoardReader

Erstellt von MOnsDaR vor 15 Jahren Letzter Beitrag vor 14 Jahren 5.742 Views
M
MOnsDaR Themenstarter:in
25 Beiträge seit 2008
vor 15 Jahren
ClipBoardReader

ClipboardReader:

Da ich in mehreren Projekten von mir die Technik genutzt habe, Daten aus dem Clipboard zu lesen, habe ich vor einiger Zeit mal einen ClipBoardReader geschrieben.

Einführung:
Ich beziehe mich in der Erklärung auf folgenden Beispielcode:

private ClipboardReader reader;

//init the reader
reader = new ClipboardReader();

//store some regEx to the reader
reader.Add("http://www\\.youtube\\.com/watch\\?v=[a-zA-Z0-9-_]{11}");
reader.Add("gr[ae]y");

//register the eventhandler
reader.ResultFound += reader_ResultFound;

//start the reader
Thread thread = new Thread(reader.Run);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();

Nach der Initialisierung des Readers ist es möglich mit der Methode Add() reguläre Ausdrücke in Stringform hinzuzufügen. Im Beispiel wird zum Einen die Erkennung von Youtube- URLs und zum Anderen die Erkennung des Wortes gray oder grey hinzugefügt.

Das Event ResultFound muss abonniert werden. Über dieses werden die Ergebnisse ausgegeben.

Zuletzt kann man die Run()- Methode des Readers in einem Thread ausführen.

Laufzeitverhalten:
Wenn die Methode Run() läuft, wird in einem bestimmten Intervall (lässt sich einstellen, Standard ist 200ms) das Clipboard nach Texten geprüft, die den übergebenen Regular Expressions entsprechen.
Sobald ein solcher Text gefunden wird, wird das ResultFound- Event ausgelöst. in den EventArgs befindet sich dann eine Liste mit gefundenen Einträgen.

Zu beachten:

  • Der Thread muss den ApartmentState.STA gesetzt haben. Dies liegt im Zugriff auf eine Systemkomponente begründet. (Soweit ich das verstanden habe)
  • Um den Reader zu beenden, muss man die Eigenschaft Running auf false setzen.

Einsatzbeispiele:
Ich benutze in meinen Projekten diese Komponente um dem User die Eingaben zu erleichtern.

  • Ein Programm erwartet nach dem Start eine IP:Port- Kombination. Befindet sich eine solche im Clipboard, wird sie bereits in die entsprechenden TextBoxes eingefügt
  • Ein weiteres Programm ermöglicht es, URLs bestimmter Webseiten (Youtube, MyVideo etc) hinzuzufügen. Dies geschieht teils über den ClipboardReader.

Lizenz:
Die Komponente kann in ihrer hier bereitgestellten Form in kommerziellen wie auch nonkommerziellen Projekten eingesetzt werden. Es steht euch frei, sie zu verändern. Auf gutdeutsch: Macht was ihr wollt damit.
Es wäre natürlich schön, hin und wieder zu erfahren, ob und wo ihr den Reader eingesetzt habt.

Über Feedback werde ich mich sicherlich nicht beklagen.

Viel Spaß bei der Nutzung,
MOnsDaR

Clipboard Zwischenablage ClipboardReader Reader Regex Regular Expression

Meine Projekte:
ClipboardReader
MusicMasher (auf Eis gelegt)
PAMTracker 4.02

1.346 Beiträge seit 2008
vor 15 Jahren

Das sieht sehr Gut aus, wirklich. Ich hab nur eine Sache zum meckern. ICh würde das STarten des Threads in der Run Methode vornehmen. so kann man das noch leichter benutzen.

Gruß pdelvo

M
MOnsDaR Themenstarter:in
25 Beiträge seit 2008
vor 15 Jahren

Das habe ich auch schon überlegt. Weiterhin wäre es etwas leichter zu bedienen, wenn man dann eine Stop()- Methode hätte und Running private wäre.

So könnte man via Start() und Stop() alles regeln.

Habe zur Zeit leider einiges um die Ohren, werde mich dem aber annehmen, sobald etwas mehr Zeit zur Verfügung steht.

Meine Projekte:
ClipboardReader
MusicMasher (auf Eis gelegt)
PAMTracker 4.02

S
6 Beiträge seit 2009
vor 14 Jahren

hi
ich hab ein problem mit add()
ich versteh das mit {11} nicht kannste das mal erklären?

5.742 Beiträge seit 2007
vor 14 Jahren

Hallo SpyderZ3r0,

Nach der Initialisierung des Readers ist es möglich mit der Methode Add() reguläre Ausdrücke in Stringform hinzuzufügen

Das "{11}" gehört zum Pattern - siehe [Artikel] Regex-Tutorial

1.361 Beiträge seit 2007
vor 14 Jahren

Hi,

ich bin gerade auf den Artikel gestoßen und wollte noch einen Verbesserungsvorschlag einbringen.

Wenn die Methode Run() läuft, wird in einem bestimmten Intervall (lässt sich einstellen, Standard ist 200ms) das Clipboard nach Texten geprüft, die den übergebenen Regular Expressions entsprechen.

Das Polling des Clipboards ist irgendwie unschön.
Das Modul sollte sich lieber als ClipboardViewer registrieren.
Das wäre eleganter.
Und eine mögliche Problematik, dass jemand ein ganz flinker CopyPaster ist und die Polling-Zeit zu grob ist, wäre damit auch gegessen.

Erfordert zwar etwas Interop mit der nativen WinAPI, der sich aber lohnt.

beste Grüße
zommi