Мне в стандартных утилитах для назначения клавиш мыши не нравится то, что эти программы работают с активным окном. А мне б желательно чтоб при нажатии кнопки мыши (например средней) закрывалось окно под курсором, а не активное.
вот последняя моя разработка на C#:
private const UInt32 GetRoot = 2U;
private const UInt32 WM_SYSCOMMAND = 0x0112;
private const UInt32 SC_CLOSE = 0xF060;
public static void CloseWindowUnderCursor()
{
POINT cursorPosition;
Boolean getCursorPos_Performs = GetCursorPos(out cursorPosition);
if (!getCursorPos_Performs)
return;
IntPtr controlHandle_UnderCursor = WindowFromPoint(cursorPosition);
IntPtr window_UnderCursor = GetAncestor(controlHandle_UnderCursor, GetRoot);
SendMessage(window_UnderCursor, WM_SYSCOMMAND, SC_CLOSE, IntPtr.Zero);
}
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern Boolean GetCursorPos(out POINT lpPoint);
[DllImport("user32.dll")]
internal static extern IntPtr WindowFromPoint(POINT Point);
[DllImport("user32.dll", ExactSpelling = true)]
internal static extern IntPtr GetAncestor(IntPtr hwnd, UInt32 gaFlags);
[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, UInt32 wParam, IntPtr lParam);
[StructLayout(LayoutKind.Sequential)]
internal struct POINT
{
public Int32 X;
public Int32 Y;
}
Эта версия стабильнее, чем другие, поэтому я на ней и остановился.
Но есть проблемы:
1) Когда я нажимаю кнопку мыши над рабочим столом — пропадают все ярлыки на рабочем столе,,, и все на этом...
2) Иногда в интернет експлорере, программа DownloadMaster предлагает закачать файл.
Другие версии были WM_SYSKEYDOWN, WM_CLOSE — работали с перебоями = отпали!
Сделать активным окно и послать нажатия клавиш клавиатуры SendInput или SendKeys(C#) — Не получалось стабильно сделать окно активным
(пробовал SetFocus, SetForegroundWindow, BringToFront, WM_ACTIVATE)
И в тех и в других случаях либо не правильно на один и тот же алгоритм реагирует Рабочий стол, либо окно, над которым находится курсор
Впринципе, я хочу что-то типа Alt+F4 направить тому, кто под курсором находится.
Подскажите че нить!?