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

Honor: Neue Oberklasse mit zwei Modellen der 600-Serie
Die neuen Honor-Smartphones 600 und 600 Pro sollen in der Oberklasse mit schnellen Snapdragon-Prozessoren und umfangreichen KI-Funktionen der Kameras punkten.
3 Minuten
6. Mai 2026
Echtzeittext - Bundesrat schafft Grundlage für neue Notruffunktion
Der Bundesrat hat mehrere Verordnungen angepasst, um ein sicheres Notrufsystem zu fördern. In Zukunft können Menschen in Notlage die Notdienste von Polizei, Feuerwehr und Sanität per Echtzeittext auf den Smartphones auch schriftlich erreichen. 
3 Minuten
ggs netz übernimmt sämtliche Kommunikationsnetze der GIB-Solutions
Die ggs netz ag übernahm per 1. Mai 2026 sämtliche Kommunikations-netze der GIB-Solutions AG. Mit der Transaktion kommen rund 10’000 Digitalanschlüsse hinzu. Die übernommenen Netze werden künftig über die neu gegründete Tochtergesell-schaft ggs plus ag betrieben.
3 Minuten

Das könnte Sie auch interessieren

Publireportage
Ist öffentliches WLAN sicher? Das solltest du wissen
Öffentliche WLAN-Netze sind überall: in Flughäfen, Hotels, Bibliotheken, Einkaufszentren und vielen anderen Orten. Sich schnell und kostenlos mit dem Internet zu verbinden, war noch nie so einfach. Doch so praktisch diese Netzwerke auch sind – für Cyberkriminelle sind sie ein echtes Einfallstor.
3 Minuten
Vergabe der UKW-Konzessionen für Radios 2027 bis 2034
Das Bundesamt für Kommunikation BAKOM hat das Verfahren für die Vergabe der UKW-Funkkonzessionen zur Verbreitung von Radioprogrammen ab 2027 festgelegt. Die SRG und Privatradios mit Leistungsauftrag können auf Gesuch hin ihre bisherigen Frequenzen weiter nutzen. SRG vor UKW-Rückkehr?
3 Minuten
21. Apr 2026
Lederarmbänder werden zu Stromspeichern
Forscher der Jilin-Universität machen aus ledernen Jacken, Trachtenhosen und Uhrarmbändern Batterien. Dabei bleibt ihre ursprüngliche Funktion erhalten.
3 Minuten
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Kommentare