遇到一个棘手的问题:老师的要求是C#锁屏(ctrl+F4) 不能退出,禁止任务管理器等。反正就是不能操作
而且要在当前的锁屏界面实现多标签浏览器各位一定要帮帮我啊!

解决方案 »

  1.   

    这个要用hook了,全局函数,截获键盘消息 你先从网上下载一个API包里面有函数
    好像是叫键盘按下消息事件 这个需要引用系统DLL,32位跟64位操作系统通用不通用没有测试过
    只在32下用过 你找一个吧
      

  2.   


    这样做是可以 如果我要求把你的这个程序最小化 或者隐藏的时候 也让它失灵(alt+f4)呢?如果说在打某个全屏的游戏的时候也让它失灵(alt+f4)呢?
      

  3.   

    using System;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;namespace WindowsFormsApplication6
    {
        public partial class Form1 : Form
        {
            [DllImport("user32.dll")]
            private static extern IntPtr GetForegroundWindow();        public Form1()
            {
                InitializeComponent();
            }        private void btnLock_Click(object sender, EventArgs e)
            {
                this.FormBorderStyle = FormBorderStyle.None;
                this.WindowState = FormWindowState.Maximized;
                this.TopMost = true;
                this.timer1.Interval = 100;
                this.timer1.Enabled = true;
            }        private void timer1_Tick(object sender, EventArgs e)
            {
                if (GetForegroundWindow() != this.Handle)
                {
                    this.TopMost = true;
                }
            }        private void btnUnLock_Click(object sender, EventArgs e)
            {
                this.FormBorderStyle = FormBorderStyle.Sizable;
                this.WindowState = FormWindowState.Normal;
                this.timer1.Enabled = false;
                this.TopMost = false;
            }
        }
    }
      

  4.   

    小豆豆,你这代码只需要按Ctrl-F4就直接给关了,随时置顶有个屁用
      

  5.   

    你们老师怎么会有这种蛋痛的要求?那么多快捷键,你先把快捷键整齐了吧
    你给个连接自行领悟吧
    用HOOK禁用鼠标与键盘点击
    http://www.cnblogs.com/carekee/articles/2325771.html
      

  6.   


    不好意思
    我给出的只是关键的功能代码
    并没有完全按楼主的要求
    如果我给出了关键代码
    楼主还不能处理好其他诸如Ctrl-F4R的细节
    那我代码算白发了
      

  7.   

    禁用任务管理器:开个线程扼杀任务管理器就行
     private void KillTaskmgr()
            {
                while (true)
                {
                    Process[] sum = Process.GetProcesses();
                    foreach (Process p in sum)
                    {
                        if (p.ProcessName == "taskmgr" || p.ProcessName == "cmd")
                            try
                            {
                                p.Kill();
                            }
                            catch
                            {
                                ;
                            }
                    }
                }
            }
    禁用alt+f4:
    //重写
     protected override CreateParams CreateParams
            {
                get
                {
                    const int CS_NOCLOSE = 0x200;
                    CreateParams cp = base.CreateParams;
                    cp.ClassStyle = cp.ClassStyle | CS_NOCLOSE;
                    return cp;
                }        }
      

  8.   

    觉得lz要的锁屏类似我以前写过的一个恶搞程序:模拟死机给lz个思路:窗口最大化,截取桌面保存为bitmap,然后bitmap作为form的背景图片就行。
    开个线程扼杀任务管理器,要退出的话可以在鼠标或键盘事件中添加退出的代码截取桌面图片要用到下面两个方法
     [DllImport("gdi32.dll")]
            private static extern IntPtr CreateDC(
            string lpszDriver, // 驱动名称 
            string lpszDevice, // 设备名称 
            string lpszOutput, // 无用,可以设定位"NULL" 
            IntPtr lpInitData // 任意的打印机数据 
            );        [DllImport("gdi32.dll")]
            private static extern bool BitBlt(
            IntPtr hdcDest, //目标设备的句柄 
            int nXDest, // 目标对象的左上角的X坐标 
            int nYDest, // 目标对象的左上角的X坐标 
            int nWidth, // 目标对象的矩形的宽度 
            int nHeight, // 目标对象的矩形的长度 
            IntPtr hdcSrc, // 源设备的句柄 
            int nXSrc, // 源对象的左上角的X坐标 
            int nYSrc, // 源对象的左上角的X坐标 
            System.Int32 dwRop // 光栅的操作值 
            );