Как сделать снимок экрана для определенного раздела в универсальном приложении Windows (не имеет значения разрешение компьютера) - PullRequest
0 голосов
/ 25 октября 2019

Я работаю в компании, где владелец хочет сделать скриншот почтового приложения Windows;в частности, раздел, где отображается электронная почта;и если у окна или раздела есть свиток, то нужно его избежать и сделать скриншот всего этого раздела.

Я создаю его на консольном приложении .net, и я скачал много примеров. где показано, как сделать снимок определенного или любого окна.

Ближайший код (я думаю), который я нашел, был таким:

IntPtr current = IntPtr.Zero;
        IntPtr handle = IntPtr.Zero;

        List<IntPtr> thumbs = new List<IntPtr>();
        if (handle == IntPtr.Zero)
            handle = ((System.Windows.Interop.HwndSource)System.Windows.Interop.HwndSource.FromVisual(this)).Handle;

        current = DWM.GetWindow(handle, DWM.GetWindowCmd.First);

        do
        {
            int GWL_STYLE = -16;
            int TASKSTYLE = 0x10000000 | 0x00800000;
            if (TASKSTYLE == (TASKSTYLE & DWM.GetWindowLong(current, GWL_STYLE)))
            {
                thumbs.Add(current);
            }

            current = DWM.GetWindow(current, DWM.GetWindowCmd.Next);

            if (current == handle)
                current = DWM.GetWindow(current, DWM.GetWindowCmd.Next);
        }
        while (current != IntPtr.Zero);

        this.DataContext = thumbs;

Что ожидает покупатель,Скриншот почтового приложения Windows, но, как я уже говорил, раздел, который показывает электронную почту на самом деле. Итак, это должно выглядеть примерно так:

Результат

1 Ответ

0 голосов
/ 25 октября 2019

Я не уверен, как это сделать из консольного приложения, поскольку оно очень ограничено, но вы можете значительно проще создать программу захвата экрана из Windows Forms. Курс, который я взял у Хью Коллингборна, который научит вас, как это сделать. Это не маленькая программа для ввода в этом поле.

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

formRect = new Rectangle(this.Left, this.Top, this.Left + this.Width, this.Top + this.Height);
this.Hide();
mainForm.GrabRect(formRect);

Возвращаясь к основной форме, программа поместит изображение в поле для просмотра.

public void GrabRect(Rectangle rect)
    {
        int rectWidth = rect.Width - rect.Left;
        int rectHeight = rect.Height - rect.Top;
        Bitmap bm = new Bitmap(rectWidth, rectHeight);
        Graphics g = Graphics.FromImage(bm);
        g.CopyFromScreen(rect.Left, rect.Top, 0, 0, new Size(rectWidth, rectHeight));
        this.pb_screengrab.Image = bm;
        Clipboard.SetImage(bm);
        g.Dispose();
    }

Вот ссылки на его курс https://bitwisecourses.com/p/program-a-screen-capture-tool-in-c-sharp, и его курс, проданный через udemy https://www.udemy.com/course/program-a-screen-capture-tool-in-c/learn/lecture/15760316#content

bitwisecourses.com, является его прямым веб-сайтом, я полагаю. В противном случае Udemy предложит хорошие скидки, например, от 10 до 13 долларов за свои занятия. После того, как вы купили связку и ничего не делаете в течение нескольких месяцев, они попытаются взимать с вас полную цену, но вам нужно только отправить их по электронной почте, и они снова начнут сбрасывать со счетов.

Я положил все, что сделалздесь: https://github.com/johnbnstx/HuwBurn_ScreenGrab

Надеюсь, это поможет.

...