我用这段代码制作了一个阴影窗口
<Grid Background="Red" Margin="0">
<Grid.Effect>
<DropShadowEffect BlurRadius="10" ShadowDepth="1" Direction="270" Color="Red"/>
</Grid.Effect>
<Grid Margin="1" Background="White">
</Grid>
</Grid>
结果是成功的,但是当我尝试使用alt + print scr捕获windows屏幕截图时 这样的空白边缘。
first http://puu.sh/9rK9b/4dbd9a3b46.png
我想在网格区域内捕捉除了阴影区域之外的屏幕。
答案 0 :(得分:1)
您需要手动复制alt + print scr的功能以获得所需的行为。
首先,您需要挂钩消息循环并按照这些方式拦截印刷机:
ComponentDispatcher.ThreadFilterMessage += new ThreadMessageEventHandler(OnThreadMessage);
static void OnThreadMessage(ref MSG msg, ref bool handled)
{
if (!handled)
{
if (msg.message == WmHotKey)
{
// intercept alt+print screen here, do custom action
}
}
}
然后你需要从ui元素生成你想要的图像并沿着这些线将它设置到剪贴板(uiElement将是你的网格):
var bmp = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
bmp.Render(uiElement);
encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));
using (var stream = new MemoryStream)
{
encoder.Save(stream);
var img = Image.FromStream(stream);
Clipboard.SetImage(img);
}