Как эта оверлейная (?) Форма работает в JING - PullRequest
0 голосов
/ 14 июля 2010

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

Спасибо!

1 Ответ

1 голос
/ 14 июля 2010

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

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

Образец кода, с которого можно начать работу над этой техникой, в моем ответе в этой теме .

...