Я работаю над формой обратной связи.Когда он открыт - пользователь может установить флажок, чтобы сделать снимок экрана.Проблема в том, что снимок экрана сделан с формой обратной связи, и мне нужно сделать снимок экрана без него.
Я нашел код для снимка экрана.Оно работает.Чтобы решить эту проблему, я пытался сделать эту форму невидимой или закрытой во время создания скриншота.Кроме того, я установил непрозрачность 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 после снятия скриншота, форма - на рисунке.
Так что вопросчто можно сделать скриншот окна без самого верхнего окна?