日期:2014-05-18 浏览次数:21850 次
using System.Runtime.InteropServices; public delegate IntPtr HookProc(int nCode, IntPtr wParam, IntPtr lParam); [DllImport("user32.dll")] public static extern IntPtr SetWindowsHookEx(int hookid, HookProc pfnhook, IntPtr hinst, int threadid); [DllImport("user32.dll")] public static extern IntPtr CallNextHookEx(IntPtr hhook, int code, IntPtr wparam, IntPtr lparam); [DllImport("kernel32.dll")] public static extern IntPtr GetModuleHandle(string modName); [DllImport("user32.dll")] public static extern bool UnhookWindowsHookEx(IntPtr hhook); [DllImport("user32.dll")] public static extern bool GetWindowRect(IntPtr hWnd, ref Rectangle rect); [DllImport("user32.dll")] public static extern bool MoveWindow( IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint); public const int WH_CBT = 5; public const int HCBT_ACTIVATE = 5; IntPtr hookHandle = IntPtr.Zero; private IntPtr CBTHookCallback(int nCode, IntPtr wParam, IntPtr lParam) { switch(nCode) { case HCBT_ACTIVATE: Rectangle vRectangle = new Rectangle(); GetWindowRect(wParam, ref vRectangle); vRectangle.Width = vRectangle.Width - vRectangle.Left; vRectangle.Height = vRectangle.Height - vRectangle.Top; MoveWindow(wParam, // 右下 Screen.GetWorkingArea(this).Width - vRectangle.Width, Screen.GetWorkingArea(this).Height - vRectangle.Height, vRectangle.Width, vRectangle.Height, false); UnhookWindowsHookEx(hookHandle); break; } return CallNextHookEx(hookHandle, nCode, wParam, lParam); } private void button1_Click(object sender, EventArgs e) { hookHandle = SetWindowsHookEx(WH_CBT, new HookProc(CBTHookCallback), GetModuleHandle(null), 0); MessageBox.Show("Zswang 路过"); }
------解决方案--------------------
学习~~
------解决方案--------------------
我的办法相对简单一些
重写MessageBox类
public class MessageBox { public MessageBox() { } public static DialogResult Show() { Form2 frm = new Form2();//Form2是自己新建的form,外观做的和MessageBox.show出来的效果一样。设置窗体的StartPosition为CenterParent. return frm.ShowDialog(); } }
------解决方案--------------------
崇拜一下zswang大侠!
------解决方案--------------------
只有自己写个Form了
------解决方案--------------------
public class MessageBox { public MessageBox() { } public static DialogResult Show() { Form2 frm = new Form2();//Form2是自己新建的form,外观做的和MessageBox.show出来的效果一样。设置窗体的StartPosition为CenterParent. return frm.ShowDialog(); } }