Действительно ли возможно “обмануть” PrintScreen, выгрузить содержание моей формы с чем-то еще перед получением?

У меня есть определенная проблема.

В более ранней версии нашего продукта у нас было окно сообщения об ошибке (последнее средство, необработанное исключение), который показал сообщение об исключении, тип, отслеживание стека + различные остатки информации.

Это окно было printscreen-дружественным, в том, что, если пользователь просто сделал printscreen-получение, и послал нам по электронной почте снимок экрана, у нас было почти все, что мы должны были начать диагностировать проблему.

Однако форму считали слишком технической и "страшной" для обычных пользователей, таким образом, она была снижена к более дружественной, все еще показав сообщение об ошибке, но не отслеживание стека и некоторые более окровавленные детали, которые я все еще хотел бы получить. Кроме того, форма была добавлена возможности пользования электронной почтой нам текстовый файл, содержащий все, что мы имели, прежде + много других технических деталей также, в основном все нам нужно.

Однако пользователи все еще используют PrintScreen для получения содержания формы и электронной почты, что назад нам, что означает, я теперь имею меньше, чем оптимальный объем информации для продолжения.

Таким образом, я задавался вопросом. Для меня было бы возможно предварительно представить битовый массив тот же размер как моя форма со всем, в чем я нуждаюсь на нем, обнаруживаю, что PrintScreen был поражен, и быстро выгрузите содержание формы с моим битовым массивом перед получением, и затем обратно снова впоследствии?

И перед высказыванием, "просто обучают пользователей", да, это не собирается работать. Они не отсутствуют пользователи, они - пользователи в нашем клиентском месте, таким образом, мы действительно не можем сказать им высохшему все так очень.

Или, запрет этого, там способ для меня обнаружить PrintScreen, сказать Windows игнорировать его и вместо этого реагировать на него, путем дампа aformentioned, предварительно представленного битовым массивом на буфер обмена, готовый к размещению в электронное письмо?

Код является C# 3.0 в.NET 3.5, если это имеет значение, но указатели для чего-то для взгляда на достаточно хороши.

Наше окно сообщения об ошибке имеет эти возможности:

  • Покажите снимок экрана, который был сделан, когда ошибка произошла (содержит все открытые окна программы в то время, прежде чем ошибочное диалоговое окно показали),
  • Покажите текстовый файл, содержащий каждую окровавленную деталь, о которой мы можем думать (но никакой чувствительный материал)
  • Сохраните вышеупомянутые два файла к диску для последнего присоединения к электронному письму или этажерке пользователем
  • Отправка вышеупомянутых двух файлов нам по электронной почте, или путем открытия нового случая поддержки или введения существующего номера случая поддержки для добавления большей информации к нему
  • Проигнорируйте проблему и надейтесь, что она уходит (возвратитесь к приложению),
  • Выйдите из приложения (последнее средство)

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

5
задан miken32 23 February 2014 в 00:49
поделиться

4 ответа

Разве нельзя полностью отключить кнопку Print Screen, когда всплывающее окно с ошибкой активно? Сделайте так, чтобы он отображал сообщение типа «Пожалуйста, используйте хорошо видимую кнопку в середине экрана, чтобы сообщить об ошибке». Я согласен, что это нарушает ожидаемую функциональность, но если ваши пользователи действительно настолько глупы, что вы можете сделать ...

В качестве альтернативы, он может автоматически сообщать об ошибках (или хранить данные локально, чтобы их можно было получить позже, если вы не можете отправить без запроса по какой-либо причине), не спрашивая пользователя. Если вы хотите иметь возможность соединять распечатанные снимки экрана с подробными данными об ошибках, попросите его отправить уникальный идентификатор с данными, которые также отображаются в углу всплывающего окна.

1
ответ дан 14 December 2019 в 19:05
поделиться

Один вариант: поместите трассировку стека и другие страшные вещи на экран ошибки, используя небольшой шрифт с низкой контрастностью - например, темно-серый на светло-сером - так что пользователь на самом деле его даже не видит, но экран печати фиксирует это.

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

2
ответ дан 14 December 2019 в 19:05
поделиться

Это в теории... я думаю, что лучший способ справиться с этим

  • Перехватить WM_PRINT сообщение или внедрить его в свой процесс... см. эту статью здесь
  • Установите общесистемный крючок клавиатуры и перехватите клавишу на экране печати и поменяйте ее местами с содержимым перед захватом. Теперь я могу указать вам на несколько мест для этого, здесь на CodeProject, и здесь также, клавиатурный шпион, и, наконец, глобальный Хук мыши и клавиатуры на CodeProject.

Теперь, как только вы перехватите экран печати, вызовите сообщение WM_PRINT, захватив содержимое, которое вы хотите захватить.

Я знаю, что это кратко и коротко, но я надеюсь, что это должно поставить вас на лад.

1
ответ дан 14 December 2019 в 19:05
поделиться

А как насчет того, чтобы предложить им кнопку «Печать экрана», которая выполняет эти действия, а также отображает экран печати? Если вы привязаны к этому методу, когда ваши клиенты отправляют сведения об ошибке, это может быть более простой путь.

Из моего комментария ниже для упрощения справки (выглядит полезным, возможно):

codeproject.com/KB/cs/PrintScreen.aspx

1
ответ дан 14 December 2019 в 19:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: