using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Drawing.Imaging;
using System.IO;
namespace ScreenLog
{
public partial class Form1 : Form
{
//subDirectory
private string subDirection = "";
private Bitmap MyImage = null;
//记录旧的时间
private DateTime dtOld = new DateTime();
//记录旧的时间+时间段 之和
private DateTime dtTemp = new DateTime();
public Form1()
{
InitializeComponent();
}
#region "初始化页面 Form1_Load"
/*
* 功能:
*
*/
private void Form1_Load(object sender, EventArgs e)
{
//show the notifyIcon1
notifyIcon1.Visible = true;
//inital the old time
dtOld = DateTime.Now;
textBox1.Text = Application.StartupPath;
setSubDirectory();
//start the capture once
capture();
//display the old time
lblLastTime.Text = dtOld.ToShortTimeString();
}
#endregion
#region "刷新时间、拍照 button2_Click"
/*
* 功能:
*
*/
private void button2_Click(object sender, EventArgs e)
{
dtOld = DateTime.Now;
capture();
//定时器重开
//timer1.Stop();
//timer1.Start();
//display the old time
lblLastTime.Text = dtOld.ToShortTimeString();
}
#endregion
#region "抓图 保存 capture "
/*
* 功能:
*
*/
[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
private static extern bool BitBlt(
IntPtr hdcDest, //目标设备的句柄
int nXDest, // 目标对象的左上角的X坐标
int nYDest, // 目标对象的左上角的X坐标
int nWidth, // 目标对象的矩形的宽度
int nHeight, // 目标对象的矩形的长度
IntPtr hdcSrc, // 源设备的句柄
int nXSrc, // 源对象的左上角的X坐标
int nYSrc, // 源对象的左上角的X坐标
System.Int32 dwRop // 光栅的操作值
);
[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
private static extern IntPtr CreateDC(
string lpszDriver, // 驱动名称
string lpszDevice, // 设备名称
string lpszOutput, // 无用,可以设定位"NULL"
IntPtr lpInitData // 任意的打印机数据
);
[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
private static extern bool DeleteDC(
IntPtr hdc
);
//抓图 保存
public void capture()
{
try
{
IntPtr dc1 = CreateDC("DISPLAY", null, null, (IntPtr)null);
//创建显示器的DC
Graphics g1 = Graphics.FromHdc(dc1);
//由一个指定设备的句柄创建一个新的Graphics对象
MyImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, g1);
//根据屏幕大小创建一个与之相同大小的Bitmap对象
Graphics g2 = Graphics.FromImage(MyImage);
//获得屏幕的句柄
IntPtr dc3 = g1.GetHdc();
//获得位图的句柄
IntPtr dc2 = g2.GetHdc();
//把当前屏幕捕获到位图对象中
BitBlt(dc2, 0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, dc3, 0, 0, 13369376);
//把当前屏幕拷贝到位图中
g1.ReleaseHdc(dc3);
//释放屏幕句柄
g2.ReleaseHdc(dc2);
//释放位图句柄
string strDt = DateTime.Now.ToString().Replace("/", "-");
strDt = strDt.Replace(":", "_");
MyImage.Save(textBox1.Text.Trim() + subDirection + "//" + strDt + ".jpg", ImageFormat.Jpeg);
//MessageBox.Show("已经把当前屏幕保存到C://MyJpeg.jpg文件中!");
MyImage.Dispose();
g1.Dispose();
g2.Dispose();
if (!DeleteDC(dc1))
{
MessageBox.Show("DeleteDC() not successed");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
#endregion
#region "最小化 显示托盘 Form1_SizeChanged"
/*
*
*
*/
private void Form1_SizeChanged(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
this.Hide();
this.notifyIcon1.Visible = false;
}
}
#endregion
#region "点击托盘图标 notifyIcon1_Click"
/*
*
*
*/
private void notifyIcon1_Click(object sender, EventArgs e)
{
this.Visible = true;
this.WindowState = FormWindowState.Normal;
this.notifyIcon1.Visible = false;
}
#endregion
#region "定时器 timer1_Tick"
/*
*
*
*/
private void timer1_Tick(object sender, EventArgs e)
{
//定时器
dtTemp = dtOld.AddMinutes(Convert.ToDouble(comboBox1.Text.Trim()));
if ((DateTime .Now.Hour == dtTemp.Hour) && (DateTime.Now.Minute == dtTemp.Minute))
{
//MessageBox.Show("ok");
setSubDirectory();
//save the jpg
capture();
//刷新时间
dtOld = DateTime.Now;
//display the old time
lblLastTime.Text = dtOld.ToShortTimeString();
}
}
#endregion
#region "保存路径修改 btnFolderSelect_Click"
/*
*
*
*/
private void btnFolderSelect_Click(object sender, EventArgs e)
{
//保存路径修改
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Text = folderBrowserDialog1.SelectedPath;
}
}
#endregion
#region "下层子路径设置 setSubDirectory"
/*
*
*
*/
private void setSubDirectory()
{
subDirection = "//" + DateTime.Now.ToString().Replace("/", "-").Substring(0, 10);
if (!Directory.Exists(textBox1.Text.Trim() + subDirection))
{
Directory.CreateDirectory(textBox1.Text.Trim() + subDirection);
}
}
#endregion
}
}