| 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;
|