Einzelnen Beitrag anzeigen

amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
274 Beiträge
 
Delphi 12 Athens
 
#15

AW: Zugriff auf die Clipboard Historie von Windows 10

  Alt 8. Jan 2021, 11:03
Ich habe die Lösung gefunden, wie man die Daten zumindest nicht in der Windows Zwischenablage sieht!

Unter https://docs.microsoft.com/en-us/win...istory-formats findet sich der Hinweis, dass man das ClipBoardFormat "ExcludeClipboardContentFromMonitorProcessing" anmelden muss, um nachfolgende Inhalte vor der "sichtbaren" Zwischenablage zu schützen.


Nachfolgender Code versteckt den Inhalt meiner Zwischenablage, lässt den Text aber über Strg+V und "Einfügen" in alle Texteditoren und Eingabefeldern einfügen!
Delphi-Quellcode:
procedure SetDataCB(myCF: Word; pBData: TBytes);
var
  MemHandle: THandle;
  MemPtr : Pointer;
begin
  begin
    MemHandle := GlobalAlloc(GHND, Length(pBData));
    if MemHandle <> 0 then
    begin
      MemPtr := GlobalLock(MemHandle);
      try
        Move(pBData, MemPtr, High(TBytes));
      finally
        GlobalUnlock(MemHandle);
      end;
    end
    else
      MessageDlg('Global Alloc failed!', mtError, [mbOK], 0);
  end;

  // Now we call SetAsHandle to write it to the clipboard.
  Clipboard.SetAsHandle(myCF, MemHandle);
end;
Delphi-Quellcode:
var
  bFalse, bTrue : TBytes;
  cf : Word;
const
  cfnNoMonitorProc = 'ExcludeClipboardContentFromMonitorProcessing';
// cfnHistory = 'CanIncludeInClipboardHistory';
// cfnCloud = 'CanUploadToCloudClipboard';
begin
  ClipBoard.Open;

  bFalse := TBytes.Create(0, 0, 0, 0);
  bTrue := TBytes.Create(1, 0, 0, 0);

  cf := RegisterClipboardFormat(CfnNoMonitorProc);
  if(cf = 0) then
    ShowMessage('Unable to register ' + CfnNoMonitorProc +'!')
  else
    SetDataCB(cf, bTrue);

// cf := RegisterClipboardFormat(CfnCloud);
// if(cf = 0) then
// ShowMessage('Unable to register ' + CfnHistory +'!')
// else
// SetDataCB(cf, bFalse);
//
// cf := RegisterClipboardFormat(CfnHistory);
// if(cf = 0) then
// ShowMessage('Unable to register ' + CfnCloud +'!')
// else
// SetDataCB(cf, bFalse);

  Clipboard.AsText := 'Mein Text in der Zwischenablage';
  ClipBoard.Close;
end;
Mit der Anmeldung der anderen ClipBoardFormate CanIncludeInClipboardHistory und CanUploadToCloudClipboard und der Übergabe des false Wertes, lässt sich auch die Übertragung der Daten in die Cloud verhindern.

Nachteil: andere Clipboard Viewer, wie z.B. der von GExperts liest die Daten weiterhin aus. Aber mir reicht es grundsätzlich erst einmal so.

Ich danke euch für die Denkanstöße!

Geändert von amigage ( 8. Jan 2021 um 11:07 Uhr)
  Mit Zitat antworten Zitat