リッチクライアント画面のスクリーンショット取得方法
- このフォーラムに新しいトピックを立てることはできません
- このフォーラムではゲスト投稿が禁止されています
リッチクライアント画面のスクリーンショット取得方法
msg# 1
NAS_Sogabe
投稿数: 18
リッチクライアント画面のスクリーンショットを取得する方法を検討しています。
案としては、.net連携で、クリップボードにアクティブな画面のスクリーンショットを保持して、UniPaaS上でクリップボードの値を取得する・・・
といった感じで考えていますが、なかなかうまくいきません。
どなたか実装経験のある方はいらっしゃいますか?
案としては、.net連携で、クリップボードにアクティブな画面のスクリーンショットを保持して、UniPaaS上でクリップボードの値を取得する・・・
といった感じで考えていますが、なかなかうまくいきません。
どなたか実装経験のある方はいらっしゃいますか?
投票数:0
平均点:0.00
Re: リッチクライアント画面のスクリーンショット取得方法
msg# 1.1
null
投稿数: 191
少し前の仕事で似たような機能を F10 に割り当てる的な話があって
開いた時間で試しに作ったことはあります。
(結局、その機能は使わないことになったのでお蔵入りですが)
言われている通り、.Net 連携を使用して、
PrintScreen キーを押す動作をエミュレーションし、
クリップボードに貼り付けています。
SendKeys.SendWait("%{PRTSC}");
それを 画像ファイルに変換後、クライアントの
uniRIACache フォルダ辺りに保存して、
uniPaaS 側で表示したり、サーバーへファイル転送したりしています。
開いた時間で試しに作ったことはあります。
(結局、その機能は使わないことになったのでお蔵入りですが)
言われている通り、.Net 連携を使用して、
PrintScreen キーを押す動作をエミュレーションし、
クリップボードに貼り付けています。
SendKeys.SendWait("%{PRTSC}");
それを 画像ファイルに変換後、クライアントの
uniRIACache フォルダ辺りに保存して、
uniPaaS 側で表示したり、サーバーへファイル転送したりしています。
投票数:0
平均点:0.00
Re: リッチクライアント画面のスクリーンショット取得方法
msg# 1.1.1
NAS_Sogabe
投稿数: 18
返信ありがとうございます。
まさに同じことを試していました。
クリップボードに保存されているところまでは確認ができましたので、MAGIC上でClipRead()関数でBLOB型に落とせないかと検証していました。
ファイル化してから扱うことで可能なんですね。
最終的には、スクリーンショットをReportsMagicでプレビュー化(印刷)を可能とするように考えています。
取得したスクリーンショットをサーバー側に転送する必要があるので、ファイル化で問題ないように思います。
トラフィックが課題ではありますが・・・
何にせよ、実現できそうです。
ありがとうございました。
まさに同じことを試していました。
クリップボードに保存されているところまでは確認ができましたので、MAGIC上でClipRead()関数でBLOB型に落とせないかと検証していました。
ファイル化してから扱うことで可能なんですね。
最終的には、スクリーンショットをReportsMagicでプレビュー化(印刷)を可能とするように考えています。
取得したスクリーンショットをサーバー側に転送する必要があるので、ファイル化で問題ないように思います。
トラフィックが課題ではありますが・・・
何にせよ、実現できそうです。
ありがとうございました。
投票数:0
平均点:0.00
Re: リッチクライアント画面のスクリーンショット取得方法
msg# 1.1.1.1
null
投稿数: 191
そうそう。書き漏れていました。
ClipRead() はクライアント側で実行してくれるんですが、
内容がCF_UNICODETEXT形式で返るので、
クリップボードからファイルへ変換する処理も
.Net 連携でやるしかない感じでした。
以下、割と適当ですが・・・
public static void PrintScreen(System.String strImage)
{
SendKeys.SendWait("%{PRTSC}");
// クリップボードに格納された画像の取得
IDataObject data = Clipboard.GetDataObject();
if (data.GetDataPresent(DataFormats.Bitmap))
{
Bitmap bmp = (Bitmap)data.GetData(DataFormats.Bitmap);
// 取得した画像の保存
//bmp.Save(System.Environment.GetEnvironmentVariable("TEMP") + "\\uniRIACache\\printscreen.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
bmp.Save(strImage, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
その後、ClientFileToServer() とかでサーバー側に転送って感じで。
ClipRead() はクライアント側で実行してくれるんですが、
内容がCF_UNICODETEXT形式で返るので、
クリップボードからファイルへ変換する処理も
.Net 連携でやるしかない感じでした。
以下、割と適当ですが・・・
public static void PrintScreen(System.String strImage)
{
SendKeys.SendWait("%{PRTSC}");
// クリップボードに格納された画像の取得
IDataObject data = Clipboard.GetDataObject();
if (data.GetDataPresent(DataFormats.Bitmap))
{
Bitmap bmp = (Bitmap)data.GetData(DataFormats.Bitmap);
// 取得した画像の保存
//bmp.Save(System.Environment.GetEnvironmentVariable("TEMP") + "\\uniRIACache\\printscreen.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
bmp.Save(strImage, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
その後、ClientFileToServer() とかでサーバー側に転送って感じで。
投票数:1
平均点:10.00