2009-12-02 106 views
3

我需要一种方法以任何可能的方式捕获Web应用程序中的屏幕。没有像SnagIt这样的其他工具,有没有这种方法?我可以在ActiveX组件中使用Win32 DllImports吗?ASP.NET/ActiveX/Silverlight屏幕捕获

在此先感谢!

回答

0

下面是一些代码,将采取Silverlight应用程序的屏幕截图。然后你可以把它或什么都:-)

只要创建一个Silverlight项目(与正常炫魅广东等以及与此替换。

工作在两个3.0和4.0(还没有尝试2.0或更低)

希望我帮助 问候 重新装载使用系统

.CS

;使用 SYST em.Collections.Generic;使用 System.Linq;使用System.Net;使用 System.Windows;使用 System.Windows.Controls;使用 System.Windows.Documents;使用 System.Windows.Input;使用 System.Windows.Media;使用 System.Windows.Media.Animation;使用 System.Windows.Shapes;使用 System.Windows。数据;使用 System.Windows.Media.Imaging;

命名空间SilverlightApplication1 { 公共部分类的MainPage:用户控件 { 公共的MainPage() { 的InitializeComponent(); }

private void UIelementShoot(object sender, 

RoutedEventArgs E) { theImageToSend.Source =新WriteableBitmap的(elementToCapture, NULL); }

private void ScreenShoot(object sender, 

RoutedEventArgs E) { theImageToSend.Source =新WriteableBitmap的(LayoutRoot,NULL); }

private void Button_Click(object sender, 

RoutedEventArgs E) {

} 
} } 

XAML:

<UserControl 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:SilverlightApplication1" x:Class="SilverlightApplication1.MainPage" 
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="400"> 

    <Grid x:Name="LayoutRoot" Background="White" Width="400" Height="300" > 
     <Image x:Name="theImageToSend" Margin="191,56,44,103" d:LayoutOverrides="HorizontalAlignment"/> 
     <TextBox x:Name="elementToCapture" Margin="37,56,0,130" TextWrapping="Wrap" Text="TextBox" Width="124" HorizontalAlignment="Left" d:LayoutOverrides="Width"/> 
     <Button Content="Make ScreenShoot" HorizontalAlignment="Right" Margin="0,0,44,26" VerticalAlignment="Bottom" Width="139" Click="ScreenShoot"/> 
     <Button Content="Make TextBox Shoot" HorizontalAlignment="Left" Margin="61,0,0,26" VerticalAlignment="Bottom" Width="139" Click="UIelementShoot"/> 


    </Grid> 
</UserControl> 
0

在Silverlight论坛上,他们说因为安全原因,Silverlight无法使用Silverlight。

我认为这应该是可能的,因为PrintDocument基本上是一样的......
请参阅下面我们指向LayoutRoot打印的位置。

在该论坛的链接中,他们正在GAC中注册DLL并使用该DLL创建屏幕截图。不是很好;-)
http://forums.silverlight.net/forums/p/163378/367809.aspx

private void ButtonPrint_Click(object sender, System.Windows.RoutedEventArgs e) 
{ 
    PrintDocument pd = new PrintDocument(); 
    pd.PrintPage += OnPrintPage; 
    pd.Print("from Silverlight"); 
} 

private void OnPrintPage(object s, PrintPageEventArgs args) 
{ 
    args.PageVisual = LayoutRoot; 
} 
+0

您可以渲染Silverlight UI的图像并执行任何操作,这根本不是安全风险(因为Silverlight不会在Silverlight沙箱外“看到”)。 PageVisual = LayoutRoot除了使用Visual的Silverlight用户界面外没有任何其他功能。 – WiredPrairie 2010-07-06 15:49:54

2

纯的Silverlight代码,无论是在浏览器和浏览器外,这是不可能捕获屏幕的图像(谢天谢地!这将是一个巨大的隐私如果一个流氓网站能够捕获你的屏幕并将其发送到他们的网站,那么就会面临安全问题)。

通过编写浏览器插件(例如ActiveX控件,它只能在IE中使用),您可以编写必要的Win32代码来拍摄屏幕截图。它仍然需要一些繁重的工作来管理图像,上传,文件安全性等等。您可能能够使用C#编写COM控件,但它需要放在GAC中(因此需要签名等)。

还有其他解决方案涉及本地本地安装和基于浏览器的Silverlight应用程序,但都需要在PC上进行安装。

我会建议考虑一个简单的,零安装(或点击一次),EXE,可以从一台PC上运行,只需要一个屏幕截图并上传它/电子邮件/等。这将涉及少得多的黑客来使其工作。

请注意,Windows 7有一个新的附件,称为剪切工具,可以拍摄屏幕图像并通过电子邮件发送。