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

«ZüriA»
Stadt Zürich lanciert eigene KI-Assistenz
Seit Kurzem steht den Mitarbeitenden der Stadt Zürich mit «ZüriA» eine KI-Assistenz zur Verfügung, die die Bearbeitung von internen, vertraulichen und streng vertraulichen Informationen ermöglicht.
2 Minuten
18. Mär 2026
Amazon plant offenbar ein eigenes Smartphone
Amazon entwickelt offenbar ein eigenes Smartphone. Das berichtet Reuters unter Berufung auf Insider im Unternehmen. Es wäre der zweite Anlauf in diesem Segment für den Web-Riesen.
2 Minuten
23. Mär 2026
Apple-Ecke
iCloud-Backups: wenig Aufwand, viel Wirkung
Apples iCloud ist kein Ersatz für klassische Backups. Doch mit dem richtigen Ansatz wird sie zur wichtigsten Verteidigungslinie gegen Datenverlust. Mit den folgenden Einstellungen werden wasserdichte Sicherheitskopien bei minimalem Aufwand realisiert.
6 Minuten
19. Mär 2026

Das könnte Sie auch interessieren

Künstliche Intelligenz
KI-Tools verhindern das Lernen am Arbeitsplatz
Berufseinsteiger erledigen an ihrem ersten Arbeitsplatz wegen Künstlicher Intelligenz (KI) immer weniger Routineaufgaben und erwerben auch nicht mehr nebenbei spezielle Qualifikationen durch die Zusammenarbeit mit erfahrenen Kollegen.
3 Minuten
Smartphone
Vivo bringt Zeiss-Kameras in die Mittelklasse
Vivo hat zwei Smartphones der neuen V70-Serie gezeigt, die auch nach Deutschland und in die Schweiz kommen könnten. Sie sollen mit Zeiss-Technologie bei den Kameras punkten.
2 Minuten
24. Feb 2026
Forschung
Strahlenresistente Elektronik für das All kreiert
Laut Forschern der Fudan-Universität eignen sich Schichten aus Molybdändisulfid für strahlungsbeständige Elektronik in Raumfahrzeugen.
3 Minuten
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Kommentare