protected override void WndProc(ref Message m)
{
if (m.Msg == Native.WM_HOTKEY)
{
uint keystroke = ((uint)m.LParam >> 16) & 0x0000FFFF;
uint keystroke_modifier = ((uint)m.LParam) & 0x0000FFFF;
// Global hotkey to make a window borderless
if ((keystroke == MakeBorderless_HotKey) && (keystroke_modifier == MakeBorderless_HotKeyModifier))
{
// Find the currently-active window
IntPtr hCurrentActiveWindow = Native.GetForegroundWindow();
// Only if that window isn't Borderless Windows itself
if (hCurrentActiveWindow != this.Handle)
{
// Figure out the process details based on the current window handle
ProcessDetails pd = controller.Processes.FromHandle(hCurrentActiveWindow);
if (pd == null)
{
Task.WaitAll(controller.RefreshProcesses());
pd = controller.Processes.FromHandle(hCurrentActiveWindow);
if (pd == null)
return;
}
// If we have information about this process -and- we've already made it borderless, then reverse the process
if (pd.MadeBorderless)
Manipulation.RestoreWindow(pd);
// Otherwise, this is a fresh request to remove the border from the current window
else
this.controller.RemoveBorder(pd);
}
return; // handled the message, do not call base WndProc for this message
}
if ((keystroke == MouseHide_HotKey) && (keystroke_modifier == MouseHide_HotKeyModifier))
{
Manipulation.ToggleMouseCursorVisibility(this);
return; // handled the message, do not call base WndProc for this message
}
if ((keystroke == MouseLock_HotKey) && (keystroke_modifier == 0))
{
IntPtr hWnd = Native.GetForegroundWindow();
// get size of clientarea
Native.RECT rect = new Native.RECT();
Native.GetClientRect(hWnd, ref rect);
// get top,left point of clientarea
Native.POINTAPI p = new Native.POINTAPI { X = 0, Y = 0 };
Native.ClientToScreen(hWnd, ref p);
Rectangle clipRect = new Rectangle(p.X, p.Y, rect.Right - rect.Left, rect.Bottom - rect.Top);
Cursor.Clip = (Cursor.Clip.Equals(clipRect)) ? Rectangle.Empty : clipRect;
return; // handled the message, do not call base WndProc for this message
}
}
base.WndProc(ref m);
}