Code archives/Graphics/GetDesktop
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
Make a snapshot of users desktop and create/update a texture/image. eg. tex = GetDesktop() ; creates a texture image = GetDesktop(1) ; creates an image GetDesktop(0,tex) ; updates a texture GetDesktop(1,image) ; updates an image | |||||
Const SRCCOPY = $CC0020 Const CF_BITMAP = 2 Const SW_HIDE = 0 Const SW_SHOW = 5 Function GetDesktop(flag=0,update=0) ; ADAmor ZILTCH 2003 ; ; This command must come after your GRAPHICS(3D) x,y command. ; ; flag 0 = create texture ; 1 = create image ; ; if update is not 0 then it is the tex/image to update. DeskHwnd = GetDesktopWindow() ; Get screen coordinates fwidth = GetSystemMetrics%(0) ;RectWin\rightR - RectWin\leftR fheight = GetSystemMetrics%(1) ;RectWin\bottomR - RectWin\topR BlitzHwnd = GetActiveWindow() ShowWindow(BlitzHwnd,SW_HIDE) ; Get the device context of Desktop and allocate memory hdc = GetDC(DeskHwnd) Blitzhdc = GetDC(BlitzHwnd) ; Copy data BitBlt(Blitzhdc, 0, 0, fwidth, fheight, hdc, 0,0, SRCCOPY) ; Clean up handles ReleaseDC(DeskHwnd, hdc) ReleaseDC(BlitzHwnd, Blitzhdc) ShowWindow(BlitzHwnd,SW_SHOW) ; Create/update texture or image Select flag Case 0 If update = 0 Then tex=CreateTexture(fwidth,fheight) Else tex=update End If CopyRect 0,0,fwidth,fheight,0,0,FrontBuffer(),TextureBuffer(tex) Return tex Case 1 If update = 0 Then image=CreateImage(fwidth,fheight) Else image=update End If CopyRect 0,0,fwidth,fheight,0,0,FrontBuffer(),ImageBuffer(image) Return image End Select End Function ;---------------- end code Lines needed in Userlib: User32.decls FindWindow%( class$,Text$ ):"FindWindowA" ShowWindow(hwnd%,nCmdShow%) GetActiveWindow%() GetDC%(hWnd% ) ReleaseDC%(hWnd%,hDC%) GetDesktopWindow%() GetSystemMetrics%(nIndext%) Lines needed in Userlib: Gdi32.decls BitBlt%(hDestDC%,X%,Y%,nWidth%,nHeight%,hSrcDC,XSrc,YSrc,dwRop) |
Comments
| ||
Thanks! Works Great! |
| ||
Doesn't work. |
| ||
Is this BlitzPlus? It doesn't work in Blitz3D. |
| ||
Oops. Just kidding. It works. You need to finish the decls part:Lines needed in Userlib: User32.decls FindWindow%( class$,Text$ ):"FindWindowA" ShowWindow(hwnd%,nCmdShow%):"ShowWindow" GetActiveWindow%():"GetActiveWindow" GetDC%(hWnd% ):"GetDC" ReleaseDC%(hWnd%,hDC%):"ReleaseDC" GetDesktopWindow%():"GetDesktopWindow" GetSystemMetrics%(nIndext%):"GetSystemMetrics" Lines needed in Userlib: Gdi32.decls BitBlt%(hDestDC%,X%,Y%,nWidth%,nHeight%,hSrcDC,XSrc,YSrc,dwRop):"BitBlt" The resolution NEEDS to be in fullscreen and the SAME SIZE as the desktop. And Debug off. |
| ||
It says there needs to be a lib. |
| ||
The DECLS file should look like this:.lib "user32.dll" FindWindow%(class$,Text$):"FindWindowA" ShowWindow(hwnd%,nCmdShow%):"ShowWindow" GetActiveWindow%():"GetActiveWindow" GetDC%(hWnd% ):"GetDC" ReleaseDC%(hWnd%,hDC%):"ReleaseDC" GetDesktopWindow%():"GetDesktopWindow" GetSystemMetrics%(nIndext%):"GetSystemMetrics" .lib "gdi32.dll" BitBlt%(hDestDC%,X%,Y%,nWidth%,nHeight%,hSrcDC,XSrc,YSrc,dwRop):"BitBlt" |
| ||
So this takes a picture of what the user of the computer is seeing on his monitor? If not, is there a way to do that? |
| ||
ok so I cant get this to work on vista? anyone else have this problem |
| ||
i cant get it to work either. maybe the user32.dll is different? |
Code Archives Forum