Chestia cu butonul printscreen e complicatie. Totul e foarte simplu, se poate face cu API-ul BitBlt() care face un transfer de blocuri de biti de la un device context la altul. Asta inseamna ca avem nevoie de device context-ul 'ecranului' / a ce se vede pe ecran. Asta e desktop window-ul, folosim API-ul GetDesktopWindow() ca sa obtinem handle-ul ferestrei desktop-ului (nu Desktop-ul ala pe care ai wallpaper). Insa noi avem nevoie de device context-ul ferestrei respective, il aflam pasand handle-ul ferestrei API-ului GetWindowDC() si am obtinut device context-ul desktop-ului. Cream un bitmap, prin orice metoda, depinde de limbajul de programare asta, si facem rost de device context-ul bitmap-ului respectiv (daca ai vreo componenta de genul TBitmap poti accesa proprietatile Canvas apoi Handle ca sa obtii device context-ul care te intereseaza). Dupa ce ai cele 2 device context-uri (al desktop-ului si al bitmapului in care vrei sa stochezi screenshot-ul), folosesti API-ul BitBlt(), la parametrii la destination device context pui device context-ul bitmapului, la source device context pui device context-ul desktopului, la raster operation code pui SRCCOPY ( $20 ) ca sa copie pur si simplu continutul fara sa efectueze alta operatie asupra bitilor, iar la ceilalti parametrii e simplu.