2009-12-02 104 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有一個新的附件,稱爲剪切工具,可以拍攝屏幕圖像並通過電子郵件發送。