C#实现锁屏 遇到一个棘手的问题:老师的要求是C#锁屏(ctrl+F4) 不能退出,禁止任务管理器等。反正就是不能操作而且要在当前的锁屏界面实现多标签浏览器各位一定要帮帮我啊! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个要用hook了,全局函数,截获键盘消息 你先从网上下载一个API包里面有函数好像是叫键盘按下消息事件 这个需要引用系统DLL,32位跟64位操作系统通用不通用没有测试过只在32下用过 你找一个吧 这样做是可以 如果我要求把你的这个程序最小化 或者隐藏的时候 也让它失灵(alt+f4)呢?如果说在打某个全屏的游戏的时候也让它失灵(alt+f4)呢? 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; } }} 小豆豆,你这代码只需要按Ctrl-F4就直接给关了,随时置顶有个屁用 你们老师怎么会有这种蛋痛的要求?那么多快捷键,你先把快捷键整齐了吧你给个连接自行领悟吧用HOOK禁用鼠标与键盘点击http://www.cnblogs.com/carekee/articles/2325771.html 不好意思我给出的只是关键的功能代码并没有完全按楼主的要求如果我给出了关键代码楼主还不能处理好其他诸如Ctrl-F4R的细节那我代码算白发了 禁用任务管理器:开个线程扼杀任务管理器就行 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; } } 觉得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 // 光栅的操作值 ); 怪事,winxp的机器上运行正常,但是win7就报错,内详 在线等 mvc3 Razor变量赋值 如何将鼠标定位到DataGridView中的指定单元格 Developer.Express.NET请大家解释一下 聊天程序代码 string对像? 关于远程显示编程 海康视频服务器二次开发,回调函数问题,高手帮忙 精简版 compact c#(winform ) 如何在datagrid中加一列checkbox 如何使C#的程序支持多国语言??? Encoding解码 c++函数转c#时参数处理的难题
好像是叫键盘按下消息事件 这个需要引用系统DLL,32位跟64位操作系统通用不通用没有测试过
只在32下用过 你找一个吧
这样做是可以 如果我要求把你的这个程序最小化 或者隐藏的时候 也让它失灵(alt+f4)呢?如果说在打某个全屏的游戏的时候也让它失灵(alt+f4)呢?
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;
}
}
}
你给个连接自行领悟吧
用HOOK禁用鼠标与键盘点击
http://www.cnblogs.com/carekee/articles/2325771.html
不好意思
我给出的只是关键的功能代码
并没有完全按楼主的要求
如果我给出了关键代码
楼主还不能处理好其他诸如Ctrl-F4R的细节
那我代码算白发了
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;
} }
开个线程扼杀任务管理器,要退出的话可以在鼠标或键盘事件中添加退出的代码截取桌面图片要用到下面两个方法
[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 // 光栅的操作值
);