怎样屏蔽硬拷贝键?(100分)

  • 主题发起人 主题发起人 七度时空
  • 开始时间 开始时间

七度时空

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个图形显示窗体,每次显示用户都可以看。但是,我不想叫他拷贝图形。想屏蔽掉硬拷贝键,或者屏蔽掉剪贴板,怎么做?
 
引用单元:
Clipbrd

定义变量:
public
{ Public declarations }
NextClipHwnd:HWND; //观察链中下一个窗口句柄
procedure WMDrawClipBoard (var AMessage:TMessage); message WM_DRAWCLIPBOARD; //处理WM_DRAWCLIPBOARD消息过程

procedure TForm1.WMDrawClipBoard(var AMessage: TMessage);
begin
SendMessage(NextClipHwnd,AMessage.Msg,AMessage.WParam,AMessage.LParam); //将WM_DRAWCLIPBOARD , 消息传递到下一个观察链中的窗口
clipboard.Clear; //清空剪贴板中内容
end;

最后在窗口的FormCreate加入如下语句即可。
procedure TForm1.FormCreate(Sender: TObject);
begin
NextClipHwnd:=SetClipBoardViewer(Handle);
end;
 
uses clipbrd;
....
procedure TForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Clipboard.HasFormat(CF_BITMAP) then Clipboard.Clear;
end;
 
应该用鼠标hook,屏蔽掉截图键!比较通用些!
if Clipboard.HasFormat(CF_BITMAP) then Clipboard.Clear;
应该放到一个timer里面!每隔一段时间看一下!
form是收不到那个按键消息的!
 
WMDrawClipBoard已经截获剪贴板了,没必要使用timer之类的控制
 
我觉得光屏蔽这些用处不大阿,别人可以用其他的抓图工具啊
 
to lijianzhou
你说的很详细了!

to sy0116
说的对,可以用抓图工具。
有没有更好的办法!
 
一个想法,类似于在系统中“隐藏进程”的做法:通过全局的 hook api 实现。
因为为了“抓”图。必须打开设备的句柄,或者对 hdc 内容进行 copy,hook 这些 api 应该能实现你的要求。
 
to LSUPER
想法非常好。
具体怎样做,你能不能把代码写出来,贴上来!
先谢谢啦!
 
在这方面花太大力气,实际意思不大。

还可以用PrintSc键拷贝屏幕,实在不行,我拿数码机拍了再传回电脑。
 
to levi
你说得对,适时而止吧!
 
没有绝对的禁止,其实用我那个就够了,PrintSc最终也是通过剪贴板,很多抓屏我看也是通过剪贴板,所以清除剪贴板了他怎么搞也不行[:D]
 
我觉得这个很难,即使是用API Hook把所有可能的API都Hook了,也很难防止别人在虚拟机中抓屏
 
这里的讨论差不多了!结题。
因为,我基本上用的是lijianzhou建议的方法。
其他人,像sy 0116, levi二位说的很有道理,没有绝对的东西。
 
后退
顶部