如何在WPF中运行我的应用程序时禁用"PRINT SCREEN"按钮?

Kis*_*mar 8 c# wpf printscreen

如何在WPF应用程序运行时禁用"打印屏幕"功能?

用例是我的客户希望避免不必要地复制来自外部世界的有价值的以患者为中心的数据,并且它们提供物理安全性以防止人们通过非数字手段获取数据.

Jod*_*ell 5

好的,如果您的应用程序部署在用户无法使用摄像头的环境中,那么它是可能的,并且确实很有用.

首先,我使用了RegisterHotKey和UnregisterHotKey API调用,这里记录了http://pinvoke.net/default.aspx/user32.RegisterHotKey,如这篇相当古老的文章所述http://msdn.microsoft.com/en- us/magazine/cc163713.aspx.

IDHOT_SNAPDESKTOPWindow_Load活动中注册了热键并在注册时取消注册Window_Closed.尝试在构造函数中执行此操作会让我无法获得该WindowInteropHelper(this)方法的一致句柄.

如果你想做的不仅仅是忽略键,你可以设置一个Windows消息处理程序,使用一种WndProc,

HwndSource source = HwndSource.FromHwnd(<handle>);
source.AddHook(<WndProc>);
Run Code Online (Sandbox Code Playgroud)

如上所述制作句柄,以及自己的WndProc实现.

到目前为止,我还不知道如何"不"处理热键并让Windows执行其正常行为,当然,除非注销热键.

它不是很优雅或"WPF",但它对我有用.


正如@ghord评论

使用EnsureHandle()看起来对于在构造函数中获取处理程序很有用.


Geo*_*ker 4

禁用打印是不可能的,即使可以,手机摄像头也可以轻松绕过。许多分辨率都在百万像素范围内,这使得人们很容易获得他们想要的信息。

如果您想禁用Print Screen键盘上的按键,Jodrell 的答案提供了一种方法(了解它不会阻止人们打印,并且坚定的用户会找到解决方法)。

确实,这一切都取决于信任。如果雇主不能相信其员工不会删除大多数司法管辖区(美国的 HIPAA)已受法律保护的数据,那么就会出现更大的问题。