首先請注意,這可能不是您的應用程序中的問題。其他應用程序鎖定了剪貼板或弄亂了通知鏈,現在你的應用程序無法訪問它。當我遇到像這樣的問題時,我重新啓動計算機,然後他們神奇地離開了......好吧......至少在我再次運行導致問題的應用程序之前。
此代碼(在Delphi中不選中)可以幫助你。它不會解決問題是通知鏈被破壞(除了PC重新啓動以外,沒有其他任何修復方法),但是如果應用程序鎖定剪貼板一段時間,它將解決問題。增加MaxRetries如果那個討厭的應用程序保持剪貼板鎖定很長一段時間(秒):
procedure Str2Clipboard(CONST Str: string; iDelayMs: integer);
CONST
MaxRetries= 5;
VAR RetryCount: Integer;
begin
RetryCount:= 0;
for RetryCount:= 1 to MaxRetries DO
TRY
inc(RetryCount);
Clipboard.AsText:= Str;
Break;
EXCEPT
on Exception DO
if RetryCount = MaxRetries
then RAISE Exception.Create('Cannot set clipboard')
else Sleep(iDelayMs)
END;
end;
而且,它可能是一個好主意,放棄了「加薪」,並將其轉換爲一個函數,並用它像這樣:
if not Str2Clipboard
then Log.AddMsg('Dear user, other applications are blocking the clipboard. We have tried. We really did. But it didn''t work. Try again in a few seconds.');
請注意,從德爾福的文檔這個片段:「Clipboard.Open - >打開剪貼板,防止其他應用程序,直到剪貼板關閉改變其內容添加一系列的項目到剪貼板之前調用open這可以防止其他應用程序從覆蓋剪貼板直到它被關閉(當向剪貼板添加單個項目時,不需要調用Open)。「 – Ampere 2013-12-16 16:41:32