8
Я пытаюсь получить, находится ли курсор мыши над экраном рабочего стола. Вот мой код:Как узнать, находится ли курсор мыши над экраном рабочего стола?
[DllImport("user32.dll")]
public static extern bool GetCursorPos(out Point lpPoint);
[DllImport("user32.dll")]
public static extern IntPtr WindowFromPoint(Point Point);
[DllImport("user32.dll", SetLastError = false)]
public static extern IntPtr GetDesktopWindow();
public static bool IsMouseOverDesktop()
{
Point mouseCursor;
GetCursorPos(out mouseCursor);
return WindowFromPoint(mouseCursor) == GetDesktopWindow();
}
но он не работает. Когда курсор мыши находится над рабочим столом, WindowFromPoint и GetDesktopWindow возвращают разные значения.
Окно на рабочем столе может быть не таким, как вы думаете. Окно рабочего стола - самое верхнее окно. Это * не * окно, которое * explorer * создает и содержит значки, которые, как я думаю, является фактическим окном, которое вы пытаетесь определить, закончилась ли мышь. –
Возможно, это поможет: http://stackoverflow.com/questions/9222451/what-is-the-difference-between-the-getdesktopwindow-and-openinputdesktop-apis-in – DonBoitnott
Я не думаю, что это правильно сказать это самый верхний (я мог ошибаться, хотя). Точнее сказать, что он является родителем всех окон. Я бы рекомендовал открыть open spy ++ и выяснить, какое окно WindowFromPoint дает вам, а затем оттуда. –