Загрузка скриншота экрана на сервер через xNet (POST) без формы

  • На форуме работает ручное одобрение пользователей. Это значит, что, если Ваша причина регистрации не соответствует тематике форума, а также Вы используете временную почту, Ваша учётная запись будет отклонена без возможности повторной регистрации. В дальнейшем - пожизненная блокировка обоих аккаунтов за создание мультиаккаунта.
  • Мы обновили Tor зеркало до v3!
    Для входа используйте следующий url: darkv3nw2...bzad.onion/
  • Мы вновь вернули telegram чат форуму, вступайте, общайтесь, задавайте любые вопросы как администрации, так и пользователям!
    Ссылка: https://t.me/chat_dark_time

igrok2016reg

Участник

igrok2016reg

Участник
9 Окт 2016
20
9
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всем привет. Понадобилась кнопочка, которая делает скриншот текущей программы и заливает его на сервер.
Подключаем 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();
                        }
                    }
                }
            }
    }
myProc - замените на название процесса вашей программы (без .exe)
Разберем вот эту строчку:
Код:
var multipartContent = new xNet.MultipartContent()
   {
     {new FileContent("screenshots\\"+screenshotName), "upload", screenshotName}
   };
"screenshots\\"+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; // для показа юзеру, куда сохранился скриншот
Данный код будет загружать скриншот в папку screenshots под названием $filename (случайная мд5 строка).
Не забудьте сделать проверки на наличие файла и mime тип файла.
P.S. для отладки можете выводить массивы $_FILES и $_POST :
Код:
echo '<br>files array:<br>';
print_r($_FILES);
echo '<br>post array:<br>';
print_r($_POST);
 

О нас

  • Наше сообщество существует уже много лет и гордится тем, что предлагает непредвзятое, критическое обсуждение различных тем среди людей разных слоев общества. Мы работаем каждый день, чтобы убедиться, что наше сообщество является одним из лучших.

    Dark-Time 2015 - 2022

    При поддержке: XenForo.Info

Быстрая навигация

Меню пользователя