使用全屏winform C#我需要忽略所有用户输入

使用全屏winform C#我需要忽略所有用户输入,c#,winforms,user-interface,C#,Winforms,User Interface,我有一个全屏的仪表板。希望让它更像一个“信息亭”视图,用户无法轻松绕过它进入桌面。更多有关常规篡改预防的信息。我在右上角有一个菜单按钮,我想保持启用状态,并允许输入pin来关闭应用程序 我是否应该查看函数调用或库来阻止用户活动,还是将所有控件设置为enable=false,等等?但是他们仍然可以点击Windows或Ctrl+Alt+Delete,我也想阻止它们。创建FormClosing属性并编写以下代码以禁用用户关闭表单 private void FormName_FormClosing(ob

我有一个全屏的仪表板。希望让它更像一个“信息亭”视图,用户无法轻松绕过它进入桌面。更多有关常规篡改预防的信息。我在右上角有一个菜单按钮,我想保持启用状态,并允许输入pin来关闭应用程序


我是否应该查看函数调用或库来阻止用户活动,还是将所有控件设置为enable=false,等等?但是他们仍然可以点击Windows或Ctrl+Alt+Delete,我也想阻止它们。

创建FormClosing属性并编写以下代码以禁用用户关闭表单

private void FormName_FormClosing(object sender, FormClosingEventArgs e)
        {
            e.Cancel = (e.CloseReason == CloseReason.UserClosing);
        }
如果您想进一步禁用函数键示例,我还有以下代码()。ctrl+shift+esc(打开任务管理器)等

将其放入FormName\u加载

ProcessModule objCurrentModule = Process.GetCurrentProcess().MainModule;
            objKeyboardProcess = new LowLevelKeyboardProc(captureKey);
            ptrHook = SetWindowsHookEx(13, objKeyboardProcess, GetModuleHandle(objCurrentModule.ModuleName), 0);
然后将其置于
公共部分类FormName:Form

/* Code to Disable WinKey, Alt+Tab, Ctrl+Shift+Esc Starts Here */

        // Structure contain information about low-level keyboard input event 
        [StructLayout(LayoutKind.Sequential)]
        private struct KBDLLHOOKSTRUCT
        {
            public Keys key;
            public int scanCode;
            public int flags;
            public int time;
            public IntPtr extra;
        }
        //System level functions to be used for hook and unhook keyboard input  
        private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr SetWindowsHookEx(int id, LowLevelKeyboardProc callback, IntPtr hMod, uint dwThreadId);
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern bool UnhookWindowsHookEx(IntPtr hook);
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr CallNextHookEx(IntPtr hook, int nCode, IntPtr wp, IntPtr lp);
        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr GetModuleHandle(string name);
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern short GetAsyncKeyState(Keys key);
        //Declaring Global objects     
        private IntPtr ptrHook;
        private LowLevelKeyboardProc objKeyboardProcess;

        private IntPtr captureKey(int nCode, IntPtr wp, IntPtr lp)
        {
            if (nCode >= 0)
            {
                KBDLLHOOKSTRUCT objKeyInfo = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lp, typeof(KBDLLHOOKSTRUCT));

                // Disabling Windows keys 

                if (objKeyInfo.key == Keys.RWin || objKeyInfo.key == Keys.LWin || objKeyInfo.key == Keys.Tab && HasAltModifier(objKeyInfo.flags) || objKeyInfo.key == Keys.Escape && (ModifierKeys & Keys.Control) == Keys.Control)
                {
                    return (IntPtr)1; // if 0 is returned then All the above keys will be enabled
                }
            }
            return CallNextHookEx(ptrHook, nCode, wp, lp);
        }

        bool HasAltModifier(int flags)
        {
            return (flags & 0x20) == 0x20;
        }

        /* Code to Disable WinKey, Alt+Tab, Ctrl+Shift+Esc Ends Here */
确保您也在使用这些

using System;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.IO;
系统诊断;和System.Runtime.InteropServices;具体来说

有了这些变化,我建议你做一个“紧急逃生”以防你想离开

您还可以将应用程序置于启动状态,以便在机器登录后启动。 代码:

if (File.Exists(Environment.GetFolderPath(Environment.SpecialFolder.Startup).Trim() + "\\FILE.exe") == false)
                {
                    File.Move(Application.StartupPath + "\\FILE.exe", Environment.GetFolderPath(Environment.SpecialFolder.Startup).Trim() + "\\FILE.exe");
                }

我建议,如果已在启动中的文件出现异常,则使用try-catch语句执行此操作

Windows具有内置的“kiosk模式”。请参阅IIRC您不能在应用程序中绕过C-A-D,因为操作系统会抢先获取它。我想不起来,您可能可以使用组策略设置。正确,您不能绕过C-a-D,即使在Kiosk模式下也不行。您应该链接到。请务必给出正确的归属。请看@Amy,我记不起它来自何处,它出现在我的一个项目中。我们都有责任保留我们在网上找到的代码的归属,特别是当我们获得该代码的许可证要求它时,尤其是当我们为雇主编写代码时。那不是借口。添加一条评论说“此代码来自…”很容易。@Amy是的,很抱歉,我只是把它放在一边,因为我不想在代码附近发表评论,但我会在应用程序的一个特殊部分发表评论,或者写一篇自述来感谢并提及代码创建者/来源。我刚刚找到我的项目文件。