Anzeige
Anzeige
Anzeige
Lesedauer 2 Min.

Windows Zwischenablage: Warten auf den Clipboard History Change

In einem Blog-Post beschreibt der Autor Raymond Chen, wie man auf Änderungen der Clipboard History wartet, um effizientere Clipboard-Operationen durchzuführen.
© (Quelle: EMGenie)

Wie kann man Clipboard-Inhalte verwalten, insbesondere um sicherzustellen, dass Änderungen in der Zwischenablage von der Clipboard History erkannt werden, bevor neue Veränderungen vorgenommen werden? Eine grundlegende Erkenntnis ist, dass der Clipboard-Historien-Service schnelle Änderungen an den Inhalten nicht erfasst. Dies stellt ein Problem für Programme dar, die darauf abzielen, die Clipboard-Historie zu füllen.

Um sicherzustellen, dass eine Änderung erfolgreich in die Historie aufgenommen wurde, muss auf das Clipboard.HistoryChanged-Ereignis gewartet werden. Dieses Ereignis signalisiert, dass eine Änderung in der Clipboard-Historie stattgefunden hat, etwa wenn neue Daten hinzugefügt oder bestehende Daten entfernt wurden. Für einfache Anwendungen nehmen wir an, dass die einzige Quelle für Historienänderungen die neuen Clipboard-Daten sind, die von der Anwendung hinzugefügt werden.

Der folgende C++ Code demonstriert, wie man dies implementieren kann:

#include <windows.h>#include <winrt/Windows.ApplicationModel.DataTransfer.h>#include <winrt/Windows.Foundation.h>#include <winrt/Windows.System.h> namespace winrt {  using namespace winrt::Windows::ApplicationModel::DataTransfer;  using namespace winrt::Windows::Foundation;  using namespace winrt::Windows::System; } void SetClipboardText(HWND hwnd, PCWSTR text) {  OpenClipboard(hwnd);  EmptyClipboard();  auto size = sizeof(wchar_t) * (1 + wcslen(text));  auto clipData = GlobalAlloc(GMEM_MOVEABLE, size);  auto buffer = (LPWSTR)GlobalLock(clipData);  strcpy_s(buffer, size, text);  GlobalUnlock(clipData);  SetClipboardData(CF_UNICODETEXT, clipData);  CloseClipboard(); } static constexpr PCWSTR messages[] = {  L"314159", // Bug-Nummer  L"e83c5163316f89bfbde7d9ab23ca2e25604af290", // Commit  L"Widget polarity was set incorrectly." }; winrt::IAsyncAction Sample() {   co_await winrt::resume_foreground(queue);  if (!winrt::Clipboard::IsHistoryEnabled()) {    co_return;  }  winrt::handle changed(    winrt::check_pointer(CreateEventW(nullptr, FALSE, FALSE, nullptr)));  auto historyChanged =     winrt::Clipboard::HistoryChanged(winrt::auto_revoke,       [h = changed.get()](auto&&, auto&&) {      SetEvent(h);    });  auto tempWindow = CreateWindowExW(0, L"static", nullptr, WS_POPUPWINDOW,     0, 0, 0, 0, nullptr, nullptr, nullptr, nullptr);  for (auto message : messages) {    SetClipboardText(tempWindow, message);    co_await winrt::resume_on_signal(changed.get());    co_await winrt::resume_foreground(queue);  }  DestroyWindow(tempWindow); } int wmain([[maybe_unused]] int argc, [[maybe_unused]] wchar_t* argv[]) {  winrt::init_apartment();  {    auto controller =       winrt::DispatcherQueueController::CreateOnDedicatedThread();    Sample(controller.DispatcherQueue()).get();    controller.ShutdownQueueAsync().get();  }  winrt::uninit_apartment();  return 0; } 

In dem Beispiel wird ein temporäres Fenster erstellt, um Clipboard-Operationen durchzuführen. Jedes Mal, wenn ein Text in das Clipboard gesetzt wird, wird auf das HistoryChanged-Ereignis gewartet, um zu prüfen, ob der Clipboard-Inhalt erfolgreich aktualisiert wurde. Dies ermöglicht eine sequenzielle Verarbeitung von Clipboard-Daten ohne Verzögerungen oder Abstürze.

Ein Augenmerk sollte auch auf die Notwendigkeit gelegt werden, die Clipboard-Historie zu überprüfen, da das Programm während seiner Ausführung möglicherweise auf nicht aktivierte Clipboard-Historienbezeichnungen stösst. Dies kann zu Blockierungen führen, wenn die Historie während der Laufzeit deaktiviert wird. Daher sind Feinjustierungen bei der Implementierung erforderlich, um eine robuste Handhabung zu gewährleisten.

Wie Sie Änderungen in der Zwischenablage erkennen.

Kommentare

Softwareentwicklung Microsoft Office
Anzeige
Anzeige

Neueste Beiträge

Die besten PCtipp-Artikel aus der Kalenderwoche 37
In der Kalenderwoche 37 vom 7. bis 13. September 2026 standen die Artikel «yallo bringt Travel eSIM für mobile Daten in über 160 Destinationen» und «iPhone Duo und weitere Hardware vorgestellt» oben in der Gunst unserer Leserschaft. 
2 Minuten
18. Sep 2026
Erste Singles schon da
Grand Theft Auto VI bekommt auch Musikalbum
Zusätzlich zum Spiel Grand Theft Auto VI wurde nun auch ein Musikalbum angekündigt. Die ersten sechs Songs daraus können schon angehört werden.
2 Minuten
18. Sep 2026
EDÖB und privatim
Leitfaden zur digitalen Überwachung in Pflegeeinrichtungen
Der Einsatz von Kameras, Infrarotsensoren oder Radaren zur Überwachung von betreuten Personen in Spitälern oder ähnlichen Einrichtungen gewinnt an Bedeutung. Der EDÖB und privatim veröffentlichen einen Leitfaden, um die datenschutzrechtlichen Herausforderungen aufzuzeigen und Einrichtungen zu sensibilisieren, die solche Überwachungslösungen einsetzen möchten.
3 Minuten
17. Sep 2026

Das könnte Sie auch interessieren

Der Zenit für Gamer, Cosplayer und Fans von Star Wars
Fantasy Basel 2024: der grosse Rückblick
Sie war auch dieses Jahr die wichtigste Messe für Gamer, Cosplayer oder einfach für alle, die galaktische und fantastische Geschichten lieben. PCtipp hat die coolsten Bilder auf der Fantasy Basel 2024, der grössten Schweizer Comic Con, gesammelt.
3 Minuten
13. Mai 2024
Brack.Alltron CONNECT 2026: Die wichtigste ICT-Leitmesse der Schweiz
Auf der CONNECT 2026 von Brack.Alltron am 26. und 27. August 2026 in Zürich-Oerlikon treffen sich ICT-Professionals zur wichtigsten Fachmesse der Branche. In der Halle 550 präsentiert der Veranstalter Brack.Alltron unter dem Motto «Unboxing Tomorrow» an zwei Tagen die neuesten Trends und Lösungen. PCtipp ist live vor Ort und zeigt die Aussteller und Trends.
5 Minuten
27. Aug 2026
In eigener Sache
PCtipp 9/2026: mit diesen Themen ab dem 28. August 2026 am Kiosk erhältlich
Freuen Sie sich auf eine Ausgabe voller praktischer Ratschläge und fesselnder Inhalte! Holen Sie sich Ihren PCtipp 9/2026 ab dem 28. August 2026 am Kiosk und bleiben Sie stets auf dem neuesten Stand der PC-Technologie. Das Epaper ist auch schon online.
2 Minuten
28. Aug 2026
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Kommentare