Avatar billede glenn007 Nybegynder
13. oktober 2008 - 17:54 Der er 7 kommentarer

tage screenshot fra bestemt sted

Hej hej

er det muligt at tage et screenshot fra bestemt sted på skærmen kun.
Avatar billede bertelbrander Novice
13. oktober 2008 - 19:46 #1
Der findes antageligt et par tusinde applikationer "derude", det letteste er nok at bruge en af dem.

Men det er også rimeligt trivielt at lave et program selv, jeg har nok noget til at ligge, der kan bruges som en start.
Avatar billede bertelbrander Novice
13. oktober 2008 - 23:30 #2
Jeg fandt en stump kode der tager et screen dump og gemmer det i en fil.
Så mangler du bare at lave det om til kun at tage et dump af den del du er interesseret i.

#include <windows.h>
#include <iostream>
#include <fstream>

BITMAPINFOHEADER WriteHeader(std::ostream &os, int aWidth, int aHeight, WORD aBitPixel)
{
  BITMAPFILEHEADER BitmapFileHeader;
  BITMAPINFOHEADER BitmapInfoHeader;
  unsigned int WordsPerLine = (aWidth*aBitPixel + 31)/32;
  BitmapFileHeader.bfType = (('M' << 8) | 'B');
  BitmapFileHeader.bfSize = sizeof(BitmapFileHeader) + sizeof(BitmapInfoHeader) + 4*WordsPerLine*aHeight;
  BitmapFileHeader.bfReserved1 = 0;
  BitmapFileHeader.bfReserved2 = 0;
  BitmapFileHeader.bfOffBits = 0x36 + 8;

  BitmapInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
  BitmapInfoHeader.biWidth = aWidth;
  BitmapInfoHeader.biHeight = aHeight;
  BitmapInfoHeader.biPlanes = 1;
  BitmapInfoHeader.biBitCount = aBitPixel;
  BitmapInfoHeader.biCompression = BI_RGB;
  BitmapInfoHeader.biSizeImage = 0;
  BitmapInfoHeader.biXPelsPerMeter = 0;
  BitmapInfoHeader.biYPelsPerMeter = 0;
  BitmapInfoHeader.biClrUsed = 0;
  BitmapInfoHeader.biClrImportant = 0;
  os.write((char *)&BitmapFileHeader, sizeof(BitmapFileHeader));
  os.write((char *)&BitmapInfoHeader, sizeof(BitmapInfoHeader));
  return BitmapInfoHeader;
}

int main()
{
  HDC dc = GetDC(0);
  int Width = GetDeviceCaps(dc, HORZRES);
  int Height = GetDeviceCaps(dc, VERTRES);

  HDC MemDc = CreateCompatibleDC(dc);
  HBITMAP BitMap = CreateCompatibleBitmap(dc, Width, Height);
  SelectObject(MemDc, BitMap);
  BitBlt(MemDc, 0, 0, Width, Height, dc, 0, 0, SRCCOPY);
  std::ofstream File("screen.bmp", std::ios::binary);
  BITMAP Bm;
  GetObject(BitMap, sizeof(Bm), &Bm);
  BITMAPINFOHEADER Header = WriteHeader(File, Width, Height, Bm.bmBitsPixel);
  char *Buffer = new char [Width*Height*Bm.bmBitsPixel/8];
  GetDIBits(MemDc, BitMap, 0, Height, Buffer, (BITMAPINFO *)&Header, DIB_RGB_COLORS);
  File.write(Buffer, Height*Width*Bm.bmBitsPixel/8);

  ReleaseDC(0, dc);
  ReleaseDC(0, MemDc);
  delete [] Buffer;
  DeleteObject(BitMap);
}
Avatar billede gunfar Nybegynder
14. oktober 2008 - 00:37 #3
Avatar billede glenn007 Nybegynder
14. oktober 2008 - 15:13 #4
bertel brander. det var lige det jeg var på jagt efter mange tak.
Avatar billede glenn007 Nybegynder
23. december 2008 - 09:58 #5
hmm den skriver en fejl i denne linie 

std::ofstream File("screen.bmp", std::ios::binary);

-------------
er det ikke ren c#

2 fejl.
Error    1    Expected ; or = (cannot specify constructor arguments in declaration)   


og nr. 2

¨Error    2    Syntax error, '.' expected
Avatar billede glenn007 Nybegynder
23. december 2008 - 10:37 #6
ARg så lige jeg har posted dette i c++ kategorien ... undskyld stiller samme spørgsmål i C# i stedet... beklager ulejligheden gutter
Avatar billede gunfar Nybegynder
23. december 2008 - 11:59 #7
du kan også tage et printschreen
og ligge det i paint hvorefter du kan redigere i billedet som du ønsker det færdigt
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester