using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;
namespace WindowsFormsApplication28{ public partial class Form1 : Form { public Form1() { InitializeComponent(); }
protected override void WndProc(ref Message m) { const int WM_CHAR = 0x0102; const int WM_USER = 0x0400; const int WM_USER1 = WM_USER + 1; switch (m.Msg) { case WM_USER1: textBox1.Focus(); IntPtr hwnd = textBox1.Handle; WinAPI.SendMessage(hwnd, WM_CHAR, (int)m.WParam, 0); break; } base.WndProc(ref m); } }
class MyTextBox : TextBox { protected override void WndProc(ref Message m) { const int WM_CHAR = 0x0102; const int WM_PAINT = 0x000F; const int WM_USER = 0x0400; const int WM_KEYDOWN= 0x0100; const int WM_IME_CHAR = 0x0286; const int WM_IME_COMPOSITION = 0x010F; switch (m.Msg) { case WM_CHAR: { int key = (int)m.WParam; IntPtr hwnd = WinAPI.FindWindow("WindowsForms10.Window.8.app.0.2bf8098_r13_ad1", null); WinAPI.SendMessage(hwnd, WM_USER + 1, (int)m.WParam, 0); } return; //case WM_IME_CHAR: // MessageBox.Show("a"); // break; //case WM_KEYDOWN: // { // IntPtr hwnd = WinAPI.FindWindow("WindowsForms10.Window.8.app.0.2bf8098_r13_ad1", null); // int code = (int)m.WParam; // WinAPI.SendMessage(hwnd, WM_USER + 1, code, 0); // } // return; case WM_IME_COMPOSITION: { IntPtr hwnd = WinAPI.FindWindow("WindowsForms10.Window.8.app.0.2bf8098_r13_ad1", null); int code = (int)m.WParam; WinAPI.SendMessage(hwnd, WM_USER + 1, code, 0); } return; //case WM_PAINT: // //MessageBox.Show("aa"); // break; } base.WndProc(ref m); } }}
记录下,备忘~
就是要把上面那个textbox的WndProc重写下,然后消息拦截下就ok了。。