OpenClipboard | 打开剪贴板以防止其他程序修改剪贴板的内容 参数是关联的窗口句柄,输入 0 表示当前任务 |
EmptyClipboard | 清空剪贴板并且指定所有者是调用 OpenClipboard 时传入的窗口句柄 |
procedure SetClipboardText(ws: WideString); var Data: THandle; DataPtr: Pointer; Size: Integer; WStr: PWideChar; begin Size := Length(ws) * 4; WStr := PWideChar(ws); try OpenClipboard(0); EmptyClipboard; Data := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, Size); try DataPtr := GlobalLock(Data); try Move(WStr^, DataPtr^, Size); SetClipboardData(CF_UNICODETEXT, Data); finally GlobalUnlock(Data); end; except GlobalFree(Data); raise; end; finally CloseClipboard; end; end; |
function GetClipboardText:WideString; var Data: THandle; DataPtr: Pointer; Size : Integer; WStr: PWideChar; begin Result := ''; try if OpenClipboard(0) then if IsClipboardFormatAvailable(CF_UNICODETEXT) then begin Data := GetClipboardData(CF_UNICODETEXT); if Data<>0 then begin Size := GlobalSize(Data); DataPtr := GlobalLock(Data); if DataPtr<>nil then try SetLength(result,Size div 2 - 1); WStr := PWideChar(result); Move(DataPtr^,WStr^,size); //lstrcpynW(PWideChar(Result),DataPtr,size); finally GlobalUnlock(Data); end; end; end; finally CloseClipboard; end; end; |