当前位置:首页>网络学院>程序开发>c#教程>文章内容

在C#中使用钩子实现Alt+F4健窗口最小化功能

[ 来源:http://www.it55.com | 作者: | 时间:2008-01-11 | 收藏 | 推荐 ] 【


   }
  
   return CallNextHookEx(m_hook, code, wParam, lParam);
   }在这个事件中可以取得消息的参数,特别是按键的值,然后通过HookInvoked委托调用事件实际的处理程序
  
  四、在应用程序中调用钩子类
  我们可以在自己的form中声明两个钩子对象
   private MyHook callProcHook = new MyHook(HookType.WH_CALLWNDPROC);
   private MyHook keyHook = new MyHook(HookType.WH_KEYBOARD);
  然后在初始化时注册钩子:
   private void Form1_Load(object sender, EventArgs e)
   {
   keyHook.HookInvoked += new HookEventHandler(keyHook_HookInvoked);
   keyHook.Install();
  
   callProcHook.HookInvoked += new HookEventHandler(callProcHook_HookInvoked);
   callProcHook.Install();
   }
  然后就是实际的钩子事件:
   private void keyHook_HookInvoked(object sender, HookEventArgs e)
   {
   if (e.key == Keys.F4 && e.bAltKey) //Alt + F4
   {
   this.WindowState = FormWindowState.Minimized;
   }
   }
  
   private void callProcHook_HookInvoked(object sender, HookEventArgs e)
   {
   unsafe
   {
   CWPSTRUCT* message = (CWPSTRUCT*)e.lParam;
   if (message != null)
   {
   if (message->message == WM_CLOSE)
   {
   (sender as MyHook).CallNextProc = false;
   MessageBox.Show("程序即将关闭!");
   }
   }
   }
   }
  这样我们就可以通过钩子实现一些相对底层的应用。
  
  代码说的有点乱,我就把最主要的代码直接列在下面供大家参考:
  
  例子代码
   1using System;
   2using System.Collections.Generic;
   3using System.ComponentModel;
   4using System.Data;
   5using System.Drawing;
   6using System.Text;
   7using System.Windows.Forms;
   8using System.Runtime.InteropServices;
   9
   10namespace HookTest
   11{
   12 public partial class Form1 : Form
   13 {
   14 消息定义(WinUser.h中定义)#region 消息定义(WinUser.h中定义)
   15 private const int WM_PAINT = 0x000F;
   16 private const int WM_CLOSE = 0x0010;
   17 private const int WM_QUIT = 0x0012;
   18 private const int WM_DESTROY = 0x0002;
   19 #endregion
   20
   21 private MyHook callProcHook = new MyHook(HookType.WH_CALLWNDPROC);
   22 private MyHook keyHook = new MyHook(HookType.WH_KEYBOARD);
   23
   24 public Form1()
   25 {
   26 InitializeComponent();
   27 }
   28
   29 private void Form1_Load(object sender, EventArgs e)
   30 {
   31 keyHook.HookInvoked += new HookEventHandler(keyHook_HookInvoked);
   32 keyHook.Install();
   33
   34 callProcHook.HookInvoked += new HookEventHandler(callProcHook_HookInvoked);
   35 callProcHook.Install();
   36 }
   37
   38 private void keyHook_HookInvoked(object sender, HookEventArgs e)
   39 {
   40 if (e.key == Keys.F4 && e.bAltKey) //Alt + F4
   41 {
   42 this.WindowState = FormWindowState.Minimized;
   43 }
   44 }
   45
   46 private void callProcHook_HookInvoked(object sender, HookEventArgs e)
   47 {
   48 unsafe
   49 {
   50 CWPSTRUCT* message = (CWPSTRUCT*)e.lParam;
   51 if (message != null)
   52 {
   53 if (message->message == WM_CLOSE)
   54 {
   55 (sender as MyHook).CallNextProc = false;
   56 MessageBox.Show("程序即将关闭!");
   57 }
   58 }
   59 }
   60 }
   61
   62 }
   63
   64 消息结构体(参照WinUser.h中定义)#region 消息结构体(参照WinUser.h中定义)
   65 public struct CWPSTRUCT
   66 {
   67 public IntPtr lparam;
   68 public IntPtr wparam;
   69 public int message;
   70 public IntPtr hwnd;

(编辑:IT资讯之家 www.it55.com

返回顶部
共4页: 上一页 [1] 2 [3] [4] 下一页  

网友评论

[以下评论为网友观点,不代表本站。请自觉遵守互联网相关政策法规,所有连带责任均有评论者自负。]
[不超过250字]