/** * Gets the icon that corresponds to a given icon handler. * * @param hIcon * Handler to the icon to get * @return The icon that corresponds to a given icon handler */ public static BufferedImage getIcon(final HICON hIcon) { final int width = ICON_SIZE; final int height = ICON_SIZE; final short depth = ICON_DEPTH; final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); final Memory lpBitsColor = new Memory(width * height * depth / ICON_BYTE_SIZE); final Memory lpBitsMask = new Memory(width * height * depth / ICON_BYTE_SIZE); final BITMAPINFO info = new BITMAPINFO(); final BITMAPINFOHEADER hdr = new BITMAPINFOHEADER(); info.bmiHeader = hdr; hdr.biWidth = width; hdr.biHeight = height; hdr.biPlanes = 1; hdr.biBitCount = depth; hdr.biCompression = WinGDI.BI_RGB; final HDC hDC = User32.INSTANCE.GetDC(null); final ICONINFO piconinfo = new ICONINFO(); User32.INSTANCE.GetIconInfo(hIcon, piconinfo); GDI32.INSTANCE.GetDIBits(hDC, piconinfo.hbmColor, 0, height, lpBitsColor, info, WinGDI.DIB_RGB_COLORS); GDI32.INSTANCE.GetDIBits(hDC, piconinfo.hbmMask, 0, height, lpBitsMask, info, WinGDI.DIB_RGB_COLORS); int r, g, b, a, argb; int x = 0, y = height - 1; for (int i = 0; i < lpBitsColor.size(); i = i + 3) { b = lpBitsColor.getByte(i) & 0xFF; g = lpBitsColor.getByte(i + 1) & 0xFF; r = lpBitsColor.getByte(i + 2) & 0xFF; a = 0xFF - lpBitsMask.getByte(i) & 0xFF; argb = a << 24 | r << 16 | g << 8 | b; image.setRGB(x, y, argb); x = (x + 1) % width; if (x == 0) { y--; } } User32.INSTANCE.ReleaseDC(null, hDC); GDI32.INSTANCE.DeleteObject(piconinfo.hbmColor); GDI32.INSTANCE.DeleteObject(piconinfo.hbmMask); return image; }
/** * @param args (ignored) */ public static void main(String[] args) { System.out.println("Installed Physical Monitors: " + User32.INSTANCE.GetSystemMetrics(WinUser.SM_CMONITORS)); User32.INSTANCE.EnumDisplayMonitors(null, null, new MONITORENUMPROC() { @Override public int apply(HMONITOR hMonitor, HDC hdc, RECT rect, LPARAM lparam) { enumerate(hMonitor); return 1; } }, new LPARAM(0)); }
public BufferedImage capture(final HWND hWnd) { final HDC hdcWindow = User32.INSTANCE.GetDC(hWnd); final HDC hdcMemDC = GDI32.INSTANCE.CreateCompatibleDC(hdcWindow); final RECT bounds = new RECT(); User32Extra.INSTANCE.GetClientRect(hWnd, bounds); final int width = bounds.right - bounds.left; final int height = bounds.bottom - bounds.top; if (width * height <= 0) { return null; } final HBITMAP hBitmap = GDI32.INSTANCE.CreateCompatibleBitmap(hdcWindow, width, height); final HANDLE hOld = GDI32.INSTANCE.SelectObject(hdcMemDC, hBitmap); GDI32Extra.INSTANCE.BitBlt(hdcMemDC, 0, 0, width, height, hdcWindow, 0, 0, WinGDIExtra.SRCCOPY); GDI32.INSTANCE.SelectObject(hdcMemDC, hOld); GDI32.INSTANCE.DeleteDC(hdcMemDC); final BITMAPINFO bmi = new BITMAPINFO(); bmi.bmiHeader.biWidth = width; bmi.bmiHeader.biHeight = -height; bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biBitCount = 32; bmi.bmiHeader.biCompression = WinGDI.BI_RGB; final Memory buffer = new Memory(width * height * 4); GDI32.INSTANCE.GetDIBits(hdcWindow, hBitmap, 0, height, buffer, bmi, WinGDI.DIB_RGB_COLORS); final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); image.setRGB(0, 0, width, height, buffer.getIntArray(0, width * height), 0, width); GDI32.INSTANCE.DeleteObject(hBitmap); User32.INSTANCE.ReleaseDC(hWnd, hdcWindow); return image; }
public static BufferedImage getScreenshot( final Rectangle bounds ) { HDC windowDC = GDI.GetDC( USER.GetDesktopWindow() ); HBITMAP outputBitmap = GDI.CreateCompatibleBitmap( windowDC, bounds.width, bounds.height ); try { HDC blitDC = GDI.CreateCompatibleDC( windowDC ); try { HANDLE oldBitmap = GDI.SelectObject( blitDC, outputBitmap ); try { GDI.BitBlt( blitDC, 0, 0, bounds.width, bounds.height, windowDC, bounds.x, bounds.y, GDI32.SRCCOPY ); } finally { GDI.SelectObject( blitDC, oldBitmap ); } BITMAPINFO bi = new BITMAPINFO( 40 ); bi.bmiHeader.biSize = 40; boolean ok = GDI.GetDIBits( blitDC, outputBitmap, 0, bounds.height, (byte[]) null, bi, WinGDI.DIB_RGB_COLORS ); if ( ok ) { BITMAPINFOHEADER bih = bi.bmiHeader; bih.biHeight = -Math.abs( bih.biHeight ); bi.bmiHeader.biCompression = 0; return bufferedImageFromBitmap( blitDC, outputBitmap, bi ); } else return null; } finally { GDI.DeleteObject( blitDC ); } } finally { GDI.DeleteObject( outputBitmap ); } }
public MonitorControllerJna() { System.out.println("Monitors: " + User32.INSTANCE.GetSystemMetrics(User32.SM_CMONITORS)); User32.INSTANCE.EnumDisplayMonitors(null, null, new MONITORENUMPROC() { @Override public int apply(HMONITOR hMonitor, HDC hdc, RECT rect, LPARAM lparam) { System.out.println("Monitor handle: " + hMonitor); MONITORINFOEX info = new MONITORINFOEX(); User32.INSTANCE.GetMonitorInfo(hMonitor, info); System.out.println(info.rcMonitor); DWORDByReference pdwNumberOfPhysicalMonitors = new DWORDByReference(); Dxva2.INSTANCE.GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor, pdwNumberOfPhysicalMonitors); int monitorCount = pdwNumberOfPhysicalMonitors.getValue().intValue(); System.out.println("Physical monitors for " + hMonitor + ": " + monitorCount); PHYSICAL_MONITOR[] physMons = new PHYSICAL_MONITOR[monitorCount]; Dxva2.INSTANCE.GetPhysicalMonitorsFromHMONITOR(hMonitor, monitorCount, physMons); for (PHYSICAL_MONITOR mon : physMons) { String desc = new String(mon.szPhysicalMonitorDescription); monitors.add(new MonitorJna(mon.hPhysicalMonitor, desc)); } return 1; } }, new LPARAM(0)); }
public static BufferedImage getImageByHICON(final int width, final int height, final HANDLE hicon, final BITMAPINFOHEADER info) { final IconInfo iconinfo = new org.appwork.jna.winapi.structs.IconInfo(); try { // GDI32 g32 = GDI32.INSTANCE; // get icon information if (!User.I.GetIconInfo(new HICON(hicon.getPointer()), iconinfo)) { return null; } final HWND hwdn = new HWND(); final HDC dc = User32.INSTANCE.GetDC(hwdn); if (dc == null) { return null; } try { final int nBits = width * height * 4; // final BitmapInfo bmi = new BitmapInfo(1); final Memory colorBitsMem = new Memory(nBits); // // Extract the color bitmap final BITMAPINFO bmi = new WinGDI.BITMAPINFO(); bmi.bmiHeader.biWidth = width; bmi.bmiHeader.biHeight = -height; bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biBitCount = 32; bmi.bmiHeader.biCompression = WinGDI.BI_RGB; GDI32.INSTANCE.GetDIBits(dc, iconinfo.hbmColor, 0, height, colorBitsMem, bmi, WinGDI.DIB_RGB_COLORS); // g32.GetDIBits(dc, iconinfo.hbmColor, 0, size, colorBitsMem, // bmi, // GDI32.DIB_RGB_COLORS); final int[] colorBits = colorBitsMem.getIntArray(0, width * height); if (info.biBitCount < 32) { final Memory maskBitsMem = new Memory(nBits); // // Extract the mask bitmap GDI32.INSTANCE.GetDIBits(dc, iconinfo.hbmMask, 0, height, maskBitsMem, bmi, WinGDI.DIB_PAL_COLORS); // g32.GetDIBits(dc, iconinfo.hbmMask, 0, size, // maskBitsMem, // bmi, // // GDI32.DIB_RGB_COLORS); final int[] maskBits = maskBitsMem.getIntArray(0, width * height); // // // Copy the mask alphas into the color bits for (int i = 0; i < colorBits.length; i++) { colorBits[i] = colorBits[i] | (maskBits[i] != 0 ? 0 : 0xFF000000); } } final BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); bi.setRGB(0, 0, width, height, colorBits, 0, height); return bi; } finally { com.sun.jna.platform.win32.User32.INSTANCE.ReleaseDC(hwdn, dc); } } finally { User32.INSTANCE.DestroyIcon(new HICON(hicon.getPointer())); GDI32.INSTANCE.DeleteObject(iconinfo.hbmColor); GDI32.INSTANCE.DeleteObject(iconinfo.hbmMask); } }
public static BufferedImage getImageByHICON(final int width, final int height, final HANDLE hicon) { final IconInfo iconinfo = new org.appwork.jna.winapi.structs.IconInfo(); try { // GDI32 g32 = GDI32.INSTANCE; // get icon information if (!org.appwork.jna.winapi.user32.User.I.GetIconInfo(new HICON(hicon.getPointer()), iconinfo)) { return null; } final HWND hwdn = new HWND(); final HDC dc = User32.INSTANCE.GetDC(hwdn); if (dc == null) { return null; } try { final int nBits = width * height * 4; // final BitmapInfo bmi = new BitmapInfo(1); final Memory colorBitsMem = new Memory(nBits); // // Extract the color bitmap final BITMAPINFO bmi = new WinGDI.BITMAPINFO(); bmi.bmiHeader.biWidth = width; bmi.bmiHeader.biHeight = -height; bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biBitCount = 32; bmi.bmiHeader.biCompression = WinGDI.BI_RGB; GDI32.INSTANCE.GetDIBits(dc, iconinfo.hbmColor, 0, height, colorBitsMem, bmi, WinGDI.DIB_RGB_COLORS); // g32.GetDIBits(dc, iconinfo.hbmColor, 0, size, colorBitsMem, // bmi, // GDI32.DIB_RGB_COLORS); final int[] colorBits = colorBitsMem.getIntArray(0, width * height); // final Memory maskBitsMem = new Memory(nBits); // // // Extract the mask bitmap // GDI32.INSTANCE.GetDIBits(dc, iconinfo.hbmMask, 0, height, // maskBitsMem, bmi, WinGDI.DIB_PAL_COLORS); // // g32.GetDIBits(dc, iconinfo.hbmMask, 0, size, maskBitsMem, // bmi, // // GDI32.DIB_RGB_COLORS); // final int[] maskBits = maskBitsMem.getIntArray(0, width * // height); // // // Copy the mask alphas into the color bits // for (int i = 0; i < colorBits.length; i++) { // colorBits[i] = colorBits[i] | (maskBits[i] != 0 ? 0 : // 0xFF000000); // } // // Release DC // Main.u32.ReleaseDC(0, dc); // // // Release bitmap handle in icon info // g32.DeleteObject(iconinfo.hbmColor); // add // g32.DeleteObject(iconinfo.hbmMask); // add final BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); bi.setRGB(0, 0, width, height, colorBits, 0, height); return bi; } finally { com.sun.jna.platform.win32.User32.INSTANCE.ReleaseDC(hwdn, dc); } } finally { User32.INSTANCE.DestroyIcon(new HICON(hicon.getPointer())); GDI32.INSTANCE.DeleteObject(iconinfo.hbmColor); GDI32.INSTANCE.DeleteObject(iconinfo.hbmMask); } }
public static BufferedImage _captureAero(HWND hwnd, Rectangle bounds) { //RDW_FRAME | RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW | RDW_ALLCHILDREN int flags = 0x0400 | 0x0001 | 0x0004 | 0x0100 | 0x0080; HWND tagetHwnd = hwnd; HDC windowDC = GDI.GetDC(tagetHwnd); HBITMAP outputBitmap = GDI.CreateCompatibleBitmap(windowDC, bounds.width, bounds.height); try{ HDC blitDC = GDI.CreateCompatibleDC(windowDC); try{ HANDLE oldBitmap = GDI.SelectObject(blitDC, outputBitmap); USER.RedrawWindow(tagetHwnd, null, null, flags); if(USER.PrintWindow(tagetHwnd, blitDC, 1)){ GDI.SelectObject(blitDC, oldBitmap); WinGDI.BITMAPINFO bi = new WinGDI.BITMAPINFO(40); bi.bmiHeader.biSize = 40; boolean ok = GDI.GetDIBits(blitDC, outputBitmap, 0, bounds.height, (byte[]) null, bi, WinGDI.DIB_RGB_COLORS); if (ok) { WinGDI.BITMAPINFOHEADER bih = bi.bmiHeader; bih.biHeight = -Math.abs(bih.biHeight); bi.bmiHeader.biCompression = 0; return bufferedImageFromBitmap(blitDC, outputBitmap, bi); } else { return null; } } } finally{ GDI.DeleteObject(blitDC); } } finally { GDI.DeleteObject(outputBitmap); GDI.DeleteObject(windowDC); } return null; }
public static BufferedImage _capture(HWND hwnd, Rectangle bounds) { HDC windowDC = null; if(hwnd == null){ windowDC = GDI.GetDC(USER.GetDesktopWindow()); } else { windowDC = GDI.GetDC(hwnd); } HBITMAP outputBitmap = GDI.CreateCompatibleBitmap(windowDC, bounds.width, bounds.height); try { WinDef.HDC blitDC = GDI.CreateCompatibleDC(windowDC); try { WinNT.HANDLE oldBitmap = GDI.SelectObject(blitDC, outputBitmap); try { GDI.BitBlt(blitDC, 0, 0, bounds.width, bounds.height, windowDC, bounds.x, bounds.y, GDI32.SRCCOPY); } finally { GDI.SelectObject(blitDC, oldBitmap); } WinGDI.BITMAPINFO bi = new WinGDI.BITMAPINFO(40); bi.bmiHeader.biSize = 40; boolean ok = GDI.GetDIBits(blitDC, outputBitmap, 0, bounds.height, (byte[]) null, bi, WinGDI.DIB_RGB_COLORS); if (ok) { WinGDI.BITMAPINFOHEADER bih = bi.bmiHeader; bih.biHeight = -Math.abs(bih.biHeight); bi.bmiHeader.biCompression = 0; return bufferedImageFromBitmap(blitDC, outputBitmap, bi); } else { return null; } } finally { GDI.DeleteObject(blitDC); } } finally { GDI.DeleteObject(outputBitmap); GDI.DeleteObject(windowDC); } }
boolean BitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, int dwRop);
boolean GetDIBits(HDC dc, HBITMAP bmp, int startScan, int scanLines, byte[] pixels, BITMAPINFO bi, int usage);
boolean GetDIBits(HDC dc, HBITMAP bmp, int startScan, int scanLines, short[] pixels, BITMAPINFO bi, int usage);
boolean GetDIBits(HDC dc, HBITMAP bmp, int startScan, int scanLines, int[] pixels, BITMAPINFO bi, int usage);
private static BufferedImage capture(HWND hWnd) throws WindowNotFoundException { HDC hdcWindow = User32.INSTANCE.GetDC(hWnd); HDC hdcMemDC = GDI32.INSTANCE.CreateCompatibleDC(hdcWindow); RECT bounds = new RECT(); User32Extra.INSTANCE.GetClientRect(hWnd, bounds); int width = bounds.right - bounds.left; int height = bounds.bottom - bounds.top; if(width == 0 || height == 0) throw new peeknick.errormanager.WindowNotFoundException(); HBITMAP hBitmap = GDI32.INSTANCE.CreateCompatibleBitmap(hdcWindow, width, height); HANDLE hOld = GDI32.INSTANCE.SelectObject(hdcMemDC, hBitmap); GDI32Extra.INSTANCE.BitBlt(hdcMemDC, 0, 0, width, height, hdcWindow, 0, 0, WinGDIExtra.SRCCOPY); GDI32.INSTANCE.SelectObject(hdcMemDC, hOld); GDI32.INSTANCE.DeleteDC(hdcMemDC); BITMAPINFO bmi = new BITMAPINFO(); bmi.bmiHeader.biWidth = width; bmi.bmiHeader.biHeight = -height; bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biBitCount = 32; bmi.bmiHeader.biCompression = WinGDI.BI_RGB; Memory buffer = new Memory(width * height * 4); GDI32.INSTANCE.GetDIBits(hdcWindow, hBitmap, 0, height, buffer, bmi, WinGDI.DIB_RGB_COLORS); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); image.setRGB(0, 0, width, height, buffer.getIntArray(0, width * height), 0, width); GDI32.INSTANCE.DeleteObject(hBitmap); User32.INSTANCE.ReleaseDC(hWnd, hdcWindow); return image; }
/** * The SetPixel function sets the pixel at the specified coordinates to the * specified color. * * @param hDC Handle to the device context. * @param x Specifies the x-coordinate, in logical units, of the point to be * set. * @param y Specifies the y-coordinate, in logical units, of the point to be * set. * @param crColor Specifies the color to be used to paint the point. To * create a COLORREF color value, use the RGB macro. * @return If the function succeeds, the return value is the RGB value that * the function sets the pixel to. This value may differ from the color * specified by crColor; that occurs when an exact match for the specified * color cannot be found. If the function fails, the return value is 1. To * get extended error information, call GetLastError. This can be the * following value. */ int SetPixel(HDC hDC, int x, int y, int crColor);
/** * The CreateCompatibleDC function creates a memory device context (DC) * compatible with the specified device. * * @param hDC Handle to an existing DC. If this handle is NULL, the function * creates a memory DC compatible with the application's current screen. * @return If the function succeeds, the return value is the handle to a * memory DC. If the function fails, the return value is NULL. To get * extended error information, call GetLastError. */ HDC CreateCompatibleDC(HDC hDC);
/** * The DeleteDC function deletes the specified device context (DC). * * @param hDC Handle to the device context. * @return If the function succeeds, the return value is nonzero. If the * function fails, the return value is zero. To get extended error * information, call GetLastError. */ boolean DeleteDC(HDC hDC);
/** * The CreateDIBitmap function creates a compatible bitmap (DDB) from a DIB * and, optionally, sets the bitmap bits. * * @param hDC Handle to a device context. * @param lpbmih Pointer to a bitmap information header structure, which may * be one of those shown in the following table. * @param fdwInit Specifies how the system initializes the bitmap bits. * @param lpbInit Pointer to an array of bytes containing the initial bitmap * data. * @param lpbmi Pointer to a BITMAPINFO structure that describes the * dimensions and color format of the array pointed to by the lpbInit * parameter. * @param fuUsage Specifies whether the bmiColors member of the BITMAPINFO * structure was initialized and, if so, whether bmiColors contains explicit * red, green, blue (RGB) values or palette indexes. The fuUsage parameter * must be one of the following values. * @return If the function succeeds, the return value is a handle to the * compatible bitmap. If the function fails, the return value is NULL. To * get extended error information, call GetLastError. */ HBITMAP CreateDIBitmap(HDC hDC, BITMAPINFOHEADER lpbmih, int fdwInit, Pointer lpbInit, BITMAPINFO lpbmi, int fuUsage);
/** * The CreateDIBSection function creates a DIB that applications can write * to directly. The function gives you a pointer to the location of the * bitmap bit values. You can supply a handle to a file-mapping object that * the function will use to create the bitmap, or you can let the system * allocate the memory for the bitmap. * * @param hDC Handle to a device context. If the value of iUsage is * DIB_PAL_COLORS, the function uses this device context's logical palette * to initialize the DIB colors. * @param pbmi Pointer to a BITMAPINFO structure that specifies various * attributes of the DIB, including the bitmap dimensions and colors. * @param iUsage Specifies the type of data contained in the bmiColors array * member of the BITMAPINFO structure pointed to by pbmi (either logical * palette indexes or literal RGB values). * @param ppvBits Pointer to a variable that receives a pointer to the * location of the DIB bit values. * @param hSection Handle to a file-mapping object that the function will * use to create the DIB. This parameter can be NULL. * @param dwOffset Specifies the offset from the beginning of the * file-mapping object referenced by hSection where storage for the bitmap * bit values is to begin. * @return Specifies the offset from the beginning of the file-mapping * object referenced by hSection where storage for the bitmap bit values is * to begin. */ HBITMAP CreateDIBSection(HDC hDC, BITMAPINFO pbmi, int iUsage, PointerByReference ppvBits, Pointer hSection, int dwOffset);
/** * The CreateCompatibleBitmap function creates a bitmap compatible with the * device that is associated with the specified device context. * * @param hDC Handle to a device context. * @param width Specifies the bitmap width, in pixels. * @param height Specifies the bitmap height, in pixels. * @return If the function succeeds, the return value is a handle to the * compatible bitmap (DDB). If the function fails, the return value is NULL. * To get extended error information, call GetLastError. */ HBITMAP CreateCompatibleBitmap(HDC hDC, int width, int height);
/** * The SelectObject function selects an object into the specified device * context (DC). The new object replaces the previous object of the same * type. * * @param hDC Handle to the DC. * @param hGDIObj Handle to the object to be selected. * @return If the selected object is not a region and the function succeeds, * the return value is a handle to the object being replaced. If the * selected object is a region and the function succeeds, the return value * is one of the REGION values. */ HANDLE SelectObject(HDC hDC, HANDLE hGDIObj);
/** * The GetDeviceCaps function retrieves device-specific information for the * specified device. * * @param hdc A handle to the DC. * @param nIndex The item to be returned. * @return The return value specifies the value of the desired item. When * <i>nIndex</i> is <code>BITSPIXEL</code> and the device has 15bpp or * 16bpp, the return value is 16. */ int GetDeviceCaps(HDC hdc, int nIndex);
/** * The GetDIBits function retrieves the bits fo the specified compatible * bitmap and copies them into a buffer as a DIB using the specified format. * * @param hdc A handle to the device context. * @param hbmp A handle to the bitmap. This must be a compatible bitmap * (DDB). * @param uStartScan The first scan line to retrieve * @param cScanLines The number of scan lines to retrieve. * @param lpvBits A pointer to a buffer to receive the bitmap data. If this * parameter is <code>null</code>, the function passes the dimensions and * format of the bitmap to the {@link BITMAPINFO} structure pointed to by * the <i>lpbi</i> parameter. * @param lpbi A pointer to a {@link BITMAPINFO} structure that specifies * the desired format for the DIB data. * @param uUsage The format of the bmiColors member of the {@link * BITMAPINFO} structure. * @return the number of scan lines copied from the bitmap */ int GetDIBits(HDC hdc, HBITMAP hbmp, int uStartScan, int cScanLines, Pointer lpvBits, BITMAPINFO lpbi, int uUsage);
/** The GetDIBits function retrieves the bits fo the specified compatible * bitmap and copies them into a buffer as a DIB using the specified * format. * @param hdc A handle to the device context. * @param hbmp A handle to the bitmap. This must be a compatible bitmap * (DDB). * @param uStartScan The first scan line to retrieve * @param cScanLines The number of scan lines to retrieve. * @param lpvBits A pointer to a buffer to receive the bitmap data. If * this parameter is <code>null</code>, the function passes the dimensions * and format of the bitmap to the {@link BITMAPINFOHEADER_MANUAL} structure pointed to * by the <i>lpbi</i> parameter. * @param lpbi A pointer to a {@link BITMAPINFOHEADER_MANUAL} structure that specifies * the desired format for the DIB data. * @param uUsage The format of the bmiColors member of the {@link * BITMAPINFO} structure. This method will not return those as they don't exist in the BITMAPINFOHEADER * structure. */ int GetDIBits(HDC hdc, HBITMAP hbmp, int uStartScan, int cScanLines, Pointer lpvBits, BITMAPINFOHEADER_MANUAL lpbi, int uUsage);
public HDC GetWindowDC(HWND hWnd);
public boolean BitBlt(HDC hObject, int nXDest, int nYDest, int nWidth, int nHeight, HDC hObjectSource, int nXSrc, int nYSrc, DWORD dwRop);
boolean BitBlt( HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, int dwRop );
HDC GetDC( HWND hWnd );
boolean GetDIBits( HDC dc, HBITMAP bmp, int startScan, int scanLines, byte[] pixels, BITMAPINFO bi, int usage );
boolean GetDIBits( HDC dc, HBITMAP bmp, int startScan, int scanLines, short[] pixels, BITMAPINFO bi, int usage );
boolean GetDIBits( HDC dc, HBITMAP bmp, int startScan, int scanLines, int[] pixels, BITMAPINFO bi, int usage );
HDC GetDC(HWND hWnd);
boolean PrintWindow(HWND hwnd, HDC hdcBlt, int nFlags);
DWORD GetPixel(HDC hdc, int nXPos, int nYPos);