Как сделать скриншот окна, которое находится за самым верхним окном? - PullRequest
0 голосов
/ 12 февраля 2019

Я работаю над формой обратной связи.Когда он открыт - пользователь может установить флажок, чтобы сделать снимок экрана.Проблема в том, что снимок экрана сделан с формой обратной связи, и мне нужно сделать снимок экрана без него.

Я нашел код для снимка экрана.Оно работает.Чтобы решить эту проблему, я пытался сделать эту форму невидимой или закрытой во время создания скриншота.Кроме того, я установил непрозрачность 0 и высоту 0. Я думаю, что снимать скриншот слишком быстро, поэтому визуально форму нельзя скрыть за такой промежуток времени.

    public void TakeScreenshot()
    {
        double screenLeft = SystemParameters.VirtualScreenLeft;
        double screenTop = SystemParameters.VirtualScreenTop;
        double screenWidth = SystemParameters.VirtualScreenWidth;
        double screenHeight = SystemParameters.VirtualScreenHeight;

        using (Bitmap bmp = new Bitmap((int)screenWidth, (int)screenHeight))
        {
            using (Graphics g = Graphics.FromImage(bmp))
            {
                g.CopyFromScreen((int)screenLeft, (int)screenTop, 0, 0, bmp.Size);
                bmp.Save(@"D:\printscreen.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
            }
        }
    }


    public void SendMessage()
    {
        MagicOpacity = 0;
        MailAddress from = new MailAddress(Mail, CurrentUser.Name);
        MailAddress to = new MailAddress("a@mail.com");
        MailMessage message = new MailMessage(from, to);

        if (SendWithScreenshot)
        {
            TakeScreenshot();
            message.Attachments.Add(new Attachment("D:\\printscreen.jpg"));
        }

        MagicOpacity = 1;
    }

РЕДАКТИРОВАТЬ:форма расширяется на Opacity of Border, используется в качестве переключателя, форма является содержимым Border (opacity == 0 (1) -> height = 0 (500))

    public void ExpandFeedBackForm()
    {
        MagicOpacity = MagicOpacity == 0 ? 1 : 0;
    }

<Canvas>
    <Button Name="FeedBackButton" Command="{Binding ExpandFeedBackFormCommand}" FontWeight="Bold" FontSize="10" Height="18.5" Margin="-3,-8,0,0"/>
    <Border BorderBrush="Gray" BorderThickness="2" Opacity="{Binding MagicOpacity}" Name="border" Margin="-350,0,-178,-9" Background="White"
                    Canvas.Bottom="{Binding ElementName=FeedBackButton, Path=ActualHeight}">
        <Border.Style>
            <Style TargetType="Border">
                <Style.Triggers>
                    <Trigger Property="Opacity"  Value="1">
                        <Trigger.EnterActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetProperty="Height" From="0" To="500" Duration="0:0:0.4"/>
                                </Storyboard>
                            </BeginStoryboard>
                        </Trigger.EnterActions>
                    </Trigger> 
                </Style.Triggers>
            </Style>
        </Border.Style>
        <v:FeedBackView/>
    </Border>
</Canvas>

MagicOpacity здесь используется для запуска анимациииспользуя команду (это потому, что свойство Height не может быть связано).Но это работает, поэтому это не имеет значения.

Даже если я не установлю MagicOpacity на 1 после снятия скриншота, форма - на рисунке.

Так что вопросчто можно сделать скриншот окна без самого верхнего окна?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...