2013-07-19 2 views
8

Нам нужен скриншот нашего приложения для модульного теста. CaptureScreen() и CopyFromScreen() каким-то образом игнорируют приложение и возвращают фотографии пустого рабочего стола. Таким образом, мы написали это фальсифицировать PrtScn нажатие клавиши:Автоматическое нажатие клавиши «PrtScn» действует как «Alt + PrtScrn»

public static Bitmap GetAltScreenshot() 
{ 
    Clipboard.Clear(); 
    SendKeys.SendWait("{PRTSC}"); 
    while (!Clipboard.ContainsImage()) 
    { 
     Thread.Sleep(500); 
    } 
    return new Bitmap(Clipboard.GetImage()); 
} 

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

Почему это возвращает снимок только сфокусированного окна, а не всего монитора?

+0

Вы должны посмотреть: http://stackoverflow.com/questions/5049122/how-to-capture-the-screen-shot-using-net –

+0

@GeorgeJohnston Поверьте, мы пробовали использовать 'g.CopyFromScreen' раньше, а также любой другой метод захвата, который мы могли бы найти. Все они отлично работали на моей машине, но дали отличные результаты на других машинах внутри компании. – 4444

+0

Может ли быть так, что класс SendKeys просто интерпретирует ключевую строку «{PRTSC}» для обозначения комбинации клавиш Alt + PrtScn? Кроме того, вы могли бы просто вручную установить фокус в целом screeen? [link] (http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.sendwait.aspx) в первой ноте. –

ответ

5

Существует, по сути, «причина», поверните на MSDN Library article, который документирует ключевые сокращения, которые вы можете использовать. Обратите внимание на запись для PRINT SCREEN:

{PRTSC} (зарезервировано для будущего использования)

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

Обратите внимание на примечание о записи <appSettings>, которое вы можете добавить в свой файл .config, далее на той же странице MSDN. Я подозреваю, но не знаю, факт, что метод SendInput более надежный.

+1

Да, я знаю об этой «причине» (На самом деле, я думаю, что старый пост от вас указал мне туда), но мне было более или менее любопытно узнать внутреннюю работу этой тайны. Полагаю, это так же, как Microsoft хочет сообщить нам об этом. – 4444

+0

Я действительно не знаю причину. Крючок для ведения журналов, который они используют без приложения, является, erm, причудливым. –

Смежные вопросы