我需要在整个系统范围内显示表单,例如屏幕上的/全部/其他窗口。我确实知道这通常是/坏的UI练习/,但我有非常具体的场景。
我们打算将普通的Windows PC用于POS现金登记。屏幕上有一个选项可以打开现金抽屉。如果有人只是在屏幕上按某些东西并且在职员不看的时候获得金钱,那将是相当糟糕的。因此,我们为个人电脑配备了RFID阅读器,每位职员都有他/她自己的RFID卡,用于认证。
然而,当职员离开时,我需要一种锁定计算机(或使其无法使用)的机制。注销似乎太麻烦了。
欢迎任何想法。
LP, 德扬
答案 0 :(得分:8)
好吧,经过一天的反复试验后,我找到了解决方案。
它涉及以下步骤:
1。 按下“锁定”按钮时,将创建新(空)/桌面/。 程序在此桌面上以全屏格式和登录程序运行。 在此桌面上没有其他任何东西可以切换或运行。
2。 通过注册表禁用任务管理器。 当然,有人未经邀请仍然可以访问Ctrl-Alt-Delete菜单,但他没有什么特别的危害。
3。 Alt-F4等被禁用。
4。 进行身份验证后,程序将切换回原始桌面,一切都正常进行。
当然需要一些P / Invoking。 如果有人想做类似的事情,也许他/她会发现我的骨头例子很有帮助 - link text
LP, 德扬
答案 1 :(得分:1)
我认为您需要调查调用Win32 API才能实现此目的。
您需要查看:
并使用类似于以下代码调用它们(注意这是伪代码):
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
static void ShowTopmost(Form frm)
{
ShowWindow(frm.Handle, SW_SHOWMAXIMIZED);
SetWindowPos(frm.Handle.ToInt32(), HWND_TOPMOST,
0, 0, [width of desktop], [height of desktop],
SWP_SHOWWINDOW);
}
答案 2 :(得分:-2)
表单具有TopMost属性。
设置Form.TopMost = true