C-Sharp - Schreiben in die Zwischenablage

rana-mp
Goto Top
Hallo zusammen,

ich habe ein Problem, was fuer mich als relativ unerfahrenen Programmierer im Momoment unloesbar erscheint.

Ein wenig Hintergrund: Ich habe einen USB Smardcard Leser, der intern mit einem FTDI USB to Serial Chip angebunden ist, unter Windows also nur eine schnoede COM Schnittstelle bereitstellt.
Das Ding ist schon ein paar Jaehrchen aelter, und eine spezialle Software dafuer gibt es nicht. Kurze Tests mit Putty haben ergeben das er die Katennummer im Klartext ueber die Schnittstelle jagt, da dachte ich mir, schreib ich mir doch fix mein eigenes Programm. Dies in C#, da ich da noch am meisten Erfahrung habe. Das Programm soll die Kartennummer auslesen und anschliessend diese in die Zwischenablage kopieren.

Hier mein kompletter Code:

Grundlegend funktioniert dieser Code so wie er sollte und kann auch Fehler beim Lesen kompensieren. Aber beim schreiben in die Zwischenablage bekomme ich folgende Fehlermeldung:

Dazu findet man haufenweise im Netz, aber die fast immer angegebene Standardloesung [STAThread] an die Main anzufuegen funktioniert hier nicht. Dabei ist es egal ob ich die Clipboard Klasse aus System.Windows oder aus System.Windows.Forms nehme, beides gibt den gleichen Fehler.

Gruss,

rana-mp

Content-Key: 236786

Url: https://administrator.de/contentid/236786

Ausgedruckt am: 17.08.2022 um 07:08 Uhr

Mitglied: colinardo
Lösung colinardo 29.04.2014, aktualisiert am 30.04.2014 um 10:28:28 Uhr
Goto Top
Hallo rana-mp,
das ist etwas schwierig zu erklären, das liegt aber daran wie [Single Thread Appartments] funkionieren. Das steht hier erklärt:http://msdn.microsoft.com/en-us/library/windows/desktop/ms680112%28v=vs ...

http://stackoverflow.com/questions/17175783/prevent-event-from-spawning ...

Das hier sollte aber alternativ dazu problemlos funktionieren: (dann musst du auch nicht so eine große Referenz wie "Windows.Forms" zu deiner Console-App hinzufügen)
back-to-topNutze das Win32-API dazu (Beispiel):
Mitglied: rana-mp
rana-mp 30.04.2014 um 10:28:21 Uhr
Goto Top
Hallo colinardo,

auch wenn ich gesetehen muss das ich den Code (noch) nicht 100%tig verstehe, so funktioniert es doch einwandfrei face-smile

Vielen dank.
Mitglied: papasmurf
papasmurf 11.07.2014 um 16:40:43 Uhr
Goto Top
The copy-to-clipboard code in question is slightly problematic. StringToHGlobalUni doesn't do what it is natural to think it does. It actually uses LocalAlloc with LMEM_FIXED, but SetClipboardData requires memory allocated with GlobalAlloc and GMEM_MOVABLE. The code can thus cause crashes.

Here's a link to my response on the subject on StackOverflow, which you can follow to get a more robust solution on GitHub if you'd like:

http://stackoverflow.com/a/24698804/2682101