2011-07-18 8 views
2

私は他にもたくさんの質問を読んで問題を捜しましたが、私がwinformsを使用している場合はどうすればいいのか理解することができます。私は現在ライブラリを書いていますが、ライブラリの機能の1つはロギングを処理することです。私が実装している機能の1つは、問題をログに書き込む前にページのスクリーンショットを自動的に取得することです。この問題は、スクリーンショットを取るモニターがわからないため、ユーザーがブラウザーを別のモニターに移動しても、私はまだメインモニターのショットを撮っています。どのようにASP.NETプログラムが実行されているモニタを検出するのですか?

public static Bitmap ScreenShot(string saveLocation, string fileName) 
{ 
    Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); 
    Graphics.FromImage(bitmap).CopyFromScreen(0, 0, 0, 0, bitmap.Size); 
    string savePath = Path.Combine(Path.GetDirectoryName(saveLocation), "ScreenShots"); 
    if (!Directory.Exists(savePath)) 
     Directory.CreateDirectory(savePath); 
    bitmap.Save(Path.Combine(savePath, fileName), ImageFormat.Png); 
    return bitmap; 
} 

私はScreen.FromControl()を試してみたが、それはのWinFormsアプリケーションではありませんので、それを見つけることのために、私はどのSystem.Windows.Forms.Controlsを持っていません。

ASP.NETには同等の機能がありますか?または私は明示的にwinformコントロールにキャストできますか?

+2

Screenshot()メソッドはサーバー側で実行されます。クライアントのスクリーンショットを取得するにはどうすればよいですか? – n8wrl

+1

ブラウザがASPサーバーと同じコンピュータで実行されている場合、これはまったく機能しませんか? – antlersoft

+0

あなたが持っているコードを奪い、javascriptに変換する:)。 – JonH

答えて

4

きっとあなたはここで実行している任意のコードがそうサーバ上で実行されることは、あなたがDOMをキャプチャし、その後を介してサービスに戻ってそれを送信するためにJSを使用することができ、そのビーイングは、理論的には

を表示しない考えを持っていませんAjaxコール - それは私が思うに近いと思うでしょう

+0

DOMは、これがうまくいきませんでした(私はそれが本当にそうではないと思う)ことを発見した場合、次に試してみるべきことでした。答えをありがとう! – Sivvy

7

これはちょうどうまくいきません。 C#コードはWebサーバー上で実行され、ユーザーのWebブラウザーではなくコンピューター上で実行されます。コードにアクセスできるモニターは、Webサーバーに接続されているモニターだけです。

これはおそらく、は、あなたの開発プラットフォーム上で動作するようにを表示されますが、Webサーバーとクライアントマシンは同じマシンがあるという理由だけで。

あなたが望むことができる最良のものは、キャプチャをとることができるページにフラッシュまたはシルバーライトのオブジェクトを含めることです。それでもおそらく動作しません。

+0

さて、私はそれがうまくいくかどうかは確かではありませんでしたが、ASPXページのスクリーンショットを撮ることについて話しているチュートリアルを簡単に見つけることができたと思っていました。 – Sivvy

+0

SilverlightとFlashの両方で、画面をキャプチャできます。ただし、ブラウザのSilverlight/Flashクライアント領域のみをキャプチャします。つまり、Silverlightコンポーネントが実行されているブラウザの部分だけがキャプチャされます – Icemanind

0

私が考えることのできる唯一の可能性は、ブラウザにスクリーンショットを取得してアップロードするよう依頼するクライアント側のことです。 FogBugzは、新しいケースのツールでこれを実行しますが、これはユーザーがダウンロードしてインストールする必要があるアドインです。

3

あなたは、ASP.NETアプリケーションからクライアントの画面のスクリーンショットを撮ろうとしていますか?それは不可能です。 HTMLを含むリクエスト全体をログに記録し、別の場所に再レンダリングすることは可能ですが、サーバー側のアプリケーションフレームワークからクライアントとのやりとりを行うことはできません。

2

ユーザーが別のモニタにブラウザを移動した場合、私はまだ一次のショットを撮る1

ASP.NETには、サーバー上で実行されますので、画面にサーバーのコードを書くことは、ブラウザをキャプチャです無意味なスクリーンショットを撮るためにクライアント側のコード(javascript)を使用する方がよいかもしれません。

このスレッドはActiveXのソリューションを使用しています:あなたは彼らが考えるかもしれないよう Take a screenshot of a webpage with JavaScript?

2

ASP.Net Webフォームでは動作しません。短い答えはいいえ、あなたはASP.Netでこれを行うことはできません。同等のものはありません。

WinFormsは、Windowsオペレーティングシステムと対話して表示され、同じコンピュータのデスクトップに表示されます。 Webフォームは、HTMLを生成し、そのHTMLを別のコンピュータのブラウザに送ることによって表示されます。あなたのASPネットコードが他のコンピュータのブラウザで実行されていません。コードがスクリーンショットを撮ろうとしている場合は、サーバーの(またはコンピュータの)ディスプレイが表示されます。

JavaScriptを使用してブラウザでコードを実行することはできますが、スクリーンショットを撮ってはいけません(少なくともJavaScriptは自動的にはそうしないと思います)。 1つは、関連していない可能性のある他の情報を画面から取り込むことです。

ASP.Netに問題が発生すると、サーバーのWindowsログに詳細が記録され、IISログファイルにも詳細情報は記録されません。エラーが発生したときにアラートを電子メールで送信し、何がうまくいかないかをログで調べることを検討してください。

1

私は現在Google +で使用されているアルゴリズムを盗みます。サーバはレンダリング

  • 「ログ/レポートエラー」をユーザーがクリックする
  • :私は間違いなく、正確なアルゴリズムを持っている、あるいは現物に近い1、私はこれはそれがやっているものですとは思いませんスクロールバーの位置とウィンドウのサイズ(JSからアクセス可能)を使用して現在のページを表示します。
  • サーバーは、ウィンドウ全体をカバーするdivをレンダリングし、その内部にイメージを配置します。このdivは最高のz-indexを持ちます。
  • ユーザーがdivをクリックすると、ユーザーが選択した領域を「強調表示」できる新しいdivが生成されます。ユーザは、この選択された領域にコメントを添付することができる。

実行中の天才です。

0

これは、以前は、 - gasp-Visual Basicで書かれたActiveXコントロールを使用して、長い時間前にバグ追跡アプリケーションのためにこれを行いました。あなたの唯一の選択肢は、そのようなもの(クールなGoogle+のトリック以外のもの)です。

関連する問題