Скриншот окна с использованием WinAPI - PullRequest
2 голосов
/ 16 мая 2010

Как сделать скриншот окна программы, используя WinAPI & C #?

Я отправляю WM_PAINT (0x000F) сообщение в окно, которое я хочу сделать на скриншоте, обрабатывать wParam = HDC, но в скриншоте нет скриншота Если я отправляю сообщение WM_CLOSE, все работает (целевое окно закрывается). Что я делаю не так с WM_PAINT? Может быть, HDC не является компонентом PictureBox (WinForms)? Постскриптум GetLastError() == ""

[DllImport("User32.dll")]
public static extern Int64 SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
  .....

SendMessage(targetWindowHandle, 0x000F, pictureBox.Handle, IntPtr.Zero);

Ответы [ 3 ]

2 голосов
/ 16 мая 2010

Вы также можете сделать скриншот, используя чисто управляемый код без необходимости взаимодействия. Следующий код сделает снимок области экрана 100x100, конечно, вы можете настроить на весь экран. Ключевой функцией является Graphics.CopyFromScreen

  Bitmap bmp = new Bitmap(100,100);
  using (Graphics g = Graphics.FromImage(bmp))
  {
    g.CopyFromScreen(0, 0, 0, 0, new Size(100, 100));        
  }
  pictureBox1.Image = bmp;
1 голос
/ 16 мая 2010
1 голос
/ 16 мая 2010

pictureBox.Handle это дескриптор окна, а не дескриптор постоянного тока. Есть несколько руководств онлайн для создания скриншотов. Один из них здесь . Смотрите также ответ @In silico.

...