igrok2016reg
Участник
igrok2016reg
Участник
- 9 Окт 2016
- 20
- 9
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всем привет. Понадобилась кнопочка, которая делает скриншот текущей программы и заливает его на сервер.
Подключаем 4 либы. Все это будем делать на старом любимом xNet
Где-нибудь в начале объявляем переменные для названия скриншота и текущего времени/даты
Создаем метод, проверяющий наличие папки со скриншотами
При клике на кнопку вешаем событие:
myProc - замените на название процесса вашей программы (без .exe)
Разберем вот эту строчку:
"screenshots\\"+screenshotName - путь до скриншота на вашем компьютере
upload - название массива для php обработки ($_FILES['upload'][])
screenshotName - название файла, которое будет передано пхп скрипту.
site.ru/upload.php - замените на путь до вашего скрипта.
Далее переходим к пхп:
Данный код будет загружать скриншот в папку screenshots под названием $filename (случайная мд5 строка).
Не забудьте сделать проверки на наличие файла и mime тип файла.
P.S. для отладки можете выводить массивы $_FILES и $_POST :
Подключаем 4 либы. Все это будем делать на старом любимом xNet
Код:
using xNet;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Drawing.Imaging;
using System.Diagnostics;
Код:
string screenshotName;
string nowTime = DateTime.Now.ToString("HH-mm-ss");
string nowDate = DateTime.Now.ToString("dd-MM");
Код:
private void checkSrcDir()
{
if (!Directory.Exists("screenshots"))
{
Directory.CreateDirectory("screenshots");
}
}
Код:
private void doScreenShot_Click(object sender, EventArgs e)
{
Process proc = Process.GetProcessesByName("myProc").First(); // получаем наш процесс
if (SetForegroundWindow(proc.MainWindowHandle))
{
RECT srcRect;
if (!proc.MainWindowHandle.Equals(IntPtr.Zero))
{
if (GetWindowRect(proc.MainWindowHandle, out srcRect))
{
int width = srcRect.Right - srcRect.Left;
int height = srcRect.Bottom - srcRect.Top;
Bitmap bmp = new Bitmap(width, height);
Graphics screenG = Graphics.FromImage(bmp);
try
{
screenG.CopyFromScreen(srcRect.Left, srcRect.Top,
0, 0, new Size(width, height),
CopyPixelOperation.SourceCopy);
nowTime = DateTime.Now.ToString("HH-mm-ss");
nowDate = DateTime.Now.ToString("dd-MM");
screenshotName = "screen_" + nowTime + "_" + nowDate + ".jpg"; // изменяем название скриншота
checkSrcDir(); // проверяем папку со скриншотами
bmp.Save("screenshots\\" + screenshotName, ImageFormat.Jpeg); // сохраняем скриншот
HttpRequest req = new HttpRequest();
req.UserAgent = Http.ChromeUserAgent();
req.Referer = "http://yandex.ru";
var multipartContent = new xNet.MultipartContent()
{
{new FileContent("screenshots\\"+screenshotName), "upload", screenshotName}
};
string response = req.Post("http://site.ru/upload.php", multipartContent).ToString();
MessageBox.Show(response); // для отладки
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
screenG.Dispose();
bmp.Dispose();
}
}
}
}
}
Разберем вот эту строчку:
Код:
var multipartContent = new xNet.MultipartContent()
{
{new FileContent("screenshots\\"+screenshotName), "upload", screenshotName}
};
upload - название массива для php обработки ($_FILES['upload'][])
screenshotName - название файла, которое будет передано пхп скрипту.
site.ru/upload.php - замените на путь до вашего скрипта.
Далее переходим к пхп:
Код:
$filename = md5(time());
move_uploaded_file ($_FILES['upload']['tmp_name'], 'screenshots/'.$filename.'.jpg');
echo 'http://site.ru/screenshots/'.$filename; // для показа юзеру, куда сохранился скриншот
Не забудьте сделать проверки на наличие файла и mime тип файла.
P.S. для отладки можете выводить массивы $_FILES и $_POST :
Код:
echo '<br>files array:<br>';
print_r($_FILES);
echo '<br>post array:<br>';
print_r($_POST);