Member 13186404 Ответов: 1

Я хочу сделать снимок экрана курсора мыши во время запуска автоматизации с помощью закодированного пользовательского интерфейса.


Я использую кодированный пользовательский интерфейс Visual studio 2015 для автоматизации своего приложения. Я хочу захватить окно с курсором мыши на нем. Мог ли кто-нибудь иметь или делать такой сценарий захвата курсора мыши?

Пожалуйста помочь

С уважением,
Ранджит

Что я уже пробовал:

В настоящее время я перепробовал много методов, использующих функциональность in build. Но мне не удалось захватить курсор мыши.

1 Ответов

Рейтинг:
1

Wessel Beulink

Здесь вы идете:

[StructLayout(LayoutKind.Sequential)]
struct CURSORINFO
{
    public Int32 cbSize;
    public Int32 flags;
    public IntPtr hCursor;
    public POINTAPI ptScreenPos;
}

[StructLayout(LayoutKind.Sequential)]
struct POINTAPI
{
    public int x;
    public int y;
}

[DllImport("user32.dll")]
static extern bool GetCursorInfo(out CURSORINFO pci);

[DllImport("user32.dll")]
static extern bool DrawIcon(IntPtr hDC, int X, int Y, IntPtr hIcon);

const Int32 CURSOR_SHOWING = 0x00000001;

public static Bitmap CaptureScreen(bool CaptureMouse)
{
    Bitmap result = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format24bppRgb);

    try
    {
        using (Graphics g = Graphics.FromImage(result))
        {
            g.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);

            if (CaptureMouse)
            {
                CURSORINFO pci;
                pci.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(typeof(CURSORINFO));

                if (GetCursorInfo(out pci))
                {
                    if (pci.flags == CURSOR_SHOWING)
                    {
                        DrawIcon(g.GetHdc(), pci.ptScreenPos.x, pci.ptScreenPos.y, pci.hCursor);
                        g.ReleaseHdc();
                    }
                }
            }
        }
    }
    catch
    {
        result = null;
    }

    return result;
}


Member 13186404

Что я получу user32.dll??

Wessel Beulink

....добавить с помощью System.Во время выполнения.InteropServices;

Member 13186404

как сохранить изображение?

Wessel Beulink

он возвращает растровое изображение в результате вызова функции и делает все, что вы хотите сделать с растровым изображением. Сохраните его в базе данных или локальном хранилище.

используйте функцию. save для результата растрового изображения.Сохранить (имя файла, система.Рисование.Изображений.ImageFormat.Jpeg);

имя файла = путь + имя.
Или сохраните его как blob-объект в базе данных