Просто предупреждение, прежде чем мы начнем, что решение не будет красивым, AFAIK, вы не можете сделать это полностью в управляемом коде.
Теперь тогда:
Чтобы перехватитьсообщения в другое приложение, вам нужно сделать некоторые собственные вызовы, используя User32.dll.Если вы хотите разобраться во всем этом непросто, начните с SetWindowsHookEx .
Если вы не мазохист, есть хорошая библиотека C #, которую я нашел в CodeProject, что сделает жизнь намного проще, чем пытаться перехватить эти сообщения вручную.Установите обратный вызов для сообщений мыши с координатами X и Y для положения мыши, которое вы можете определить, находится ли оно в пределах вашего Rectangle
, используя его метод Contains
.
specifiedRegion.Contains(mouseLocation); //where mouseLocation is a Point
User32 также имеетфункции, которые вам понадобятся для получения контекста устройства для экрана:
[DllImport("User32.dll")]
public static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("User32.dll")]
public static extern void ReleaseDC(IntPtr dc);
Чтобы получить DC для экрана, используйте следующий вызов GetDC
:
IntPtr screenDC = GetDC(IntPtr.Zero);
С этимDC мы можем получить наш объект C # Graphics
и начать рисовать.
Graphics g = Graphics.FromHdc(screenDC);
Не забудьте утилизировать объект Graphics
и освободить DC после того, как закончите с ним, иначе у вас будет утечка памяти.*
g.Dispose();
ReleaseDC(screenDC);