Всем привет, бывают моменты, тебе нужно переписать, что-то или проверить информацию, и не зная досконально Windows люди мучаются..
Люди начинают переключаться с окна на окно, с вкладки на вкладку и думают:
Эх, была бы программа, которая выводит нужную область в отдельное маленькое окно, что бы не надо было прыгать туды - сюды.
Сделать сделаем, была бы идея.
И так, первая часть цикла статей "Тупые Идеи" - > Окно с Информацией.
Изучая программу LightShot, я задумывался: А почему они не добавят такую функцию? Писать и делать её не долго, а какие возможности для обычных офисных людей/игроманов, которые любят крафтить, загуглить загуглили, а вот весь рецепт не запомнишь.
Программа, LightShot по моим наблюдениям, при нажатии на PrnScr полностью раскрывается прозрачная форма и её фон - Это скриншот. Потом на форме мы выделяем нужную нам область и сохраняем.
В теории все легко и просто, но нам нужно помимо сохранения нужной области, выводить её на форму под кодовым именем "Помощник", что бы форма подстраивалась под размеры изображения.
И так, так - как Я и сам не True Programmer in the World, а жалкий Любитель(с) Один из технический программистов, что собеседовал меня
Надо научиться выделять область, учитывая, что я делаю на WPF, нам нужен будет Canvas, на котором мы будем рисовать. Окей, Canvas у Нас есть, так же настраиваем окно, убираем у него все рамки, делаем его более менее прозрачным.
Отлично, у нас есть область для работы. Теперь попробуем создать на Canvas область, пусть это будет квадрат, который создается на позиции, куда мы кликнули мышкой. Точнее он будет свое начало брать от позиции, куда мы кликнули.
И увидим, забавный результат.
Покликал по нашей форме, вон сколько квадратов получилось. Отлично, область выделяется, теперь нужно научиться её растягивать и в идеале конечно же передвигать.
По логике, что бы растягивать форму, потребуется получать информацию о начальной точки и от этой точки тянуть наш прямоугольник, для этого сделаем шаблон для прямоугольника.
Отлично у нас имеется шаблон, дальше что, а дальше нам нужно создать событие, которое будет реагировать на нашу мышку.
Создадим нужны нам переменные.
Насчет последнего, требуется скачать Hook Key, без него никак, через visual studio ищем и качаем.
Отлично, теперь создадим логику, что будет происходить, при клике на область, куда уже загрузился ScreenShot.
В общем говоря, логика готова, теперь мы можем создавать область выделения любого размера.
И передвигать её.
Отлично, теперь добавим возможность делать ScreenShot и вырезать нужную нам часть, хе-хе-хе, опять Вам скриншот :)
Ну вот и все в принципе. Основная часть сделана, да все сделано через одну точку дракона под именем Антарас, но сделано.
Теперь нам требуется, полученный кусок скрина вывести в форму, которая будет поверх других форм (* ^ ω ^)
Создаем новую форму, добавляем на него Image контрол и вот такой код, на момент загрузки формы.
И так же добавляем кусок кода в обработчик _Grid_MouseUp.
Отлично, теперь все будет работать(пусть и не идеально)
Готово, можно кушать тестировать.
Запускаем программу, окно которое нам нужно заскриншотить и обрезать.
Обрезаем.
Открывается вторая форма, которая поверх всех окон и мы можем стырить позаимствовать чужой код.
Да не спорю, стырил код я для JS :D но принцип понятен, теперь - то легче станет жить :D
Финиш
Внимание - Данная реализация программы требует доработки, не адекватно порой работает выделение нужной области, так же происходит ошибка с повторным использованием программы, каждый раз нужно перезапускать её.
Решение данных мелких багов - это быстро.
Главное прототип программы сделан, такая себе альфа-версия программы, она работает и её можно дорабатывать.
Надеюсь у меня появится временя, я её доработаю и добавлю в пачку программ, которые никому не нужны, но иногда могут пригодится для рутиной работы.
Исходный код и программу можно скачать тут: Скачать
Отдельное спасибо Google и stackoverflow, многие вещи можно просто не знать, а гугл и stackoverflow.com помогают найти нужную инфу и ответы на вопросы.
И помните! Лайк + подписка, мотивируют лучше чем найденная ";"