C# Winform 实现屏蔽键盘的win和alt+F4的实现代码

最近在做一个恶搞程序,就是打开后,程序获得桌面的截图然后,然后全屏显示在屏幕上,用户此时则不能进行任何操作。

此时希望用户不能通过键盘alt+F4来结束程序及通过Win的组合键对窗口进行操作。我在网上搜索了一下,采用全局键盘钩子的方法可以做到屏蔽用户对键盘的操作。。以下为相关代码,用到了Form1_load事件和Form1_FormClosing事件:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Reflection;
namespace WindowsApplication10
{
public partial class Form1 : Form
{
// 安装钩子
[DllImport("user32.dll")]
public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
// 卸载钩子
[DllImport("user32.dll")]
public static extern bool UnhookWindowsHookEx(int idHook);
// 继续下一个钩子
[DllImport("user32.dll")]
public static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam);
//声明定义
public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);
static int hKeyboardHook = 0;
HookProc KeyboardHookProcedure;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
HookStart();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
HookStop();
}
// 安装钩子
public void HookStart()
{
if (hKeyboardHook == 0)
{
// 创建HookProc实例
KeyboardHookProcedure = new HookProc(KeyboardHookProc);
//定义全局钩子
hKeyboardHook = SetWindowsHookEx(13, KeyboardHookProcedure, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);//如果无效,就把  Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]) 改成IntPtr.Zero
if (hKeyboardHook == 0) { HookStop(); throw new Exception("SetWindowsHookEx failed."); } } } //钩子子程就是钩子所要做的事情。 private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) { //这里可以添加别的功能的代码 return 1; } // 卸载钩子 public void HookStop() { bool retKeyboard = true; if (hKeyboardHook != 0) { retKeyboard = UnhookWindowsHookEx(hKeyboardHook); hKeyboardHook = 0; } if (!(retKeyboard)) throw new Exception("UnhookWindowsHookEx failed."); } } }

(注:该方法可以屏蔽win和alt+F4但是不能屏蔽ctrl+alt+del)

时间: 2024-10-20 18:42:37

C# Winform 实现屏蔽键盘的win和alt+F4的实现代码的相关文章

c# winform如何屏蔽键盘上下左右键

重写事件: protected override bool ProcessDialogKey(Keys keyData) { if (keyData == Keys.Up || keyData == Keys.Down || keyData == Keys.Left || keyData == Keys.Right) return false; else return base.ProcessDialogKey(keyData); }

深入分析C#键盘勾子(Hook)拦截器,屏蔽键盘活动的详解

钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的.当消息到达后,在目标窗口处理函数之前处理它.钩子机制允许应用程序截获处理window消息或特定事件. 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统.每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权.这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的

Js屏蔽键盘事件

<script>           function KeyDown(){ //屏蔽鼠标右键.Ctrl+n.shift+F10.F5刷新.退格键            //alert("ASCII代码是:"+event.keyCode);            if ( (window.event.altKey)&&            (  (window.event.keyCode==37)|| //屏蔽 Alt+ 方向键 ←            

Winform窗体屏蔽Alt+F4强制关闭

1 /// <summary> 2 /// 窗体屏蔽 ALT+F4组合键强制关闭 3 /// </summary> 4 protected override CreateParams CreateParams 5 { 6 get 7 { 8 const int CS_NOCLOSE = 0x200; 9 CreateParams cp = base.CreateParams; 10 cp.ClassStyle = cp.ClassStyle | CS_NOCLOSE; 11 ret

C#屏蔽Alt+F4,解决Alt+F4关闭窗体时对话框NO后,线程不退出问题

//1.将窗体的属性KeyPrieview设置为true //keypreview属性为true的时候,就可以响应键盘事件v //2.在窗体KeyDown事件中加如下代码 private void Form1_KeyDown(object sender, KeyEventArgs e) { if( (e.KeyCode == Keys.F4)&&(e.Alt==true)) //屏蔽ALT+F4 { e.Handled = true; } } //e.Handled属性:获取或设置一个值,

Winfrom 屏蔽Alt+F4

/// <summary> /// 屏蔽Alt+F4 /// </summary> /// <param name="m">要处理的 Windows </param> protected override void WndProc(ref Message m) { const int WM_SYSCOMMAND = 0x0112; const int SC_CLOSE = 0xF060; if (m.Msg == WM_SYSCOMMAN

Delphi 如何屏蔽Alt F4

系统命令消息就是这样屏蔽,哈哈. procedure WMSysCommand(var Msg: TMessage);message WM_SYSCOMMAND; procedure tform1.WMSysCommand(var Msg: TMessage); begin if Msg.wParam <> SC_CLOSE then inherited; end; Delphi 如何屏蔽Alt F4

wpf阻止键盘快捷键alt+space,alt+F4

原文:wpf阻止键盘快捷键alt+space,alt+F4 /// <summary>        /// 阻止 alt+f4和alt+space 按键        /// </summary>        /// <param name="e"></param>        protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e)       

.Net WinForm 控件键盘消息处理剖析

在WinForm控件上我们可以看到很多关于键盘消息处理的方法,比如OnKeyDown, OnKeyPress, ProcessCmdKey, ProcessDialogKey,IsInputKey等等,那么这些方法是如何被组织的,每一个方法的具体含义又是什么哪?Win32的键盘消息又是如何到达控件上的这些方法的,本文将着重阐述这些问题,对.Net WinForm控件的键盘消息处理过程进行剖析.  1.      WinForm消息循环 大家都知道WinForm也是依赖于底层的消息机制的,通常我们