PDA

View Full Version : عکس گرفتن اتوماتیک از صفحه مانیتور و ارسال آن



c-sharp_South
جمعه 02 تیر 1391, 09:59 صبح
سلام دوستان.
میخوام یک برنامه بنویسم که به طور اتوماتیک مثلا هر 5 دقیقه به طور اتوماتیک از صفحه ی مانیتور یک عکس بگیره و اون عکس رو به یک ایمیل ارسال کنه.
واسه گرفتن عکس از صفحه ی مانیتور در سایت زیر کدش رو پیدا کردم:
http://www.dotnetexpertsforum.com/how-to-capture-the-monitor-screen-using-c-t743.html

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;

namespace ax
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
int width, height;

width = System.Windows.Forms.SystemInformation.PrimaryMoni torSize.Width;

height = System.Windows.Forms.SystemInformation.PrimaryMoni torSize.Height;

//The following code will capture the screen and save it in the desktop as image.bmp;

Bitmap image;

Rectangle screen = Screen.AllScreens[0].Bounds;

image = new Bitmap(width, height, PixelFormat.Format32bppArgb);

Graphics Graph = Graphics.FromImage(image);

Graph.CopyFromScreen(screen.Left, screen.Top, 0, 0, screen.Size);

string savePath = Environment.GetFolderPath(Environment.SpecialFolde r.Desktop) + @"\mehdi.bmp";

image.Save(savePath);
}
}
}

کد بالا میاد عکس رو میگیره و توی دسکتاپ عکس رو به اسم mehdi ذخیره میکنه.
من میخوام این عکس رو مثلا توی مسیر:
C:\Windows\System32
ذخیره کنه و با استفاده از کد ارسال ایمیل و Attach File بعد از گرفتن عکس بگه که اون عکس رو به فلان آدرس ایمیل کنه.
ممنون میشم راهنماییم کنید.
یا حق

ahmadreza517
جمعه 02 تیر 1391, 10:17 صبح
به نام تنها برنامه نویس هستی
سلام ,

ارسال ایمیل تو سایت خیلی بحث شده
اول از این شروع کنید تا با کلاسها آشنا بشید .

http://howprg.blogfa.com

mehdy.programmer
جمعه 02 تیر 1391, 10:19 صبح
دوست عزیز !
برای سیو فایل تو یه آدرس دیگه به جای
Enviroment.SpecialFolder.Desktop
آدرسی رو بنویس که می خوای
string savePath = Environment.GetFolderPath(Environment.SpecialFolde r.Desktop) + @"\mehdi.bmp";
برای ارسال به ایمیل هم می تونی از این سورس (http://barnamenevis.org/showthread.php?64210-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%AF%D8%B1-%D8%B3%D9%8A-%D8%B4%D8%A7%D8%B1%D9%BE&p=1524843&viewfull=1#post1524843) استفاده کنی که دوست عزیزمون "gilproject" زحمتشو کشیده!

c-sharp_South
جمعه 02 تیر 1391, 10:21 صبح
مــــــــــرســــــــــــ ـــــــــــی

Alghoochi
جمعه 02 تیر 1391, 13:00 عصر
واسه اینکه بتونی تو فولدر System32 فایل ذخیره کنی باید برنامه‌ات با مجوز Administrator اجرا بشه (البته تو ویندوز سون). تو فولدر Temp یا Local ذخیره کنی بهتره.

c-sharp_South
شنبه 03 تیر 1391, 22:44 عصر
ببخشید به یک مشکل دیگه با این کد برخورد کردم.
من اومدم کد ذخیره کردن عکس رو در Timer قرار دادم.
برنامه دو تا تایمر داره . تایمر اول میاد عکس میگیره و بعدش تایمر دوم فعال و تایمر اول غیر فعال میشه.
تایمر دوم میاد عکس گرفته شده رو ایمیل میکنه و بعدش تایمر اول فعال و تایمر دوم غیر فعال میشه.
این بار تایمر اول ارور میده و عکس نمیگیره.
حتی اگه عکس رو بخوام پاک کنم ( در زمانی که برنامه بازه ) این ارور رو میده که تو عکس مشخصه:
http://s3.picofile.com/file/7417316983/eorrr.jpg (http://s3.picofile.com/file/7417316983/eorrr.jpg)
http://s3.picofile.com/file/7417316983/eorrr.jpg
مشکلم این نیست که عکس پاک نمیشه در هنگامی که برنامه بازه.
فقط میخوام تایمر دوباره عکس دوم رو بگیره.
البته اگه توی تایمر نزارم مشکلی نداره و عکس رو میگیره هااااا...
راه حلی دارید؟

mehdy.programmer
شنبه 03 تیر 1391, 23:33 عصر
بعد ارسال ایمیل اون قسمت از برنامت که عکس رو می فرسته Dispose کن ! شاید درست شد!

c-sharp_South
یک شنبه 04 تیر 1391, 09:05 صبح
بازم نشد(البته شاید من درست از Depose استفاده نکرده باشم )
اومدم از Application.Restart(); استفاده کردم.
تایمر 2 که کارشو انجام میده Application.Restart(); میشه و تایمر یک دوباره کارشو شروع میکنه.
مرسی
موفق باشید