Я разместил два решения для аналогичного требования здесь
В основном у вас есть два варианта.
1 - Получить графический объект для рабочего стола и начать рисовать на нем. Проблема в том, что вам нужно начать очистку того, что вы нарисовали ранее и т. Д.
Point pt = Cursor.Position; // Get the mouse cursor in screen coordinates
using (Graphics g = Graphics.FromHwnd(IntPtr.Zero))
{
g.DrawEllipse(Pens.Black, pt.X - 10, pt.Y - 10, 20, 20);
}
2- Второй вариант, который я предоставляю в приведенной выше ссылке, - это создать прозрачное самое верхнее окно и сделать весь свой рисунок в этом окне. Это в основном обеспечивает прозрачное наложение для рабочего стола, на котором вы можете рисовать. Один возможный недостаток этого, как я упоминаю в первоначальном ответе, заключается в том, что другие окна, которые также являются самыми верхними и создаются после запуска вашего приложения, затенят ваше самое верхнее окно. Это может быть решено, если это проблема, хотя.
Для варианта 2 сделать форму прозрачной так же просто, как использовать клавишу прозрачности, это позволяет щелчкам мыши и т. Д. Попадать на рабочий стол.
BackColor = Color.LightGreen;
TransparencyKey = Color.LightGreen;