Как эта оверлейная (?) Форма работает в JING

Хорошо, кто-нибудь может объяснить, как Jing делает снимки экрана с этой оверлейной формой? Похоже, что он делает снимок во весь экран и записывает все видимые дескрипторы окна и позволяет вам выбрать в форме определенный hwnd. может быть правдой? если есть, каковы большие шаги для достижения этого? Может быть простой Picturebox или без пользовательского элемента управления, у меня нет шанса заморозить экран во время съемки экрана?

Спасибо!

1 ответ

Решение

Я недостаточно знаком с Jing, чтобы точно знать, что он использует. Но есть два основных метода. Один из них, как вы упоминаете, захватить экран и отобразить его в самой верхней форме без полей. Снайперский инструмент Vista/Win7 работает именно так. Вы найдете код, необходимый для начала, в моем ответе в этой теме.

Другой, возможно, более вероятно, используемый Jing, похож на то, что делает Spy++, позволяя пользователю перемещать мышь и рисовать прямоугольник выбора вокруг окна. Его преимущество в том, что он может работать с изменением размера или исчезновением окон, пока у вас запущен инструмент. Вы реализуете его, используя верхнюю форму размером экрана, для которой свойству TransparencyKey установлено значение BackColor. Фуксия является популярным выбором. Вы можете рисовать на этой форме с помощью метода OnPaint(), рисунок появляется поверх всех окон. Вам понадобится P/Invoke (GetWindow), чтобы выполнить итерацию нижележащих окон в их Z-порядке, чтобы узнать, на какое окно указывает пользователь. GetWindowRect(), чтобы получить прямоугольник окна. Плюс немного хлопот, чтобы иметь дело с Аэро, лежащим около размера границы.

Вы можете найти пример кода для начала работы с этим методом в моем ответе в этой теме.

Другие вопросы по тегам