如何实现剪贴板中内容的保存与恢复 ( 积分: 100 )

  • 主题发起人 主题发起人 刀山
  • 开始时间 开始时间

刀山

Unregistered / Unconfirmed
GUEST, unregistred user!
这里有一款非常好的软件,不管你拷贝的是什么样的内容,它都能够识别,并且能够保存与恢复,不知道是怎么实现的。
http://www.onlinedown.net/soft/26204.htm
不知道那位大侠能给指点一下看看

下面是华军软件园中的介绍说明
[blue]CLCL 是一个非常强大的剪贴板增强工具。

- 支持所有剪贴板格式。
- 可以自定义模板。
- 热键 "Alt+C&quot
弹出菜单。
- 自定义菜单。--这个功能非常强大,很多项目都可以自定义,来满足个人习惯。
- 自动粘贴条目。
- 在菜单上显示图片。--非常适合在图像编辑软件中使用。
- 在菜单上显示提示。
- 能够设置格式过滤。
- 能够设置忽略的窗口。
- 能够为每个窗口设置粘贴键。
- 使用插件来扩展功能。
- 免费软件[/blue]
 
这里有一款非常好的软件,不管你拷贝的是什么样的内容,它都能够识别,并且能够保存与恢复,不知道是怎么实现的。
http://www.onlinedown.net/soft/26204.htm
不知道那位大侠能给指点一下看看

下面是华军软件园中的介绍说明
[blue]CLCL 是一个非常强大的剪贴板增强工具。

- 支持所有剪贴板格式。
- 可以自定义模板。
- 热键 "Alt+C&quot
弹出菜单。
- 自定义菜单。--这个功能非常强大,很多项目都可以自定义,来满足个人习惯。
- 自动粘贴条目。
- 在菜单上显示图片。--非常适合在图像编辑软件中使用。
- 在菜单上显示提示。
- 能够设置格式过滤。
- 能够设置忽略的窗口。
- 能够为每个窗口设置粘贴键。
- 使用插件来扩展功能。
- 免费软件[/blue]
 
用API就可以。
 
能具体点么
 
没看明白你的需求是什么
 
看不太懂啊
 
请大侠来啊
 
program ClipView;

uses
Windows, Messages;

// 窗体消息处理过程
function WndProc(hWnd: HWND
Msg: UINT
wParam: WPARAM
lParam: LPARAM): LRESULT
stdcall;
const
{$J+}
hWndNextViewer: Longint = 0
// 下一个监视窗口
{$J-}
var
hWndDc: HDC;
ps: TPaintStruct;
Rect: TRect;
hGlobal: DWORD;
pGlobal: PChar;
begin
Result := 0;
case Msg of
WM_CREATE:
hWndNextViewer := SetClipboardViewer(hWnd)
// 添加监视窗口

WM_CHANGECBCHAIN:
begin
if (wParam = hWndNextViewer) then // 被摘除的是下一个监视窗口
hWndNextViewer := lParam
else
if (hWndNextViewer <> 0) then
SendMessage(hWndNextViewer, Msg, wParam, lParam)
// 传给下一个监视窗口
end;

WM_DRAWCLIPBOARD:
begin
if (hWndNextViewer <> 0) then
SendMessage(hWndNextViewer, Msg, wParam, lParam)
// 传给下一个监视窗口
InvalidateRect(hWnd, nil, TRUE)
// 重画(剪贴板中文字内容)
end;

WM_PAINT:
begin
hWndDc := BeginPaint(hWnd, ps);

GetClientRect(hWnd, Rect)
// 窗体客户区范围
OpenClipboard(hWnd)
// 打开剪贴板
hGlobal := GetClipboardData(CF_TEXT)
// 取得文字信息内存块
if (hGlobal <> 0) then // 取到
begin
pGlobal := GlobalLock(hGlobal)
// 锁定
DrawText(hWndDc, pGlobal, -1, Rect, DT_EXPANDTABS)
// 绘制
GlobalUnlock(hGlobal)
// 解锁
end;
CloseClipboard()
// 关闭剪贴板

EndPaint(hWnd, ps);
end;

WM_DESTROY:
begin
PostQuitMessage(0)
// 放一个WM_QUIT消息
ChangeClipboardChain(hWnd, hWndNextViewer)
// 从监视窗口链中摘除
end;

else
Result := DefWindowProc(hWnd, Msg, wParam, lParam)
// 标准处理
end;
end;

const
szAppName = 'ClipView';
var
hWnd: DWORD;
Msg: TMsg;
WndClass: TWndClass

begin
// 填充结构体
WndClass.style := CS_HREDRAW or CS_VREDRAW;
WndClass.lpfnWndProc := @WndProc;
WndClass.cbClsExtra := 0;
WndClass.cbWndExtra := 0;
WndClass.hInstance := hInstance;
WndClass.hIcon := LoadIcon(0, IDI_APPLICATION);
WndClass.hCursor := LoadCursor(0, IDC_ARROW);
WndClass.hbrBackground := GetStockObject(WHITE_BRUSH);
WndClass.lpszMenuName := nil;
WndClass.lpszClassName := szAppName;

// 注册窗体类
if (RegisterClass(WndClass) = 0) then
begin
MessageBox(0, 'This program requires Windows NT!', szAppName, MB_ICONERROR);
Exit;
end;

// 建立窗体
hWnd := CreateWindow(szAppName, 'Simple Clipboard Viewer (Text Only)',
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
0, 0, hInstance, nil);

// 显示窗体
ShowWindow(hWnd, CmdShow);
UpdateWindow(hWnd);

// 消息循环
while GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.
 
谢谢麻子兄,这个程式在你发表在Delphi盒子里有,对于文字是没有问题,可是当剪贴板里的内容不是标准 的怎么办呢
 
其他格式,就要自己研究了,[:)][:)]
 
后退
顶部