10

一定時間間隔でデスクトップのスクリーンショットを撮るアプリを作成しています。

コード:

String nme = "";
Bitmap printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, 
                                Screen.PrimaryScreen.Bounds.Height);
Graphics graphics = Graphics.FromImage(printscreen as Image);
graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size);
nme = DateTime.Now.ToString();
printscreen.Save(@"F:\Temp\printScre.jpg", ImageFormat.Jpeg);
  1. CopyFromScreen はデスクトップのスクリーンショットを取得する正しい方法ですか?
  2. このスクリーンショットをリモート サーバーに送信したい場合、どのような方法が最適ですか?
  3. 送信する前に圧縮を行う必要がありますか?もしそうなら、最も効率的な方法は何ですか?
4

2 に答える 2

10
  1. はい、正しい方法です
  2. いくつかの可能性があります。電子メールまたは FTP 経由で送信することをお勧めします (C# では簡単なので)。
  3. いいえ、個人的には追加の圧縮は必要ないと思います。スクリーンショットは既に JPEG として保存されているため、既に圧縮されています。

添付ファイル付きの電子メールを送信するためのコード スニペット:

MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient(YOUR SMTP SERVER ADDRESS);
mail.From = new MailAddress(SENDER ADDRESS);
mail.To.Add(RECEIVER ADDRESS);
mail.Subject = "Test Mail - 1";
mail.Body = "mail with attachment";
System.Net.Mail.Attachment attachment;
attachment = new System.Net.Mail.Attachment("YOURFILE");
mail.Attachments.Add(attachment);
SmtpServer.Port = 587;
SmtpServer.Credentials = new System.Net.NetworkCredential(YOUR_SMTP_USER_NAME, YOUR_SMTP_PASSWORD);
SmtpServer.EnableSsl = true;
SmtpServer.Send(mail); 

こちらのブログを参考に)

FTP のコード スニペット:

    FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.contoso.com/test.htm");
    request.Method = WebRequestMethods.Ftp.UploadFile;
    request.Credentials = new NetworkCredential ("anonymous","janeDoe@contoso.com");
    StreamReader sourceStream = new StreamReader("testfile.txt");
    byte [] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
    sourceStream.Close();
    request.ContentLength = fileContents.Length;
    Stream requestStream = request.GetRequestStream();
    requestStream.Write(fileContents, 0, fileContents.Length);
    requestStream.Close();
    FtpWebResponse response = (FtpWebResponse)request.GetResponse();    
    Console.WriteLine("Upload File Complete, status {0}", response.StatusDescription);    
    response.Close();

( MSDNに基づく)

于 2013-10-14T06:17:53.523 に答える
5

はい、それは完全に正しい方法です。ただし、SO の次のリンクにアクセスすることをお勧めします。これは、何らかの形で質問に対する回答が既にあるためです。

CopyFromScreenを使用した別のソリューションと、問題に関する洞察を備えたより複雑なソリューション。

リモートサーバーへの送信については、TcpClientまたは電子メールの使用を検討してください。より多くの画面を使用する場合、またはネットワークが遅い場合、ディスク容量が少ない場合などは、常に圧縮をお勧めします。圧縮効率については、入手可能なアーカイベーターを見て、必要なものを入手してください。それらは主に圧縮形式、速度、および圧縮品質が異なりますが、ほとんどの場合、速度または品質が必要かどうかを判断できます。

于 2013-10-14T05:14:08.343 に答える