mirror of
https://github.com/Crypto-Notepad/Crypto-Notepad.git
synced 2026-03-11 08:55:25 +00:00
84 lines
3 KiB
C#
84 lines
3 KiB
C#
|
|
using System;
|
|||
|
|
using System.Runtime.InteropServices;
|
|||
|
|
using System.Windows.Forms;
|
|||
|
|
|
|||
|
|
internal static class MessageBoxCenter
|
|||
|
|
{
|
|||
|
|
internal static void PrepToCenterMessageBoxOnForm(Form form)
|
|||
|
|
{
|
|||
|
|
MessageBoxCenterHelper helper = new MessageBoxCenterHelper();
|
|||
|
|
helper.Prep(form);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private class MessageBoxCenterHelper
|
|||
|
|
{
|
|||
|
|
private int messageHook;
|
|||
|
|
private IntPtr parentFormHandle;
|
|||
|
|
|
|||
|
|
public void Prep(Form form)
|
|||
|
|
{
|
|||
|
|
NativeMethods.CenterMessageCallBackDelegate callBackDelegate = new NativeMethods.CenterMessageCallBackDelegate(CenterMessageCallBack);
|
|||
|
|
GCHandle.Alloc(callBackDelegate);
|
|||
|
|
|
|||
|
|
parentFormHandle = form.Handle;
|
|||
|
|
messageHook = NativeMethods.SetWindowsHookEx(5, callBackDelegate, new IntPtr(NativeMethods.GetWindowLong(parentFormHandle, -6)), NativeMethods.GetCurrentThreadId()).ToInt32();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private int CenterMessageCallBack(int message, int wParam, int lParam)
|
|||
|
|
{
|
|||
|
|
NativeMethods.RECT formRect;
|
|||
|
|
NativeMethods.RECT messageBoxRect;
|
|||
|
|
int xPos;
|
|||
|
|
int yPos;
|
|||
|
|
|
|||
|
|
if (message == 5)
|
|||
|
|
{
|
|||
|
|
NativeMethods.GetWindowRect(parentFormHandle, out formRect);
|
|||
|
|
NativeMethods.GetWindowRect(new IntPtr(wParam), out messageBoxRect);
|
|||
|
|
|
|||
|
|
xPos = (int)((formRect.Left + (formRect.Right - formRect.Left) / 2) - ((messageBoxRect.Right - messageBoxRect.Left) / 2));
|
|||
|
|
yPos = (int)((formRect.Top + (formRect.Bottom - formRect.Top) / 2) - ((messageBoxRect.Bottom - messageBoxRect.Top) / 2));
|
|||
|
|
|
|||
|
|
NativeMethods.SetWindowPos(wParam, 0, xPos, yPos, 0, 0, 0x1 | 0x4 | 0x10);
|
|||
|
|
NativeMethods.UnhookWindowsHookEx(messageHook);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private static class NativeMethods
|
|||
|
|
{
|
|||
|
|
internal struct RECT
|
|||
|
|
{
|
|||
|
|
public int Left;
|
|||
|
|
public int Top;
|
|||
|
|
public int Right;
|
|||
|
|
public int Bottom;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
internal delegate int CenterMessageCallBackDelegate(int message, int wParam, int lParam);
|
|||
|
|
|
|||
|
|
[DllImport("user32.dll")]
|
|||
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|||
|
|
internal static extern bool UnhookWindowsHookEx(int hhk);
|
|||
|
|
|
|||
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|||
|
|
internal static extern int GetWindowLong(IntPtr hWnd, int nIndex);
|
|||
|
|
|
|||
|
|
[DllImport("kernel32.dll")]
|
|||
|
|
internal static extern int GetCurrentThreadId();
|
|||
|
|
|
|||
|
|
[DllImport("user32.dll", SetLastError = true)]
|
|||
|
|
internal static extern IntPtr SetWindowsHookEx(int hook, CenterMessageCallBackDelegate callback, IntPtr hMod, int dwThreadId);
|
|||
|
|
|
|||
|
|
[DllImport("user32.dll")]
|
|||
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|||
|
|
internal static extern bool SetWindowPos(int hWnd, int hWndInsertAfter, int X, int Y, int cx, int cy, int uFlags);
|
|||
|
|
|
|||
|
|
[DllImport("user32.dll")]
|
|||
|
|
[return: MarshalAs(UnmanagedType.Bool)]
|
|||
|
|
internal static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
|
|||
|
|
}
|
|||
|
|
}
|