Ekran görüntüsünün kopyasi

Başlatan picusta, 15 Eylül 2007, 17:27:58

picusta

Merhaba,
Visual C++ ile yazilmis bir programda ekran görüntüsünün kopyasini nasil alabilirim (sadece program penceresi değil bütün ekran)?
Bunun için hangi API veya MFC kullanilir (.Net, C# istemiyorum)?
Aslinda istedigim sey su : kendi programimdan baska bir programi baslatmak, bu program ekranin tamamini kaplayacak ve ben ekranin görüntüsünü almak istiyorum (mesela basladiktan 5 sn. sonra).

Baska bir soru ise, nasil maskeleme yapabilirim? bu sefer tam tersi, benim pencerem devamli önde olacak, penceremin sadece belli bir alani seffaf olacak ve arkadaki program görünecek.


picusta

Tam yapmak istedigim değil, çünkü burada kopyalanan kullanicinin penceresi. Benim istedigim tam ekran (Printscreen) yani baska bir uygulamanin penceresi. Peki maskeleme nasil olmali? Penceremiz hep en önde olsun. Daha sonra bir bölümü seffaf olsun.

picusta

HDC hdc = GetDC(NULL);


CDIBSectionLite sinifini kullanarak isler kolaylasiyor, hele WIN CE altinda yaziyorsaniz, birçok WIN32 GDI API'si olmadigindan ilaç gibi geliyor (mesela GetDIBits yok).
http://www.codeproject.com/bitmap/dibsection.asp

örnek : Ekrandan görüntüyü alip dosyaya kaydediyor:
int iWidth, iHeight;


	CBitmap bitmap;
	CWindowDC dc(GetDesktopWindow());
	CDC memDC, *m_cdc;
	
	CDIBSectionLite myBitmap;

	memDC.CreateCompatibleDC(&dc);


	iWidth = GetSystemMetrics (SM_CXSCREEN) ;  // Height width 
	iHeight = GetSystemMetrics (SM_CYSCREEN) ;
	
	

	bitmap.CreateCompatibleBitmap(&dc, iWidth,iHeight );

	CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);
	memDC.BitBlt(0, 0, iWidth,iWidth, &dc, 0, 0, SRCCOPY);

	memDC.SelectObject(pOldBitmap);

myBitmap.SetBitmap(bitmap);
myBitmap.Save(csFilename);