当我的WPF应用程序在运行时,我该如何禁用Print Screen功能?
使用案例是,我的客户希望避免来自外部世界的有价值的以患者为中心的数据不必要的复制,并提供物理安全措施,以防止人们通过非数字手段获取数据。
当我的WPF应用程序在运行时,我该如何禁用Print Screen功能?
使用案例是,我的客户希望避免来自外部世界的有价值的以患者为中心的数据不必要的复制,并提供物理安全措施,以防止人们通过非数字手段获取数据。
好的,这是可能的,如果您的应用程序部署在用户无法使用摄像头的环境中,这将非常有用。
首先,我使用了RegisterHotKey和UnregisterHotKey API调用,在此处进行了记录 http://pinvoke.net/default.aspx/user32.RegisterHotKey,如此古老的文章所述 http://msdn.microsoft.com/en-us/magazine/cc163713.aspx。
我在Window_Load
事件中注册了IDHOT_SNAPDESKTOP
热键,并在Window_Closed
中取消注册。尝试在构造函数中执行此操作会导致使用WindowInteropHelper(this)
方法获取一致的句柄时出现问题。
如果您想要做更多事情而不仅仅是忽略这些按键,则可以设置一个窗口消息处理程序,使用以下方式创建一种WndProc:
HwndSource source = HwndSource.FromHwnd(<handle>);
source.AddHook(<WndProc>);
EnsureHandle()
似乎很有用,可以获取处理程序。EnsureHandle()
方法。 - ghord简单:
Windows.UI.ViewManagement.ApplicationView.GetForCurrentView().IsScreenCaptureEnabled = false;
基本上,您可以挂钩到剪贴板事件,然后如果有人这样做,则将复制的图像设置为 null。因此,他们可以复制图片,但会被重置:
看看这个:
或者在定时器中,检查剪贴板的内容,并在其被设置为图片后立即清除它。
不行,没有办法做到。即使在您的应用程序中捕获Print Screen键,用户可能会将焦点设置到其他应用程序上,然后执行Print screen(在侧边等有您的应用程序等情况下)。
唯一的方法是在后台创建一个虚拟应用程序,使用键盘钩子捕获所有按键并过滤Print Screen,但这将发生在所有应用程序而不仅仅是您的应用程序上。而且正如George所说,用户也可以使用手机相机!