• 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)

  • 相关阅读:
    设计模式之工厂方法3
    Orchard CMS中如何打包不带源码的模块
    Dump Checking
    认识WinDbg
    Bootstrap3.0学习第九轮(CSS补充)
    SVN版本冲突解决详解
    windbg Symbol file path
    SVN下错误集锦
    MvcMovieStore mvc5.0,EF6.01
    SQL Server中的窗口函数
  • 原文地址:https://www.cnblogs.com/marblemm/p/7089697.html
Copyright © 2020-2023  润新知