Как нарисовать непосредственно на рабочем столе Windows, С#? - программирование
Подтвердить что ты не робот

Как нарисовать непосредственно на рабочем столе Windows, С#?

Этот вопрос задан для других языков, и даже для тех других языков я нашел ответы на них не в том, как точно это сделать, чисто (без перепутанных экранов и т.д.).

Можно ли рисовать на рабочем столе Windows с С#? Я ищу пример, если это возможно.

4b9b3361

Ответ 1

Попробуйте следующее:

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Runtime.InteropServices;

class Program {

    [DllImport("User32.dll")]
    static extern IntPtr GetDC(IntPtr hwnd);

    [DllImport("User32.dll")]
    static extern int ReleaseDC(IntPtr hwnd, IntPtr dc);

    static void Main(string[] args) {
        IntPtr desktop = GetDC(IntPtr.Zero);
        using (Graphics g = Graphics.FromHdc(desktop)) {
            g.FillRectangle(Brushes.Red, 0, 0, 100, 100);
        }
        ReleaseDC(IntPtr.Zero, desktop);
    }
}

Ответ 2

Вы можете попробовать:

Graphics.FromHwnd(IntPtr.Zero)

Ответ 3

Вы можете увидеть пример кода реального мира в https://uiautomationverify.codeplex.com/SourceControl/latest#UIAVerify/Tools/visualuiverify/utils/screenrectangle.cs

Это рисует прямоугольник, который появится на экране, пока пользователь не захочет удалить его в произвольном положении (не перекрашивать). Он использует форму окна, которая скрыта/отображается как всплывающее окно.

Это код, расположенный за инструментом UIAVerify.exe в текущем SDK Windows.

Если вы хотите использовать вышеперечисленное, скопируйте в проект следующие файлы:

  • utils\screenboundingrectangle.cs
  • utils\screenrectangle.cs
  • win32\*

Возможно, потребуется обновить пространства имен соответственно + добавить ссылки на System.Drawing + System.Windows.Forms

Затем вы можете нарисовать прямоугольник со следующим кодом:

namespace Something
{
    public class Highlighter
    {
        ScreenBoundingRectangle _rectangle = new ScreenBoundingRectangle();
        public void DrawRectangle(Rectangle rect)
        {
            _rectangle.Color = System.Drawing.Color.Red;
            _rectangle.Opacity = 0.8;
            _rectangle.Location = rect;
            this._rectangle.Visible = true;
        }
    }
}

и

var rect = Rectangle.FromLTRB(100, 100, 100, 100);
var hi = new Highlighter();
hi.DrawRectangle(rect);