Здравствуйте! Сегодня: Ср, 18 Янв 2017, Ваш IP: 54.211.249.219 Войти через loginza
 
Вход | Регистрация | Забыли пароль?
Мой Kbyte.Ru
> Группа «FoxTools.ru» - Форум
+ Добавить ответ | + Создать новую тему Страница: 1
Тема: Хитрый стрелок экранов · +  +    в избранномx1 дата добавления: 08.02.2013 / 16:00
Автор темы:
Алексей Немиро
Алексей Немиро
тем: 537 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Администратор
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 537


Хитрый стрелок экранов - программа для создания, редактирования и отправки в Интернет снимков экранов.

Официальная страничка программы: http://foxtools.ru/Shooter

Текущая официальная сборка: 1.2013.2.10
Лицензия: GNU GPLv3
Язык программирования: Visual Basic .NET, .NET Framework 3.5
Проект создан в Visual Studio 2010.

Исходный код: http://files.foxtools.ru/Shooter/Sources/
Страничка проекта в Google: http://code.google.com/p/foxtools-screen-shooter/
Страничка проекта в SourceForge: http://sourceforge.net/projects/screenshooter/
Страничка проекта в CodePlex: http://screenshooter.codeplex.com/
Статья о Хитром стрелке: http://www.codeproject.com/Articles/546383/FoxTools-Screen-Shooter

Эта тема создана для обсуждения исходного кода программы. Вопросы, предложения, идеи.

История:
Я давно задумывал сделать хитрый инструмент для создания снимков сайтов, но все откладывал эту идею. В начале 2013 года, Артем (artF) Федоров в очень секретной переписке засветил идею о создании программы, которая могла бы делать снимки и отправлять их в Интернет. Собственно Артем пытался реализовать задуманное на Visual Basic 6.0, но после общения со мной, как и положено, был обращен в религию .NET, правда пока не полностью, но это вопрос времени :)



Идея мне понравилась, тем более она косвенно связана с созданием снимков страниц сайтов, и решил сделать этот проект. На уровне хитрого API (api.foxtools.ru) я сделал пару методов: Screen – для загрузки снимков экранов, да и вообще любых графических изображений; WebScreen – для отправки запросов на создание снимков страниц сайтов. Ну а дальше, в свободное от других дел время, писал саму программу для создания снимков экранов.

Мне нравится стандартная программа «Ножницы» в Windows 7, так что при разработке интерфейса я отталкивался именно от этой программы. Для создания программы я выбрал язык Visual Basic .NET, хотя в последние годы редко начинаю на нем новые проекты, но думаю многим из кбайтчан будет удобней/понятней именно этот язык программирования.

Изначально была реализована отправка снимков на сервер FoxTools.ru, но в последующем я заметил интересный проект – ZzWeb.ru, автором которого является Руслан Курепин. Система ZzWeb позволяет чуть ли не силой мысли создавать сайты, точнее странички. Система получает контент и приводит его в человеческий вид. Я решил сделать еще и отправку снимков в ZzWeb. Руслан, кстати, поддержал идею. В хитром API для взаимодействия с ZzWeb.ru был создан одноименный метод ZzWeb.

TODO:
1. На сегодняшний день отсутствует возможность создавать снимки окон. Основная проблема – определение видимых на экране окон. Решение должно быть где-то в Windows API.
Функция IsWindowVisible возвращает True в том числе для невидимых окно. Функции EnumWindows и EnumDesktopWindows тоже возвращают кучу всяких ненужных окон. Функции для определения позиции окна особого результата не дают, т.к. почему-то возвращает позицию даже для свернутых окон. Определение состояния окна (свернуто, развернуто) – тоже не особо помогает, т.к. окно может быть невидимым и развернутым, но при этом IsWindowVisible вернет True. Думаю, копать нужно в сторону определения Z-Index окон. В общем, пока не ясно как это лучше сделать. Да и засорять код WinAPI не особо хочется :)

2. Маркер сделан неправильно. Цвет маркера должен смешиваться, а не рисоваться по верх. Пока не придумал, как это лучше сделать. решение найдено


3. Нет отправки на E-Mail. Не стал делать, даже не пробовал. Сам не пользуюсь такой функцией, если и отправляю снимок по почте, то обычно в качестве дополнения к уже созданному письму. Не знаю, насколько будет востребована такая функция, но если что, думаю, сделать будет несложно.

4. Инструментов для рисования может быть больше. Но это тоже нужно подумать, если их будет слишком много, то программой станет сложно пользоваться, что не есть хорошо. Я изначально думал сделать: прямоугольник, размытие выделенной области, и ради прикола прорисовку censored. Последнее мне нравится больше всего, наверняка со временем сам сделаю. А остальные инструменты - нужно подумать.

5. Думаю, будет неплохо иметь обработчик Ctrl + Z в редакторе снимков.

6. Подумать о слишком жестком расположении окна режима создания снимка. Возможно стоит убрать TopMost...

7. Многие предлагают закрывать окно со снимком после его отправки в Интернет. Я не согласен с этим, ибо после отправки может возникнуть необходимость дорисовать снимок, сохранить или отправить в другое место. Возможно, после отправки снимка, в окне стоит добавить дополнительные кнопки: Закрыть программу, Создать новый снимок.

8. Неплохо было бы иметь возможность изменять размер снимков. Возможно, это можно сделать в виде инструмента рисования.

9. Добавить возможность распечатывать снимки.

10. Из ZzWeb можно сделать Ёлпер. Нужна возможность создания множества снимков за сеанс.

11. Прямая отправка в Twitter, Facebook, еще можно подумать о DropBox.

12. Сделать опциональную возможность показа размера выбранной области при создании снимка экрана. Например, рисовать размер маленьким шрифтом внизу справа: 120x50px. Будет удобно использовать программу для определения размеров областей экрана (при веб-дизайне или разработке интерфейса). сделано


13. Сделать возможность создавать снимки с задержкой. Т.е. нажимаем создать снимок через 5 сек, чтобы можно было сделать что-то на экране, подготовиться, открыть менюшки и т.п.

Как пользоваться исходным кодом:
Скачать, распаковать, запустить файл проекта FoxTools.Shooter.vbproj.
Обязательно компилировать проект, перед открытием форм (студия создаст папку obj, которую я удалил из исходников, на основе данных папки будут рисоваться формы в Visual Studio).

Если поймаете ошибку вида (например, при попытке запуска проекта с рабочего стола):
Ошибка 1 FileTracker : error FTK1011: C:\какой-то путь\FileTracker FoxTools.Shooter


То проверьте, чтобы в пути расположения проекта не было пробелов.

Обновлено: 17.07.2013
 
Ответ # 1 # · +  +  дата добавления: 11.02.2013 / 14:12
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 537 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Администратор
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 537


Реализация отправки файлов на свой сервер


В хитрой библиотеке (FoxTools.Lib.dll) есть один мой, уже устаревший, вспомогательный класс для веб-запросов. Пользоваться им очень просто.
Отправка файлов из кода Visual Basic .NET делается следующим образом:
Using w As New FoxTools.Lib.Net.Web()
  w.Method = [Lib].Net.Enums.HttpMethod.POST 'обязательно методом POST
  w.Url = "http://example.com/upload.php" 'куда будет отправлен запрос
  w.ContentType = "multipart/form-data" 'важно, если указать неверно, то сервер может не понять, что ему суют
  w.Queries.AddFile("myfile", "test.png", System.IO.File.ReadAllBytes("C:\file.png"), "image/png")'добавляем файл в запрос
  Dim result As String = w.ExecuteString() 'выполняем запрос
  Console.WriteLine(result) 'выводим в консоль ответ сервера
End Using
В примере выше, файл отправляется на страничку http://example.com/upload.php.
Имя параметра myfile, это значит, что в коде на сервере файл нужно искать:
// для PHP
$_FILES["myfile"]
' для ASP (.NET)
Request.Files("myfile")
Вместо myfile можно написать любое другое имя параметра, которое будет обрабатывать сервер.
Сервер в ответ может вернуть ссылку на файл, в виде обычного текста, это самый простой вариант.

Что касается реализации в Хитром стрелке, то отправку файла нужно делать в отдельном потоке, по аналогии с отправкой на сервер FoxTools.ru и ZzWeb.ru.
Вот простой пример отправки файла в отдельном потоке:
Private Sub SendKudaUgodno() 'это может быть, например, обработчик нажатия кнопки
    Dim t As New Thread(AddressOf SendKudaUgodno_Start)'создаем поток
    t.IsBackground = True 
    t.Start()'запускаем поток
End Sub

Private Sub SendKudaUgodno_Start()
    Using w As New FoxTools.Lib.Net.Web()
      w.Method = [Lib].Net.Enums.HttpMethod.POST
      w.Url = "http://example.com"
      w.ContentType = "multipart/form-data" 'важно, если указать неверно, то сервер может не понять, что ему суют
      w.Queries.AddFile("myfile", "test.png", GetImageBuffer(), "image/png")'снимок экрана в виде массива байт можно получить при помощи функции GetImageBuffer()
      Dim result As String = w.ExecuteString()
      ShowResultOfSending(result)
    End Using
End Sub
Как видите, все очень просто.
 
Страница: 1 + Добавить ответ | + Создать новую тему