using
System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using System.Xml;
using System.Runtime.InteropServices;
namespace WindowsApplication26
... {
public partial class Form1 : Form
... {
public class HookMsg
... {
Win32 API functions #region Win32 API functions
private const int WH_CBT = 0x5 ;
private const int IDC_OK = 0x1 ;
private const int IDC_Text = 0xFFFF ;
[DllImport( " user32.dll " )]
protected static extern IntPtr SetWindowsHookEx( int code, HookProc func, IntPtr hInstance, int threadID);
[DllImport( " user32.dll " )]
protected static extern int UnhookWindowsHookEx(IntPtr hhook);
[DllImport( " user32.dll " )]
protected static extern int CallNextHookEx(IntPtr hhook, int code, IntPtr wParam, IntPtr lParam);
[DllImport( " user32.dll " )]
protected static extern int GetWindowText(IntPtr hwnd, [Out]StringBuilder lpString, int nMaxCount);
[DllImport( " user32.dll " )]
protected static extern int GetClassName(IntPtr hwnd, [Out]StringBuilder lpString, int nMaxCount);
[DllImport( " user32.dll " )]
protected static extern int SetWindowText(IntPtr hWnd, string lpString);
[DllImport( " user32.dll " )]
protected static extern IntPtr GetDlgItem(IntPtr hwnd, int id);
[DllImport( " User32 " )]
protected static extern int SetDlgItemText(IntPtr hDlg, int nIDDlgItem, string lpString);
[DllImport( " user32.dll " )]
protected static extern int GetDlgItemText(IntPtr hDlg, int nIDDlgItem, [Out] StringBuilder lpString, int nMaxCount);
[DllImport( " user32.dll " , EntryPoint = " MessageBox " )]
protected static extern int _MessageBox(IntPtr hwnd, string text, string caption,
int options);
[DllImport( " user32.dll " )]
protected static extern IntPtr GetActiveWindow();
[DllImport( " user32.dll " )]
protected static extern void DestroyWindow(IntPtr hwnd);
#endregion
private static System.IntPtr m_hhook;
public delegate int HookProc( int code, IntPtr wParam, IntPtr lParam);
protected static HookProc m_filterFunc;
static HookMsg()
... {
if (m_filterFunc == null )
m_filterFunc = new HookProc(CoreHookProc);
}
public static void Install()
... {
m_hhook = SetWindowsHookEx(WH_CBT, m_filterFunc, IntPtr.Zero, AppDomain.GetCurrentThreadId());
}
public static void Uninstall()
... {
UnhookWindowsHookEx(m_hhook);
}
// CallBack
protected static int CoreHookProc( int code, IntPtr wParam, IntPtr lParam)
... {
if (code == 5 )
... {
StringBuilder sb = new StringBuilder();
sb.Capacity = 255 ;
// Title
GetWindowText(wParam, sb, 255 );
string strTitle = " jinjazz看到了: " + sb.ToString();
// Text
GetDlgItemText(wParam, IDC_Text, sb, 255 );
string strText = " jinjazz看到了: " + sb.ToString();
// 获取按钮
int style = 0 ;
for ( int i = 0 ; i <= 5 ; i ++ )
... {
if (GetDlgItem(wParam, i) != IntPtr.Zero)
style += i;
}
SetDlgItemText(wParam, IDC_Text, strText);
SetWindowText(wParam, strTitle);
SetWindowText(GetDlgItem(wParam, ( int )DialogResult.No), " jinjazzOK " );
SetWindowText(GetDlgItem(wParam, ( int )DialogResult.Cancel), " jinjazzCancel " );
SetWindowText(GetDlgItem(wParam, ( int )DialogResult.Abort), " jinjazzAbort " );
SetWindowText(GetDlgItem(wParam, ( int )DialogResult.Ignore), " jinjazzIgnore " );
SetWindowText(GetDlgItem(wParam, ( int )DialogResult.None), " jinjazzNone " );
SetWindowText(GetDlgItem(wParam, ( int )DialogResult.OK), " jinjazzOK " );
SetWindowText(GetDlgItem(wParam, ( int )DialogResult.Retry), " jinjazzRetry " );
SetWindowText(GetDlgItem(wParam, ( int )DialogResult.Yes), " jinjazzYes " );
}
// return CallNextHookEx(this.m_hhook, code, wParam, lParam);
return 0 ;
}
}
public Form1()
... {
InitializeComponent();
}
private void Form1_Load( object sender, EventArgs e)
... {
}
private void button1_Click( object sender, EventArgs e)
... {
MessageBox.Show( this , " 确定按钮 " , " 标题 " );
}
private void button2_Click( object sender, EventArgs e)
... {
MessageBox.Show( this , " 确定按钮 " , " 标题 " , MessageBoxButtons.YesNoCancel);
}
private void button3_Click( object sender, EventArgs e)
... {
MessageBox.Show( this , " 确定按钮 " , " 标题 " , MessageBoxButtons.AbortRetryIgnore);
}
private void checkBox1_CheckedChanged( object sender, EventArgs e)
... {
if ( this .checkBox1.Checked)
... {
HookMsg.Install();
}
else
... {
HookMsg.Uninstall();
}
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using System.Xml;
using System.Runtime.InteropServices;
namespace WindowsApplication26
... {
public partial class Form1 : Form
... {
public class HookMsg
... {
Win32 API functions #region Win32 API functions
private const int WH_CBT = 0x5 ;
private const int IDC_OK = 0x1 ;
private const int IDC_Text = 0xFFFF ;
[DllImport( " user32.dll " )]
protected static extern IntPtr SetWindowsHookEx( int code, HookProc func, IntPtr hInstance, int threadID);
[DllImport( " user32.dll " )]
protected static extern int UnhookWindowsHookEx(IntPtr hhook);
[DllImport( " user32.dll " )]
protected static extern int CallNextHookEx(IntPtr hhook, int code, IntPtr wParam, IntPtr lParam);
[DllImport( " user32.dll " )]
protected static extern int GetWindowText(IntPtr hwnd, [Out]StringBuilder lpString, int nMaxCount);
[DllImport( " user32.dll " )]
protected static extern int GetClassName(IntPtr hwnd, [Out]StringBuilder lpString, int nMaxCount);
[DllImport( " user32.dll " )]
protected static extern int SetWindowText(IntPtr hWnd, string lpString);
[DllImport( " user32.dll " )]
protected static extern IntPtr GetDlgItem(IntPtr hwnd, int id);
[DllImport( " User32 " )]
protected static extern int SetDlgItemText(IntPtr hDlg, int nIDDlgItem, string lpString);
[DllImport( " user32.dll " )]
protected static extern int GetDlgItemText(IntPtr hDlg, int nIDDlgItem, [Out] StringBuilder lpString, int nMaxCount);
[DllImport( " user32.dll " , EntryPoint = " MessageBox " )]
protected static extern int _MessageBox(IntPtr hwnd, string text, string caption,
int options);
[DllImport( " user32.dll " )]
protected static extern IntPtr GetActiveWindow();
[DllImport( " user32.dll " )]
protected static extern void DestroyWindow(IntPtr hwnd);
#endregion
private static System.IntPtr m_hhook;
public delegate int HookProc( int code, IntPtr wParam, IntPtr lParam);
protected static HookProc m_filterFunc;
static HookMsg()
... {
if (m_filterFunc == null )
m_filterFunc = new HookProc(CoreHookProc);
}
public static void Install()
... {
m_hhook = SetWindowsHookEx(WH_CBT, m_filterFunc, IntPtr.Zero, AppDomain.GetCurrentThreadId());
}
public static void Uninstall()
... {
UnhookWindowsHookEx(m_hhook);
}
// CallBack
protected static int CoreHookProc( int code, IntPtr wParam, IntPtr lParam)
... {
if (code == 5 )
... {
StringBuilder sb = new StringBuilder();
sb.Capacity = 255 ;
// Title
GetWindowText(wParam, sb, 255 );
string strTitle = " jinjazz看到了: " + sb.ToString();
// Text
GetDlgItemText(wParam, IDC_Text, sb, 255 );
string strText = " jinjazz看到了: " + sb.ToString();
// 获取按钮
int style = 0 ;
for ( int i = 0 ; i <= 5 ; i ++ )
... {
if (GetDlgItem(wParam, i) != IntPtr.Zero)
style += i;
}
SetDlgItemText(wParam, IDC_Text, strText);
SetWindowText(wParam, strTitle);
SetWindowText(GetDlgItem(wParam, ( int )DialogResult.No), " jinjazzOK " );
SetWindowText(GetDlgItem(wParam, ( int )DialogResult.Cancel), " jinjazzCancel " );
SetWindowText(GetDlgItem(wParam, ( int )DialogResult.Abort), " jinjazzAbort " );
SetWindowText(GetDlgItem(wParam, ( int )DialogResult.Ignore), " jinjazzIgnore " );
SetWindowText(GetDlgItem(wParam, ( int )DialogResult.None), " jinjazzNone " );
SetWindowText(GetDlgItem(wParam, ( int )DialogResult.OK), " jinjazzOK " );
SetWindowText(GetDlgItem(wParam, ( int )DialogResult.Retry), " jinjazzRetry " );
SetWindowText(GetDlgItem(wParam, ( int )DialogResult.Yes), " jinjazzYes " );
}
// return CallNextHookEx(this.m_hhook, code, wParam, lParam);
return 0 ;
}
}
public Form1()
... {
InitializeComponent();
}
private void Form1_Load( object sender, EventArgs e)
... {
}
private void button1_Click( object sender, EventArgs e)
... {
MessageBox.Show( this , " 确定按钮 " , " 标题 " );
}
private void button2_Click( object sender, EventArgs e)
... {
MessageBox.Show( this , " 确定按钮 " , " 标题 " , MessageBoxButtons.YesNoCancel);
}
private void button3_Click( object sender, EventArgs e)
... {
MessageBox.Show( this , " 确定按钮 " , " 标题 " , MessageBoxButtons.AbortRetryIgnore);
}
private void checkBox1_CheckedChanged( object sender, EventArgs e)
... {
if ( this .checkBox1.Checked)
... {
HookMsg.Install();
}
else
... {
HookMsg.Uninstall();
}
}
}
}