pages, HANDLE hOtherProcess, int currentPage, int pagePos) {
+ this.pages = pages;
+ this.hOtherProcess = hOtherProcess;
+ this.currentPage = currentPage;
+ this.pagePos = pagePos;
+ }
+
+ private boolean readNext() throws IOException {
+ MEMORY_BASIC_INFORMATION mbi = pages.get(currentPage);
+ if (!pageReadable(mbi)) {
+ if (hasGuard(mbi)) {
+ if (unsetGuard(hOtherProcess, mbi)) {
+ boolean ret = readNext();
+ setGuard(hOtherProcess, mbi);
+ return ret;
+ }
+ }
+ if (currentPage + 1 < pages.size()) {
+ pagePos = 0;
+ currentPage++;
+ return readNext();
+ }
+ return false;
+ }
+ int addr = (int) pointerToAddress(mbi.baseAddress);
+ int maxsize = mbi.regionSize.intValue();
+ IntByReference bytesReadRef = new IntByReference();
+ Memory membuf = new Memory(BUFFER_SIZE);
+ int bufSize = BUFFER_SIZE;
+ if (pagePos + bufSize > maxsize) {
+ bufSize = maxsize - pagePos;
+ }
+ if (bufSize == 0) {
+ if (currentPage + 1 < pages.size()) {
+ pagePos = 0;
+ currentPage++;
+ return readNext();
+ }
+ return false;
+ }
+ boolean ok = Kernel32.INSTANCE.ReadProcessMemory(hOtherProcess, addr + pagePos, membuf, bufSize, bytesReadRef);
+ if (!ok) {
+ throw new IOException("Cannot read memory");
+ }
+ if (bytesReadRef.getValue() == 0) {
+ return readNext();
+ }
+ pagePos += bytesReadRef.getValue();
+
+ buf = membuf.getByteArray(0, bytesReadRef.getValue());
+ return true;
+ }
+
+ @Override
+ public int read() throws IOException {
+ if ((buf == null) || (bufPos >= buf.length)) {
+ if (buf != null) {
+ bufPos = 0;
+ }
+ if (!readNext()) {
+ return -1;
+ }
+ }
+
+ return buf[bufPos++] & 0xff;
+ }
+ }
+}
diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/Advapi32.java b/trunk/src/com/sun/jna/platform/win32/Advapi32.java
similarity index 97%
rename from trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/Advapi32.java
rename to trunk/src/com/sun/jna/platform/win32/Advapi32.java
index 3c8230f6c..756ccd4e4 100644
--- a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/Advapi32.java
+++ b/trunk/src/com/sun/jna/platform/win32/Advapi32.java
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package com.jpexs.decompiler.flash.gui.jna.platform.win32;
+package com.sun.jna.platform.win32;
/**
*
@@ -32,14 +32,14 @@ package com.jpexs.decompiler.flash.gui.jna.platform.win32;
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinBase.SECURITY_ATTRIBUTES;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinNT.HANDLE;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinNT.HANDLEByReference;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinReg.HKEY;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinReg.HKEYByReference;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
+import com.sun.jna.platform.win32.WinBase.SECURITY_ATTRIBUTES;
+import com.sun.jna.platform.win32.WinNT.HANDLE;
+import com.sun.jna.platform.win32.WinNT.HANDLEByReference;
+import com.sun.jna.platform.win32.WinReg.HKEY;
+import com.sun.jna.platform.win32.WinReg.HKEYByReference;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;
diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/Advapi32Util.java b/trunk/src/com/sun/jna/platform/win32/Advapi32Util.java
similarity index 96%
rename from trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/Advapi32Util.java
rename to trunk/src/com/sun/jna/platform/win32/Advapi32Util.java
index 7b334ddb3..fd75fe423 100644
--- a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/Advapi32Util.java
+++ b/trunk/src/com/sun/jna/platform/win32/Advapi32Util.java
@@ -14,18 +14,18 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package com.jpexs.decompiler.flash.gui.jna.platform.win32;
+package com.sun.jna.platform.win32;
/**
*
* @author JPEXS
*/
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinNT.EVENTLOGRECORD;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinReg.HKEY;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinReg.HKEYByReference;
import com.sun.jna.Memory;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
+import com.sun.jna.platform.win32.WinNT.EVENTLOGRECORD;
+import com.sun.jna.platform.win32.WinReg.HKEY;
+import com.sun.jna.platform.win32.WinReg.HKEYByReference;
import com.sun.jna.ptr.IntByReference;
import java.util.ArrayList;
import java.util.Map;
diff --git a/trunk/src/com/sun/jna/platform/win32/BITMAP.java b/trunk/src/com/sun/jna/platform/win32/BITMAP.java
new file mode 100644
index 000000000..73a2ef17c
--- /dev/null
+++ b/trunk/src/com/sun/jna/platform/win32/BITMAP.java
@@ -0,0 +1,32 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.sun.jna.platform.win32;
+
+import com.sun.jna.Structure;
+import com.sun.jna.platform.win32.WinDef.LONG;
+import com.sun.jna.platform.win32.WinDef.LPVOID;
+import com.sun.jna.platform.win32.WinDef.WORD;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ *
+ * @author JPEXS
+ */
+public class BITMAP extends Structure {
+
+ public LONG bmType;
+ public LONG bmWidth;
+ public LONG bmHeight;
+ public LONG bmWidthBytes;
+ public WORD bmPlanes;
+ public WORD bmBitsPixel;
+ public LPVOID bmBits;
+
+ @Override
+ protected List getFieldOrder() {
+ return Arrays.asList("bmType", "bmWidth", "bmHeight", "bmWidthBytes", "bmPlanes", "bmBitsPixel", "bmBits");
+ }
+}
diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/BaseTSD.java b/trunk/src/com/sun/jna/platform/win32/BaseTSD.java
similarity index 94%
rename from trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/BaseTSD.java
rename to trunk/src/com/sun/jna/platform/win32/BaseTSD.java
index c7f2c3b01..df2a9c7b5 100644
--- a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/BaseTSD.java
+++ b/trunk/src/com/sun/jna/platform/win32/BaseTSD.java
@@ -10,7 +10,7 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
-package com.jpexs.decompiler.flash.gui.jna.platform.win32;
+package com.sun.jna.platform.win32;
import com.sun.jna.IntegerType;
import com.sun.jna.Pointer;
diff --git a/trunk/src/com/sun/jna/platform/win32/Gdi32.java b/trunk/src/com/sun/jna/platform/win32/Gdi32.java
new file mode 100644
index 000000000..3f836a055
--- /dev/null
+++ b/trunk/src/com/sun/jna/platform/win32/Gdi32.java
@@ -0,0 +1,320 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.sun.jna.platform.win32;
+
+import com.sun.jna.Native;
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+import com.sun.jna.platform.win32.WinDef.DWORD;
+import com.sun.jna.platform.win32.WinDef.HBITMAP;
+import com.sun.jna.platform.win32.WinDef.HDC;
+import com.sun.jna.platform.win32.WinDef.HRGN;
+import com.sun.jna.platform.win32.WinGDI.BITMAPINFO;
+import com.sun.jna.platform.win32.WinGDI.BITMAPINFOHEADER;
+import com.sun.jna.platform.win32.WinGDI.RGNDATA;
+import com.sun.jna.platform.win32.WinNT.HANDLE;
+import com.sun.jna.ptr.PointerByReference;
+import com.sun.jna.win32.StdCallLibrary;
+import com.sun.jna.win32.W32APIOptions;
+
+/**
+ * Definition (incomplete) of
+ * gdi32.dll.
+ */
+public interface Gdi32 extends StdCallLibrary {
+
+ Gdi32 INSTANCE = (Gdi32) Native.loadLibrary("gdi32", Gdi32.class,
+ W32APIOptions.DEFAULT_OPTIONS);
+
+ /**
+ * The ExtCreateRegion function creates a region from the specified region
+ * and transformation data.
+ *
+ * @param lpXform Pointer to an XFORM structure that defines the
+ * transformation to be performed on the region. If this pointer is NULL,
+ * the identity transformation is used.
+ * @param nCount Specifies the number of bytes pointed to by lpRgnData.
+ * @param lpRgnData Pointer to a RGNDATA structure that contains the region
+ * data in logical units.
+ * @return If the function succeeds, the return value is the value of the
+ * region. If the function fails, the return value is NULL. To get extended
+ * error information, call GetLastError.
+ */
+ public HRGN ExtCreateRegion(Pointer lpXform, int nCount, RGNDATA lpRgnData);
+
+ /**
+ * The CombineRgn function combines two regions and stores the result in a
+ * third region. The two regions are combined according to the specified
+ * mode.
+ *
+ * @param hrgnDest Handle to a new region with dimensions defined by
+ * combining two other regions.
+ * @param hrgnSrc1 Handle to the first of two regions to be combined.
+ * @param hrgnSrc2 Handle to the second of two regions to be combined.
+ * @param fnCombineMode Specifies a mode indicating how the two regions will
+ * be combined.
+ * @return The return value specifies the type of the resulting region.
+ */
+ int CombineRgn(HRGN hrgnDest, HRGN hrgnSrc1, HRGN hrgnSrc2,
+ int fnCombineMode);
+
+ /**
+ * The CreateRectRgn function creates a rectangular region.
+ *
+ * @param nLeftRect Specifies the x-coordinate of the upper-left corner of
+ * the region in logical units.
+ * @param nTopRect Specifies the y-coordinate of the upper-left corner of
+ * the region in logical units.
+ * @param nRightRect Specifies the x-coordinate of the lower-right corner of
+ * the region in logical units.
+ * @param nBottomRect Specifies the y-coordinate of the lower-right corner
+ * of the region in logical units.
+ * @return If the function succeeds, the return value is the handle to the
+ * region. If the function fails, the return value is NULL. To get extended
+ * error information, call GetLastError.
+ */
+ HRGN CreateRectRgn(int nLeftRect, int nTopRect, int nRightRect,
+ int nBottomRect);
+
+ /**
+ * The CreateRoundRectRgn function creates a rectangular region with rounded
+ * corners.
+ *
+ * @param nLeftRect Specifies the x-coordinate of the upper-left corner of
+ * the region in logical units.
+ * @param nTopRect Specifies the y-coordinate of the upper-left corner of
+ * the region in logical units.
+ * @param nRightRect Specifies the x-coordinate of the lower-right corner of
+ * the region in logical units.
+ * @param nBottomRect Specifies the y-coordinate of the lower-right corner
+ * of the region in logical units.
+ * @param nWidthEllipse Specifies the width of the ellipse used to create
+ * the rounded corners in logical units.
+ * @param nHeightEllipse Specifies the height of the ellipse used to create
+ * the rounded corners in logical units.
+ * @return If the function succeeds, the return value is the handle to the
+ * region. If the function fails, the return value is NULL. To get extended
+ * error information, call GetLastError.
+ */
+ HRGN CreateRoundRectRgn(int nLeftRect, int nTopRect, int nRightRect,
+ int nBottomRect, int nWidthEllipse, int nHeightEllipse);
+
+ /**
+ * The CreatePolyPolygonRgn function creates a region consisting of a series
+ * of polygons. The polygons can overlap.
+ *
+ * @param lppt Pointer to an array of POINT structures that define the
+ * vertices of the polygons in logical units. The polygons are specified
+ * consecutively. Each polygon is presumed closed and each vertex is
+ * specified only once.
+ * @param lpPolyCounts Pointer to an array of integers, each of which
+ * specifies the number of points in one of the polygons in the array
+ * pointed to by lppt.
+ * @param nCount Specifies the total number of integers in the array pointed
+ * to by lpPolyCounts.
+ * @param fnPolyFillMode Specifies the fill mode used to determine which
+ * pixels are in the region.
+ * @return If the function succeeds, the return value is the handle to the
+ * region. If the function fails, the return value is zero. To get extended
+ * error information, call GetLastError.
+ */
+ HRGN CreatePolyPolygonRgn(WinUser.POINT[] lppt, int[] lpPolyCounts,
+ int nCount, int fnPolyFillMode);
+
+ /**
+ * The SetRectRgn function converts a region into a rectangular region with
+ * the specified coordinates.
+ *
+ * @param hrgn Handle to the region.
+ * @param nLeftRect Specifies the x-coordinate of the upper-left corner of
+ * the rectangular region in logical units.
+ * @param nTopRect Specifies the y-coordinate of the upper-left corner of
+ * the rectangular region in logical units.
+ * @param nRightRect Specifies the x-coordinate of the lower-right corner of
+ * the rectangular region in logical units.
+ * @param nBottomRect Specifies the y-coordinate of the lower-right corner
+ * of the rectangular region in logical units.
+ * @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 SetRectRgn(HRGN hrgn, int nLeftRect, int nTopRect, int nRightRect,
+ int nBottomRect);
+
+ /**
+ * 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 DeleteObject function deletes a logical pen, brush, font, bitmap,
+ * region, or palette, freeing all system resources associated with the
+ * object. After the object is deleted, the specified handle is no longer
+ * valid.
+ *
+ * @param hObject Handle to a logical pen, brush, font, bitmap, region, or
+ * palette.
+ * @return If the function succeeds, the return value is nonzero. If the
+ * specified handle is not valid or is currently selected into a DC, the
+ * return value is zero. To get extended error information, call
+ * GetLastError.
+ */
+ boolean DeleteObject(HANDLE hObject);
+
+ /**
+ * 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
+ * nIndex is BITSPIXEL 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 null, the function passes the dimensions and
+ * format of the bitmap to the {@link BITMAPINFO} structure pointed to by
+ * the lpbi 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.
+ */
+ int GetDIBits(HDC hdc, HBITMAP hbmp, int uStartScan, int cScanLines, Pointer lpvBits, BITMAPINFO lpbi, int uUsage);
+
+ int GetObject(HANDLE hgdiobj, int cbBuffer, Structure lpvObject);
+
+ DWORD GetPixel(HDC hdc, int nXPos, int nYPos);
+
+ HANDLE CreateSolidBrush(DWORD crColor);
+}
\ No newline at end of file
diff --git a/trunk/src/com/sun/jna/platform/win32/ICONINFO.java b/trunk/src/com/sun/jna/platform/win32/ICONINFO.java
new file mode 100644
index 000000000..2148a019e
--- /dev/null
+++ b/trunk/src/com/sun/jna/platform/win32/ICONINFO.java
@@ -0,0 +1,29 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.sun.jna.platform.win32;
+
+import com.sun.jna.Structure;
+import com.sun.jna.platform.win32.WinDef.DWORD;
+import com.sun.jna.platform.win32.WinDef.HBITMAP;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ *
+ * @author JPEXS
+ */
+public class ICONINFO extends Structure {
+
+ public boolean fIcon;
+ public DWORD xHotspot;
+ public DWORD yHotspot;
+ public HBITMAP hbmMask;
+ public HBITMAP hbmColor;
+
+ @Override
+ protected List getFieldOrder() {
+ return Arrays.asList("fIcon", "xHotspot", "yHotspot", "hbmMask", "hbmColor");
+ }
+}
diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/Kernel32.java b/trunk/src/com/sun/jna/platform/win32/Kernel32.java
similarity index 54%
rename from trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/Kernel32.java
rename to trunk/src/com/sun/jna/platform/win32/Kernel32.java
index 4fd2e90bd..1adcee34a 100644
--- a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/Kernel32.java
+++ b/trunk/src/com/sun/jna/platform/win32/Kernel32.java
@@ -10,9 +10,10 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
-package com.jpexs.decompiler.flash.gui.jna.platform.win32;
+package com.sun.jna.platform.win32;
import com.sun.jna.Native;
+import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.win32.W32APIOptions;
@@ -161,4 +162,123 @@ public interface Kernel32 extends WinNT {
* that caused the function to return.
*/
int WaitForSingleObject(HANDLE hHandle, int dwMilliseconds);
+
+ /**
+ * This function returns a pseudohandle for the current process.
+ *
+ * @return The return value is a pseudohandle to the current process.
+ */
+ HANDLE GetCurrentProcess();
+
+ /**
+ * This function returns a handle to an existing process object.
+ *
+ * @param fdwAccess Not supported; set to zero.
+ * @param fInherit Not supported; set to FALSE.
+ * @param IDProcess Specifies the process identifier of the process to open.
+ * @return An open handle to the specified process indicates success. NULL
+ * indicates failure. To get extended error information, call GetLastError.
+ */
+ HANDLE OpenProcess(int fdwAccess, boolean fInherit, DWORD IDProcess);
+
+ /**
+ * The GetSystemInfo function returns information about the current system.
+ *
+ * @param lpSystemInfo Pointer to a SYSTEM_INFO structure that receives the
+ * information.
+ */
+ void GetSystemInfo(SYSTEM_INFO lpSystemInfo);
+ public static final int PROCESS_VM_READ = 0x0010;
+ public static final int PROCESS_VM_WRITE = 0x0020;
+ public static final int PROCESS_QUERY_INFORMATION = 0x0400;
+ public static final int PROCESS_VM_OPERATION = 0x0008;
+
+ SIZE_T VirtualQueryEx(HANDLE hProcess, Pointer lpAddress, MEMORY_BASIC_INFORMATION lpBuffer, SIZE_T dwLength);
+
+ /**
+ * The GetLastError function retrieves the calling thread's last-error code
+ * value. The last-error code is maintained on a per-thread basis. Multiple
+ * threads do not overwrite each other's last-error code.
+ *
+ * @return The return value is the calling thread's last-error code value.
+ */
+ int GetLastError();
+ public static int MEM_COMMIT = 0x1000;
+ public static int MEM_FREE = 0x10000;
+ public static int MEM_RESERVE = 0x2000;
+ public static int MEM_IMAGE = 0x1000000;
+ public static int MEM_MAPPED = 0x40000;
+ public static int MEM_PRIVATE = 0x20000;
+
+ boolean ReadProcessMemory(HANDLE hProcess, int inBaseAddress, Pointer outputBuffer, int nSize, IntByReference outNumberOfBytesRead);
+
+ /**
+ * Takes a snapshot of the specified processes, as well as the heaps,
+ * modules, and threads used by these processes.
+ *
+ * @param dwFlags The portions of the system to be included in the snapshot.
+ *
+ * @param th32ProcessID The process identifier of the process to be included
+ * in the snapshot. This parameter can be zero to indicate the current
+ * process. This parameter is used when the TH32CS_SNAPHEAPLIST,
+ * TH32CS_SNAPMODULE, TH32CS_SNAPMODULE32, or TH32CS_SNAPALL value is
+ * specified. Otherwise, it is ignored and all processes are included in the
+ * snapshot.
+ *
+ * If the specified process is the Idle process or one of the CSRSS
+ * processes, this function fails and the last error code is
+ * ERROR_ACCESS_DENIED because their access restrictions prevent user-level
+ * code from opening them.
+ *
+ * If the specified process is a 64-bit process and the caller is a 32-bit
+ * process, this function fails and the last error code is
+ * ERROR_PARTIAL_COPY (299).
+ *
+ * @return If the function succeeds, it returns an open handle to the
+ * specified snapshot.
+ *
+ * If the function fails, it returns INVALID_HANDLE_VALUE. To get extended
+ * error information, call GetLastError. Possible error codes include
+ * ERROR_BAD_LENGTH.
+ */
+ HANDLE CreateToolhelp32Snapshot(DWORD dwFlags, DWORD th32ProcessID);
+
+ /**
+ * Retrieves information about the first process encountered in a system
+ * snapshot.
+ *
+ * @param hSnapshot A handle to the snapshot returned from a previous call
+ * to the CreateToolhelp32Snapshot function.
+ * @param lppe A pointer to a PROCESSENTRY32 structure. It contains process
+ * information such as the name of the executable file, the process
+ * identifier, and the process identifier of the parent process.
+ * @return Returns TRUE if the first entry of the process list has been
+ * copied to the buffer or FALSE otherwise. The ERROR_NO_MORE_FILES error
+ * value is returned by the GetLastError function if no processes exist or
+ * the snapshot does not contain process information.
+ */
+ boolean Process32First(HANDLE hSnapshot, PROCESSENTRY32 lppe);
+
+ /**
+ * Retrieves information about the next process recorded in a system
+ * snapshot.
+ *
+ * @param hSnapshot A handle to the snapshot returned from a previous call
+ * to the CreateToolhelp32Snapshot function.
+ * @param lppe A pointer to a PROCESSENTRY32 structure.
+ * @return Returns TRUE if the next entry of the process list has been
+ * copied to the buffer or FALSE otherwise. The ERROR_NO_MORE_FILES error
+ * value is returned by the GetLastError function if no processes exist or
+ * the snapshot does not contain process information.
+ */
+ boolean Process32Next(HANDLE hSnapshot, PROCESSENTRY32 lppe);
+ public static int TH32CS_SNAPPROCESS = 0x00000002;
+
+ //Needed for some Windows 7 Versions
+ //boolean EnumProcesses(int []ProcessIDsOut,int size , int[] BytesReturned);
+ int GetProcessImageFileNameW(HANDLE Process, char[] outputname, int lenght);
+
+ DWORD QueryDosDevice(String lpDeviceName, char[] lpTargetPath, int lenght);
+
+ boolean VirtualProtectEx(HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, int flNewProtect, IntByReference lpflOldProtect);
}
diff --git a/trunk/src/com/sun/jna/platform/win32/MEMORY_BASIC_INFORMATION.java b/trunk/src/com/sun/jna/platform/win32/MEMORY_BASIC_INFORMATION.java
new file mode 100644
index 000000000..0755b5134
--- /dev/null
+++ b/trunk/src/com/sun/jna/platform/win32/MEMORY_BASIC_INFORMATION.java
@@ -0,0 +1,33 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.sun.jna.platform.win32;
+
+import com.sun.jna.NativeLong;
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+import com.sun.jna.platform.win32.BaseTSD.SIZE_T;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ *
+ * @author JPEXS
+ */
+public class MEMORY_BASIC_INFORMATION extends Structure {
+
+ public Pointer baseAddress;
+ public Pointer allocationBase;
+ public NativeLong allocationProtect;
+ public SIZE_T regionSize;
+ public NativeLong state;
+ public NativeLong protect;
+ public NativeLong type;
+
+ @Override
+ protected List getFieldOrder() {
+ return Arrays.asList(new String[]{"baseAddress", "allocationBase", "allocationProtect",
+ "regionSize", "state", "protect", "type"});
+ }
+}
diff --git a/trunk/src/com/sun/jna/platform/win32/PROCESSENTRY32.java b/trunk/src/com/sun/jna/platform/win32/PROCESSENTRY32.java
new file mode 100644
index 000000000..17404e1e6
--- /dev/null
+++ b/trunk/src/com/sun/jna/platform/win32/PROCESSENTRY32.java
@@ -0,0 +1,85 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.sun.jna.platform.win32;
+
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+import java.util.Arrays;
+import java.util.List;
+
+public class PROCESSENTRY32 extends Structure {
+
+ public static class ByReference extends PROCESSENTRY32 implements Structure.ByReference {
+
+ public ByReference() {
+ }
+
+ public ByReference(Pointer memory) {
+ super(memory);
+ }
+ }
+
+ public PROCESSENTRY32() {
+ dwSize = new WinDef.DWORD(size());
+ }
+
+ public PROCESSENTRY32(Pointer memory) {
+ super(memory);
+ read();
+ }
+ /**
+ * The size of the structure, in bytes. Before calling the Process32First
+ * function, set this member to sizeof(PROCESSENTRY32). If you do not
+ * initialize dwSize, Process32First fails.
+ */
+ public WinDef.DWORD dwSize;
+ /**
+ * This member is no longer used and is always set to zero.
+ */
+ public WinDef.DWORD cntUsage;
+ /**
+ * The process identifier.
+ */
+ public WinNT.DWORD th32ProcessID;
+ /**
+ * This member is no longer used and is always set to zero.
+ */
+ public BaseTSD.ULONG_PTR th32DefaultHeapID;
+ /**
+ * This member is no longer used and is always set to zero.
+ */
+ public WinDef.DWORD th32ModuleID;
+ /**
+ * The number of execution threads started by the process.
+ */
+ public WinDef.DWORD cntThreads;
+ /**
+ * The identifier of the process that created this process (its parent
+ * process).
+ */
+ public WinDef.DWORD th32ParentProcessID;
+ /**
+ * The base priority of any threads created by this process.
+ */
+ public WinDef.LONG pcPriClassBase;
+ /**
+ * This member is no longer used, and is always set to zero.
+ */
+ public WinDef.DWORD dwFlags;
+ /**
+ * The name of the executable file for the process. To retrieve the full
+ * path to the executable file, call the Module32First function and check
+ * the szExePath member of the MODULEENTRY32 structure that is returned.
+ * However, if the calling process is a 32-bit process, you must call the
+ * QueryFullProcessImageName function to retrieve the full path of the
+ * executable file for a 64-bit process.
+ */
+ public char[] szExeFile = new char[WinDef.MAX_PATH];
+
+ @Override
+ protected List getFieldOrder() {
+ return Arrays.asList(new String[]{"dwSize", "cntUsage", "th32ProcessID", "th32DefaultHeapID", "th32ModuleID", "cntThreads", "th32ParentProcessID", "pcPriClassBase", "dwFlags", "szExeFile"});
+ }
+}
diff --git a/trunk/src/com/sun/jna/platform/win32/Psapi.java b/trunk/src/com/sun/jna/platform/win32/Psapi.java
new file mode 100644
index 000000000..a53c9721e
--- /dev/null
+++ b/trunk/src/com/sun/jna/platform/win32/Psapi.java
@@ -0,0 +1,22 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.sun.jna.platform.win32;
+
+import com.sun.jna.Native;
+import com.sun.jna.platform.win32.WinNT.HANDLE;
+import com.sun.jna.win32.StdCallLibrary;
+
+/**
+ *
+ * @author petrik
+ */
+public interface Psapi extends StdCallLibrary {
+
+ Psapi INSTANCE = (Psapi) Native.loadLibrary("Psapi", Psapi.class);
+//For some Windows 7 Versions and older down to XP
+ //boolean EnumProcesses(int[] ProcessIDsOut, int size, int[] BytesReturned);
+
+ int GetProcessImageFileNameW(HANDLE Process, char[] outputname, int lenght);
+}
diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/SHELLEXECUTEINFO.java b/trunk/src/com/sun/jna/platform/win32/SHELLEXECUTEINFO.java
similarity index 70%
rename from trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/SHELLEXECUTEINFO.java
rename to trunk/src/com/sun/jna/platform/win32/SHELLEXECUTEINFO.java
index 2f06a8846..fa58929f8 100644
--- a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/SHELLEXECUTEINFO.java
+++ b/trunk/src/com/sun/jna/platform/win32/SHELLEXECUTEINFO.java
@@ -1,12 +1,12 @@
-package com.jpexs.decompiler.flash.gui.jna.platform.win32;
+package com.sun.jna.platform.win32;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinDef.HINSTANCE;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinDef.HWND;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinNT.HANDLE;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinReg.HKEY;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.WString;
+import com.sun.jna.platform.win32.WinDef.HINSTANCE;
+import com.sun.jna.platform.win32.WinDef.HWND;
+import com.sun.jna.platform.win32.WinNT.HANDLE;
+import com.sun.jna.platform.win32.WinReg.HKEY;
import java.util.Arrays;
import java.util.List;
diff --git a/trunk/src/com/sun/jna/platform/win32/SHFILEINFO.java b/trunk/src/com/sun/jna/platform/win32/SHFILEINFO.java
new file mode 100644
index 000000000..b8b4213cb
--- /dev/null
+++ b/trunk/src/com/sun/jna/platform/win32/SHFILEINFO.java
@@ -0,0 +1,29 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.sun.jna.platform.win32;
+
+import com.sun.jna.Structure;
+import com.sun.jna.platform.win32.WinDef.DWORD;
+import com.sun.jna.platform.win32.WinDef.HICON;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ *
+ * @author JPEXS
+ */
+public class SHFILEINFO extends Structure {
+
+ public HICON hIcon;
+ public int iIcon;
+ public DWORD dwAttributes;
+ public char[] szDisplayName = new char[260];
+ public char[] szTypeName = new char[80];
+
+ @Override
+ protected List getFieldOrder() {
+ return Arrays.asList("hIcon", "iIcon", "dwAttributes", "szDisplayName", "szTypeName");
+ }
+}
diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/Shell32.java b/trunk/src/com/sun/jna/platform/win32/Shell32.java
similarity index 65%
rename from trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/Shell32.java
rename to trunk/src/com/sun/jna/platform/win32/Shell32.java
index fce08e85d..51068b762 100644
--- a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/Shell32.java
+++ b/trunk/src/com/sun/jna/platform/win32/Shell32.java
@@ -10,9 +10,12 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
-package com.jpexs.decompiler.flash.gui.jna.platform.win32;
+package com.sun.jna.platform.win32;
import com.sun.jna.Native;
+import com.sun.jna.platform.win32.BaseTSD.DWORD_PTR;
+import com.sun.jna.platform.win32.WinDef.UINT;
+import com.sun.jna.ptr.PointerByReference;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;
@@ -28,4 +31,10 @@ public interface Shell32 extends StdCallLibrary {
* @return true if successful. Otherwise false.
*/
boolean ShellExecuteEx(SHELLEXECUTEINFO lpExecInfo);
+
+ UINT ExtractIconEx(String lpszFile, int nIconIndex, PointerByReference phiconLarge, PointerByReference phiconSmall, UINT nIcons);
+
+ DWORD_PTR SHGetFileInfo(String pszPath, int dwFileAttributes, SHFILEINFO psfi, int cbFileInfo, int uFlags);
+ public static final int SHGFI_ICON = 0x000000100;
+ public static final int SHGFI_SMALLICON = 0x000000001;
}
diff --git a/trunk/src/com/sun/jna/platform/win32/User32.java b/trunk/src/com/sun/jna/platform/win32/User32.java
new file mode 100644
index 000000000..19f7fd66d
--- /dev/null
+++ b/trunk/src/com/sun/jna/platform/win32/User32.java
@@ -0,0 +1,1518 @@
+/* Copyright (c) 2007, 2013 Timothy Wall, Markus Karg, All Rights Reserved
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ */
+package com.sun.jna.platform.win32;
+
+import com.sun.jna.Native;
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+import com.sun.jna.WString;
+import com.sun.jna.platform.win32.BaseTSD.LONG_PTR;
+import com.sun.jna.platform.win32.WinNT.HANDLE;
+import com.sun.jna.ptr.ByteByReference;
+import com.sun.jna.ptr.IntByReference;
+import com.sun.jna.win32.StdCallLibrary;
+import com.sun.jna.win32.W32APIOptions;
+
+/**
+ * Provides access to the w32 user32 library. Incomplete implementation to
+ * support demos.
+ *
+ * @author Todd Fast, todd.fast@sun.com
+ * @author twalljava@dev.java.net
+ * @author Tobias Wolf, wolf.tobias@gmx.net
+ * @author Markus KARG (markus[at]headcrashing[dot]eu)
+ */
+public interface User32 extends StdCallLibrary, WinUser {
+
+ /**
+ * The instance.
+ */
+ User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class,
+ W32APIOptions.DEFAULT_OPTIONS);
+ /**
+ * Handle for message-only window.
+ */
+ public static final HWND HWND_MESSAGE = new HWND(Pointer.createConstant(-3));
+ /**
+ * The cs globalclass.
+ */
+ int CS_GLOBALCLASS = 0x4000;
+ /**
+ * The ws ex topmost.
+ */
+ int WS_EX_TOPMOST = 0x00000008;
+ /**
+ * The ws overlapped.
+ */
+ int WS_OVERLAPPED = 0x00000000;
+ /**
+ * The hRecipient parameter is a window handle.
+ */
+ int DEVICE_NOTIFY_WINDOW_HANDLE = 0x00000000;
+ /**
+ * The hRecipient parameter is a service status handle.
+ */
+ int DEVICE_NOTIFY_SERVICE_HANDLE = 0x00000001;
+ /**
+ * The device notify all interface classes.
+ */
+ int DEVICE_NOTIFY_ALL_INTERFACE_CLASSES = 0x00000004;
+
+ /**
+ * This function retrieves a handle to a display device context (DC) for the
+ * client area of the specified window. The display device context can be
+ * used in subsequent graphics display interface (GDI) functions to draw in
+ * the client area of the window.
+ *
+ * @param hWnd Handle to the window whose device context is to be retrieved.
+ * If this value is NULL, GetDC retrieves the device context for the entire
+ * screen.
+ * @return The handle the device context for the specified window's client
+ * area indicates success. NULL indicates failure. To get extended error
+ * information, call GetLastError.
+ */
+ HDC GetDC(HWND hWnd);
+
+ /**
+ * This function releases a device context (DC), freeing it for use by other
+ * applications. The effect of ReleaseDC depends on the type of device
+ * context.
+ *
+ * @param hWnd Handle to the window whose device context is to be released.
+ * @param hDC Handle to the device context to be released.
+ * @return The return value specifies whether the device context is
+ * released. 1 indicates that the device context is released. Zero indicates
+ * that the device context is not released.
+ */
+ int ReleaseDC(HWND hWnd, HDC hDC);
+
+ /**
+ * This function retrieves the handle to the top-level window whose class
+ * name and window name match the specified strings. This function does not
+ * search child windows.
+ *
+ * @param lpClassName Long pointer to a null-terminated string that
+ * specifies the class name or is an atom that identifies the class-name
+ * string. If this parameter is an atom, it must be a global atom created by
+ * a previous call to the GlobalAddAtom function. The atom, a 16-bit value,
+ * must be placed in the low-order word of lpClassName; the high-order word
+ * must be zero.
+ * @param lpWindowName Long pointer to a null-terminated string that
+ * specifies the window name (the window's title). If this parameter is
+ * NULL, all window names match.
+ * @return A handle to the window that has the specified class name and
+ * window name indicates success. NULL indicates failure. To get extended
+ * error information, call GetLastError.
+ */
+ HWND FindWindow(String lpClassName, String lpWindowName);
+
+ /**
+ * This function retrieves the name of the class to which the specified
+ * window belongs.
+ *
+ * @param hWnd Handle to the window and, indirectly, the class to which the
+ * window belongs.
+ * @param lpClassName Long pointer to the buffer that is to receive the
+ * class name string.
+ * @param nMaxCount Specifies the length, in characters, of the buffer
+ * pointed to by the lpClassName parameter. The class name string is
+ * truncated if it is longer than the buffer.
+ * @return The number of characters copied to the specified buffer indicates
+ * success. Zero indicates failure. To get extended error information, call
+ * GetLastError.
+ */
+ int GetClassName(HWND hWnd, char[] lpClassName, int nMaxCount);
+
+ /**
+ * Retrieves information about the active window or a specified graphical
+ * user interface (GUI) thread.
+ *
+ * @param idThread Identifies the thread for which information is to be
+ * retrieved. To retrieve this value, use the GetWindowThreadProcessId
+ * function. If this parameter is NULL, the function returns information for
+ * the foreground thread.
+ * @param lpgui Pointer to a GUITHREADINFO structure that receives
+ * information describing the thread. Note that you must set
+ * GUITHREADINFO.cbSize to sizeof(GUITHREADINFO) before calling this
+ * function.
+ * @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 GetGUIThreadInfo(int idThread, GUITHREADINFO lpgui);
+
+ /**
+ * The GetWindowInfo function retrieves information about the specified
+ * window.
+ *
+ * @param hWnd Handle to the window whose information is to be retrieved.
+ * @param pwi Pointer to a WINDOWINFO structure to receive the information.
+ * Note that you must set WINDOWINFO.cbSize to sizeof(WINDOWINFO) before
+ * calling this function.
+ * @return If the function succeeds, the return value is nonzero. If the
+ * function fails, the return value is zero.
+ */
+ boolean GetWindowInfo(HWND hWnd, WINDOWINFO pwi);
+
+ /**
+ * This function retrieves the dimensions of the bounding rectangle of the
+ * specified window. The dimensions are given in screen coordinates that are
+ * relative to the upper-left corner of the screen.
+ *
+ * @param hWnd Handle to the window.
+ * @param rect Long pointer to a RECT structure that receives the screen
+ * coordinates of the upper-left and lower-right corners of the window.
+ * @return Nonzero indicates success. Zero indicates failure. To get
+ * extended error information, call GetLastError.
+ */
+ boolean GetWindowRect(HWND hWnd, RECT rect);
+
+ /**
+ * This function copies the text of the specified window's title bar - if it
+ * has one - into a buffer. If the specified window is a control, the text
+ * of the control is copied.
+ *
+ * @param hWnd Handle to the window or control containing the text.
+ * @param lpString Long pointer to the buffer that will receive the text.
+ * @param nMaxCount Specifies the maximum number of characters to copy to
+ * the buffer, including the NULL character. If the text exceeds this limit,
+ * it is truncated.
+ * @return The length, in characters, of the copied string, not including
+ * the terminating null character, indicates success. Zero indicates that
+ * the window has no title bar or text, if the title bar is empty, or if the
+ * window or control handle is invalid. To get extended error information,
+ * call GetLastError. This function cannot retrieve the text of an edit
+ * control in another application.
+ */
+ int GetWindowText(HWND hWnd, char[] lpString, int nMaxCount);
+
+ /**
+ * This function retrieves the length, in characters, of the specified
+ * window's title bar text - if the window has a title bar. If the specified
+ * window is a control, the function retrieves the length of the text within
+ * the control.
+ *
+ * @param hWnd Handle to the window or control.
+ * @return The length, in characters, of the text indicates success. Under
+ * certain conditions, this value may actually be greater than the length of
+ * the text. Zero indicates that the window has no text. To get extended
+ * error information, call GetLastError.
+ */
+ int GetWindowTextLength(HWND hWnd);
+
+ /**
+ * The GetWindowModuleFileName function retrieves the full path and file
+ * name of the module associated with the specified window handle.
+ *
+ * @param hWnd Handle to the window whose module file name will be
+ * retrieved.
+ * @param lpszFileName Pointer to a buffer that receives the path and file
+ * name.
+ * @param cchFileNameMax Specifies the maximum number of TCHARs that can be
+ * copied into the lpszFileName buffer.
+ * @return The return value is the total number of TCHARs copied into the
+ * buffer.
+ */
+ int GetWindowModuleFileName(HWND hWnd, char[] lpszFileName,
+ int cchFileNameMax);
+
+ /**
+ * This function retrieves the identifier of the thread that created the
+ * specified window and, optionally, the identifier of the process that
+ * created the window.
+ *
+ * @param hWnd Handle to the window.
+ * @param lpdwProcessId Pointer to a 32-bit value that receives the process
+ * identifier. If this parameter is not NULL, GetWindowThreadProcessId
+ * copies the identifier of the process to the 32-bit value; otherwise, it
+ * does not.
+ * @return The return value is the identifier of the thread that created the
+ * window.
+ */
+ int GetWindowThreadProcessId(HWND hWnd, IntByReference lpdwProcessId);
+
+ /**
+ * This function enumerates all top-level windows on the screen by passing
+ * the handle to each window, in turn, to an application-defined callback
+ * function. EnumWindows continues until the last top-level window is
+ * enumerated or the callback function returns FALSE.
+ *
+ * @param lpEnumFunc Long pointer to an application-defined callback
+ * function.
+ * @param data Specifies an application-defined value to be passed to the
+ * callback function.
+ * @return Nonzero indicates success. Zero indicates failure. To get
+ * extended error information, call GetLastError.
+ */
+ boolean EnumWindows(WNDENUMPROC lpEnumFunc, Pointer data);
+
+ /**
+ * The EnumChildWindows function enumerates the child windows that belong to
+ * the specified parent window by passing the handle to each child window,
+ * in turn, to an application-defined callback function. EnumChildWindows
+ * continues until the last child window is enumerated or the callback
+ * function returns FALSE.
+ *
+ * @param hWnd Handle to the parent window whose child windows are to be
+ * enumerated. If this parameter is NULL, this function is equivalent to
+ * EnumWindows.
+ * @param lpEnumFunc Pointer to an application-defined callback function.
+ * @param data Specifies an application-defined value to be passed to the
+ * callback function.
+ * @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. If EnumChildProc returns zero, the return
+ * value is also zero. In this case, the callback function should call
+ * SetLastError to obtain a meaningful error code to be returned to the
+ * caller of EnumChildWindows.
+ */
+ boolean EnumChildWindows(HWND hWnd, WNDENUMPROC lpEnumFunc, Pointer data);
+
+ /**
+ * The EnumThreadWindows function enumerates all nonchild windows associated
+ * with a thread by passing the handle to each window, in turn, to an
+ * application-defined callback function. EnumThreadWindows continues until
+ * the last window is enumerated or the callback function returns FALSE. To
+ * enumerate child windows of a particular window, use the EnumChildWindows
+ * function.
+ *
+ * @param dwThreadId Identifies the thread whose windows are to be
+ * enumerated.
+ * @param lpEnumFunc Pointer to an application-defined callback function.
+ * @param data Specifies an application-defined value to be passed to the
+ * callback function.
+ * @return If the callback function returns TRUE for all windows in the
+ * thread specified by dwThreadId, the return value is TRUE. If the callback
+ * function returns FALSE on any enumerated window, or if there are no
+ * windows found in the thread specified by dwThreadId, the return value is
+ * FALSE.
+ */
+ boolean EnumThreadWindows(int dwThreadId, WNDENUMPROC lpEnumFunc,
+ Pointer data);
+
+ /**
+ * The FlashWindowEx function flashes the specified window. It does not
+ * change the active state of the window.
+ *
+ * @param pfwi Pointer to the FLASHWINFO structure.
+ * @return The return value specifies the window's state before the call to
+ * the FlashWindowEx function. If the window caption was drawn as active
+ * before the call, the return value is nonzero. Otherwise, the return value
+ * is zero.
+ */
+ boolean FlashWindowEx(FLASHWINFO pfwi);
+
+ /**
+ * This function loads the specified icon resource from the executable
+ * (.exe) file associated with an application instance.
+ *
+ * @param hInstance Handle to an instance of the module whose executable
+ * file contains the icon to be loaded. This parameter must be NULL when a
+ * standard icon is being loaded.
+ * @param iconName Long pointer to a null-terminated string that contains
+ * the name of the icon resource to be loaded. Alternatively, this parameter
+ * can contain the resource identifier in the low-order word and zero in the
+ * high-order word. Use the MAKEINTRESOURCE macro to create this value.
+ * @return A handle to the newly loaded icon indicates success. NULL
+ * indicates failure. To get extended error information, call GetLastError.
+ */
+ HICON LoadIcon(HINSTANCE hInstance, String iconName);
+
+ /**
+ * This function loads an icon, cursor, or bitmap.
+ *
+ * @param hinst Handle to an instance of the module that contains the image
+ * to be loaded.
+ * @param name Pointer to a null-terminated string that contains the name of
+ * the image resource in the hinst module that identifies the image to load.
+ * @param type Specifies the type of image to be loaded.
+ * @param xDesired Specifies the width, in pixels, of the icon or cursor. If
+ * this parameter is zero, the function uses the SM_CXICON or SM_CXCURSOR
+ * system metric value to set the width. If uType is IMAGE_BITMAP, this
+ * parameter must be zero.
+ * @param yDesired Specifies the height, in pixels, of the icon or cursor.
+ * If this parameter is zero, the function uses the SM_CYICON or SM_CYCURSOR
+ * system metric value to set the height. If uType is IMAGE_BITMAP, this
+ * parameter must be zero.
+ * @param load Set to zero.
+ * @return The handle of the newly loaded image indicates success. NULL
+ * indicates failure. To get extended error information, call GetLastError.
+ */
+ HANDLE LoadImage(HINSTANCE hinst, String name, int type, int xDesired,
+ int yDesired, int load);
+
+ /**
+ * This function destroys an icon and frees any memory the icon occupied.
+ *
+ * @param hicon Handle to the icon to be destroyed. The icon must not be in
+ * use.
+ * @return Nonzero indicates success. Zero indicates failure. To get
+ * extended error information, call GetLastError.
+ */
+ boolean DestroyIcon(HICON hicon);
+
+ /**
+ * This function retrieves information about the specified window.
+ * GetWindowLong also retrieves the 32-bit (long) value at the specified
+ * offset into the extra window memory of a window.
+ *
+ * @param hWnd Handle to the window and, indirectly, the class to which the
+ * window belongs.
+ * @param nIndex Specifies the zero-based offset to the value to be
+ * retrieved.
+ * @return The requested 32-bit value indicates success. Zero indicates
+ * failure. To get extended error information, call GetLastError.
+ */
+ int GetWindowLong(HWND hWnd, int nIndex);
+
+ /**
+ * This function changes an attribute of the specified window. SetWindowLong
+ * also sets a 32-bit (LONG) value at the specified offset into the extra
+ * window memory of a window.
+ *
+ * @param hWnd Handle to the window and, indirectly, the class to which the
+ * window belongs.
+ * @param nIndex Specifies the zero-based offset to the value to be set.
+ * @param dwNewLong Specifies the replacement value.
+ * @return The previous value of the specified 32-bit integer indicates
+ * success. Zero indicates failure. To get extended error information, call
+ * GetLastError.
+ */
+ int SetWindowLong(HWND hWnd, int nIndex, int dwNewLong);
+
+ /**
+ * This function changes an attribute of the specified window. SetWindowLong
+ * also sets a 32-bit (LONG) value at the specified offset into the extra
+ * window memory of a window. Do not use this version on Windows-64.
+ *
+ * @param hWnd Handle to the window and, indirectly, the class to which the
+ * window belongs.
+ * @param nIndex Specifies the zero-based offset to the value to be set.
+ * @param dwNewLong Specifies the replacement value.
+ * @return The previous value of the specified 32-bit integer indicates
+ * success. Zero indicates failure. To get extended error information, call
+ * GetLastError.
+ */
+ Pointer SetWindowLong(HWND hWnd, int nIndex, Pointer dwNewLong);
+
+ /**
+ * The GetWindowLongPtr function retrieves information about the specified
+ * window. The function also retrieves the value at a specified offset into
+ * the extra window memory.
+ *
+ * @param hWnd Handle to the window and, indirectly, the class to which the
+ * window belongs.
+ * @param nIndex Specifies the zero-based offset to the value to be
+ * retrieved.
+ * @return If the function succeeds, the return value is the requested
+ * value. If the function fails, the return value is zero. To get extended
+ * error information, call GetLastError. If SetWindowLong or
+ * SetWindowLongPtr has not been called previously, GetWindowLongPtr returns
+ * zero for values in the extra window or class memory.
+ */
+ LONG_PTR GetWindowLongPtr(HWND hWnd, int nIndex);
+
+ /**
+ * The SetWindowLongPtr function changes an attribute of the specified
+ * window. The function also sets a value at the specified offset in the
+ * extra window memory.
+ *
+ * @param hWnd Handle to the window and, indirectly, the class to which the
+ * window belongs.
+ * @param nIndex Specifies the zero-based offset to the value to be set.
+ * @param dwNewLongPtr Specifies the replacement value.
+ * @return If the function succeeds, the return value is the previous value
+ * of the specified offset. If the function fails, the return value is zero.
+ * To get extended error information, call GetLastError. If the previous
+ * value is zero and the function succeeds, the return value is zero, but
+ * the function does not clear the last error information. To determine
+ * success or failure, clear the last error information by calling
+ * SetLastError(0), then call SetWindowLongPtr. Function failure will be
+ * indicated by a return value of zero and a GetLastError result that is
+ * nonzero.
+ */
+ LONG_PTR SetWindowLongPtr(HWND hWnd, int nIndex, LONG_PTR dwNewLongPtr);
+
+ /**
+ * The SetWindowLongPtr function changes an attribute of the specified
+ * window. The function also sets a value at the specified offset in the
+ * extra window memory.
+ *
+ * @param hWnd Handle to the window and, indirectly, the class to which the
+ * window belongs.
+ * @param nIndex Specifies the zero-based offset to the value to be set.
+ * @param dwNewLongPtr Specifies the replacement value.
+ * @return If the function succeeds, the return value is the previous value
+ * of the specified offset. If the function fails, the return value is zero.
+ * To get extended error information, call GetLastError. If the previous
+ * value is zero and the function succeeds, the return value is zero, but
+ * the function does not clear the last error information. To determine
+ * success or failure, clear the last error information by calling
+ * SetLastError(0), then call SetWindowLongPtr. Function failure will be
+ * indicated by a return value of zero and a GetLastError result that is
+ * nonzero.
+ */
+ Pointer SetWindowLongPtr(HWND hWnd, int nIndex, Pointer dwNewLongPtr);
+
+ /**
+ * The SetLayeredWindowAttributes function sets the opacity and transparency
+ * color key of a layered window.
+ *
+ * @param hwnd Handle to the layered window.
+ * @param crKey COLORREF structure that specifies the transparency color key
+ * to be used when composing the layered window.
+ * @param bAlpha Alpha value used to describe the opacity of the layered
+ * window.
+ * @param dwFlags Specifies an action to take.
+ * @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 SetLayeredWindowAttributes(HWND hwnd, int crKey, byte bAlpha,
+ int dwFlags);
+
+ /**
+ * The GetLayeredWindowAttributes function retrieves the opacity and
+ * transparency color key of a layered window.
+ *
+ * @param hwnd Handle to the layered window. A layered window is created by
+ * specifying WS_EX_LAYERED when creating the window with the CreateWindowEx
+ * function or by setting WS_EX_LAYERED via SetWindowLong after the window
+ * has been created.
+ * @param pcrKey Pointer to a COLORREF value that receives the transparency
+ * color key to be used when composing the layered window. All pixels
+ * painted by the window in this color will be transparent. This can be NULL
+ * if the argument is not needed.
+ * @param pbAlpha Pointer to a BYTE that receives the Alpha value used to
+ * describe the opacity of the layered window. Similar to the
+ * SourceConstantAlpha member of the BLENDFUNCTION structure. When the
+ * variable referred to by pbAlpha is 0, the window is completely
+ * transparent. When the variable referred to by pbAlpha is 255, the window
+ * is opaque. This can be NULL if the argument is not needed.
+ * @param pdwFlags Pointer to a DWORD that receives a layering flag. This
+ * can be NULL if the argument is not needed.
+ * @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 GetLayeredWindowAttributes(HWND hwnd, IntByReference pcrKey,
+ ByteByReference pbAlpha, IntByReference pdwFlags);
+
+ /**
+ * The UpdateLayeredWindow function updates the position, size, shape,
+ * content, and translucency of a layered window.
+ *
+ * @param hwnd Handle to a layered window. A layered window is created by
+ * specifying WS_EX_LAYERED when creating the window with the CreateWindowEx
+ * function.
+ * @param hdcDst Handle to a device context (DC) for the screen. This handle
+ * is obtained by specifying NULL when calling the function. It is used for
+ * palette color matching when the window contents are updated. If hdcDst
+ * isNULL, the default palette will be used. If hdcSrc is NULL, hdcDst must
+ * be NULL.
+ * @param pptDst Pointer to a POINT structure that specifies the new screen
+ * position of the layered window. If the current position is not changing,
+ * pptDst can be NULL.
+ * @param psize Pointer to a SIZE structure that specifies the new size of
+ * the layered window. If the size of the window is not changing, psize can
+ * be NULL. If hdcSrc is NULL, psize must be NULL.
+ * @param hdcSrc Handle to a DC for the surface that defines the layered
+ * window. This handle can be obtained by calling the CreateCompatibleDC
+ * function. If the shape and visual context of the window are not changing,
+ * hdcSrc can be NULL.
+ * @param pptSrc Pointer to a POINT structure that specifies the location of
+ * the layer in the device context. If hdcSrc is NULL, pptSrc should be
+ * NULL.
+ * @param crKey Pointer to a COLORREF value that specifies the color key to
+ * be used when composing the layered window. To generate a COLORREF, use
+ * the RGB macro.
+ * @param pblend Pointer to a BLENDFUNCTION structure that specifies the
+ * transparency value to be used when composing the layered window.
+ * @param dwFlags ULW_* flags.
+ * @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 UpdateLayeredWindow(HWND hwnd, HDC hdcDst, POINT pptDst,
+ SIZE psize, HDC hdcSrc, POINT pptSrc, int crKey,
+ BLENDFUNCTION pblend, int dwFlags);
+
+ /**
+ * This function sets the window region of a window. The window region
+ * determines the area within the window where the system permits drawing.
+ * The system does not display any portion of a window that lies outside of
+ * the window region.
+ *
+ * @param hWnd Handle to the window whose window region is to be set.
+ * @param hRgn Handle to a region. The function sets the window region of
+ * the window to this region. If hRgn is NULL, the function sets the window
+ * region to NULL.
+ * @param bRedraw Specifies whether the system redraws the window after
+ * setting the window region. If bRedraw is TRUE, the system does so;
+ * otherwise, it does not. Typically, you set bRedraw to TRUE if the window
+ * is visible.
+ * @return Nonzero indicates success. Zero indicates failure. To get
+ * extended error information, call GetLastError.
+ */
+ int SetWindowRgn(HWND hWnd, HRGN hRgn, boolean bRedraw);
+
+ /**
+ * The GetKeyboardState function copies the status of the 256 virtual keys
+ * to the specified buffer.
+ *
+ * @param lpKeyState Pointer to the 256-byte array that receives the status
+ * data for each virtual key.
+ * @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 GetKeyboardState(byte[] lpKeyState);
+
+ /**
+ * This function determines whether a key is up or down at the time the
+ * function is called, and whether the key was pressed after a previous call
+ * to GetAsyncKeyState.
+ *
+ * @param vKey Specifies one of 256 possible virtual-key codes.
+ * @return If the function succeeds, the return value specifies whether the
+ * key was pressed since the last call to GetAsyncKeyState, and whether the
+ * key is currently up or down. If the most significant bit is set, the key
+ * is down.
+ */
+ short GetAsyncKeyState(int vKey);
+
+ /**
+ * The SetWindowsHookEx function installs an application-defined hook
+ * procedure into a hook chain. You would install a hook procedure to
+ * monitor the system for certain types of events. These events are
+ * associated either with a specific thread or with all threads in the same
+ * desktop as the calling thread.
+ *
+ * @param idHook Specifies the type of hook procedure to be installed.
+ * @param lpfn Pointer to the hook procedure.
+ * @param hMod Handle to the DLL containing the hook procedure pointed to by
+ * the lpfn parameter.
+ * @param dwThreadId Specifies the identifier of the thread with which the
+ * hook procedure is to be associated.
+ * @return If the function succeeds, the return value is the handle to the
+ * hook procedure. If the function fails, the return value is NULL. To get
+ * extended error information, call GetLastError.
+ */
+ HHOOK SetWindowsHookEx(int idHook, HOOKPROC lpfn, HINSTANCE hMod,
+ int dwThreadId);
+
+ /**
+ * The CallNextHookEx function passes the hook information to the next hook
+ * procedure in the current hook chain. A hook procedure can call this
+ * function either before or after processing the hook information.
+ *
+ * @param hhk Ignored.
+ * @param nCode Specifies the hook code passed to the current hook
+ * procedure. The next hook procedure uses this code to determine how to
+ * process the hook information.
+ * @param wParam Specifies the wParam value passed to the current hook
+ * procedure. The meaning of this parameter depends on the type of hook
+ * associated with the current hook chain.
+ * @param lParam Specifies the lParam value passed to the current hook
+ * procedure. The meaning of this parameter depends on the type of hook
+ * associated with the current hook chain.
+ * @return This value is returned by the next hook procedure in the chain.
+ * The current hook procedure must also return this value. The meaning of
+ * the return value depends on the hook type.
+ */
+ LRESULT CallNextHookEx(HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam);
+
+ /**
+ * The CallNextHookEx function passes the hook information to the next hook
+ * procedure in the current hook chain. A hook procedure can call this
+ * function either before or after processing the hook information.
+ *
+ * @param hhk Ignored.
+ * @param nCode Specifies the hook code passed to the current hook
+ * procedure. The next hook procedure uses this code to determine how to
+ * process the hook information.
+ * @param wParam Specifies the wParam value passed to the current hook
+ * procedure. The meaning of this parameter depends on the type of hook
+ * associated with the current hook chain.
+ * @param lParam Specifies the lParam value passed to the current hook
+ * procedure. The meaning of this parameter depends on the type of hook
+ * associated with the current hook chain.
+ * @return This value is returned by the next hook procedure in the chain.
+ * The current hook procedure must also return this value. The meaning of
+ * the return value depends on the hook type.
+ */
+ LRESULT CallNextHookEx(HHOOK hhk, int nCode, WPARAM wParam, Pointer lParam);
+
+ /**
+ * The UnhookWindowsHookEx function removes a hook procedure installed in a
+ * hook chain by the SetWindowsHookEx function.
+ *
+ * @param hhk Handle to the hook to be removed. This parameter is a hook
+ * handle obtained by a previous call to SetWindowsHookEx.
+ * @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 UnhookWindowsHookEx(HHOOK hhk);
+
+ /**
+ * This function retrieves a message from the calling thread's message queue
+ * and places it in the specified structure.
+ *
+ * @param lpMsg Pointer to an MSG structure that receives message
+ * information from the thread's message queue.
+ * @param hWnd Handle to the window whose messages are to be retrieved. One
+ * value has a special meaning.
+ * @param wMsgFilterMin Specifies the integer value of the lowest message
+ * value to be retrieved.
+ * @param wMsgFilterMax Specifies the integer value of the highest message
+ * value to be retrieved.
+ * @return Nonzero indicates that the function retrieves a message other
+ * than WM_QUIT. Zero indicates that the function retrieves the WM_QUIT
+ * message, or that lpMsg is an invalid pointer. To get extended error
+ * information, call GetLastError.
+ */
+ int GetMessage(MSG lpMsg, HWND hWnd, int wMsgFilterMin, int wMsgFilterMax);
+
+ /**
+ * This function checks a thread message queue for a message and places the
+ * message (if any) in the specified structure.
+ *
+ * @param lpMsg Pointer to an MSG structure that receives message
+ * information.
+ * @param hWnd Handle to the window whose messages are to be examined.
+ * @param wMsgFilterMin Specifies the value of the first message in the
+ * range of messages to be examined.
+ * @param wMsgFilterMax Specifies the value of the last message in the range
+ * of messages to be examined.
+ * @param wRemoveMsg Specifies how messages are handled. This parameter can
+ * be one of the following values.
+ * @return Nonzero indicates success. Zero indicates failure.
+ */
+ boolean PeekMessage(MSG lpMsg, HWND hWnd, int wMsgFilterMin,
+ int wMsgFilterMax, int wRemoveMsg);
+
+ /**
+ * This function translates virtual-key messages into character messages.
+ * The character messages are posted to the calling thread's message queue,
+ * to be read the next time the thread calls the GetMessage or PeekMessage
+ * function.
+ *
+ * @param lpMsg Pointer to an MSG structure that contains message
+ * information retrieved from the calling thread's message queue by using
+ * the GetMessage or PeekMessage function.
+ * @return Nonzero indicates that the message is translated, that is, a
+ * character message is posted to the thread's message queue. If the message
+ * is WM_KEYDOWN or WM_SYSKEYDOWN, the return value is nonzero, regardless
+ * of the translation. Zero indicates that the message is not translated,
+ * that is, a character message is not posted to the thread's message queue.
+ */
+ boolean TranslateMessage(MSG lpMsg);
+
+ /**
+ * This function dispatches a message to a window procedure. It is typically
+ * used to dispatch a message retrieved by the GetMessage function.
+ *
+ * @param lpMsg Pointer to an MSG structure that contains the message.
+ * @return The return value specifies the value returned by the window
+ * procedure. Although its meaning depends on the message being dispatched,
+ * the return value generally is ignored.
+ */
+ LRESULT DispatchMessage(MSG lpMsg);
+
+ /**
+ * This function places a message in the message queue associated with the
+ * thread that created the specified window and then returns without waiting
+ * for the thread to process the message. Messages in a message queue are
+ * retrieved by calls to the GetMessage or PeekMessage function.
+ *
+ * @param hWnd Handle to the window whose window procedure is to receive the
+ * message.
+ * @param msg Specifies the message to be posted.
+ * @param wParam Specifies additional message-specific information.
+ * @param lParam Specifies additional message-specific information.
+ */
+ void PostMessage(HWND hWnd, int msg, WPARAM wParam, LPARAM lParam);
+
+ /**
+ * This function indicates to Windows that a thread has made a request to
+ * terminate (quit). It is typically used in response to a WM_DESTROY
+ * message.
+ *
+ * @param nExitCode Specifies an application exit code. This value is used
+ * as the wParam parameter of the WM_QUIT message.
+ */
+ void PostQuitMessage(int nExitCode);
+
+ /**
+ * The GetSystemMetrics function retrieves various system metrics (widths
+ * and heights of display elements) and system configuration settings. All
+ * dimensions retrieved by GetSystemMetrics are in pixels.
+ *
+ * @param nIndex System metric or configuration setting to retrieve. This
+ * parameter can be one of the following values. Note that all SM_CX* values
+ * are widths and all SM_CY* values are heights. Also note that all settings
+ * designed to return Boolean data represent TRUE as any nonzero value, and
+ * FALSE as a zero value.
+ * @return If the function succeeds, the return value is the requested
+ * system metric or configuration setting. If the function fails, the return
+ * value is zero. GetLastError does not provide extended error information.
+ */
+ public int GetSystemMetrics(int nIndex);
+
+ /**
+ * Changes the parent window of the specified child window.
+ *
+ * @param hWndChild A handle to the child window.
+ *
+ * @param hWndNewParent A handle to the new parent window. If this parameter
+ * is NULL, the desktop window becomes the new parent window. If this
+ * parameter is HWND_MESSAGE, the child window becomes a message-only
+ * window.
+ *
+ * @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.
+ */
+ HWND SetParent(HWND hWndChild, HWND hWndNewParent);
+
+ /**
+ * Determines the visibility state of the specified window.
+ *
+ * @param hWnd A handle to the window to be tested.
+ *
+ * @return If the specified window, its parent window, its parent's parent
+ * window, and so forth, have the WS_VISIBLE style, the return value is
+ * nonzero. Otherwise, the return value is zero.
+ *
+ * Because the return value specifies whether the window has the WS_VISIBLE
+ * style, it may be nonzero even if the window is totally obscured by other
+ * windows.
+ */
+ boolean IsWindowVisible(HWND hWnd);
+
+ /**
+ * Changes the position and dimensions of the specified window. For a
+ * top-level window, the position and dimensions are relative to the
+ * upper-left corner of the screen. For a child window, they are relative to
+ * the upper-left corner of the parent window's client area.
+ *
+ * @param hWnd A handle to the window.
+ *
+ * @param X The new position of the left side of the window.
+ *
+ * @param Y The new position of the top of the window.
+ *
+ * @param nWidth The new width of the window.
+ *
+ * @param nHeight The new height of the window.
+ *
+ * @param bRepaint Indicates whether the window is to be repainted. If this
+ * parameter is TRUE, the window receives a message. If the parameter is
+ * FALSE, no repainting of any kind occurs. This applies to the client area,
+ * the nonclient area (including the title bar and scroll bars), and any
+ * part of the parent window uncovered as a result of moving a child window.
+ *
+ * @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 MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight,
+ boolean bRepaint);
+
+ /**
+ * Changes the size, position, and Z order of a child, pop-up, or top-level
+ * window. These windows are ordered according to their appearance on the
+ * screen. The topmost window receives the highest rank and is the first
+ * window in the Z order.
+ *
+ * @param hWnd A handle to the window.
+ *
+ * @param hWndInsertAfter A handle to the window to precede the positioned
+ * window in the Z order.
+ *
+ * @param X The new position of the left side of the window, in client
+ * coordinates.
+ *
+ * @param Y The new position of the top of the window, in client
+ * coordinates.
+ *
+ * @param cx The new width of the window, in pixels.
+ *
+ * @param cy The new height of the window, in pixels.
+ *
+ * @param uFlags The window sizing and positioning flags.
+ *
+ * @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 SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx,
+ int cy, int uFlags);
+
+ /**
+ * Attaches or detaches the input processing mechanism of one thread to that
+ * of another thread.
+ *
+ * @param idAttach The identifier of the thread to be attached to another
+ * thread. The thread to be attached cannot be a system thread.
+ *
+ * @param idAttachTo The identifier of the thread to which idAttach will be
+ * attached. This thread cannot be a system thread. A thread cannot attach
+ * to itself. Therefore, idAttachTo cannot equal idAttach.
+ *
+ * @param fAttach If this parameter is TRUE, the two threads are attached.
+ * If the parameter is FALSE, the threads are detached.
+ *
+ * @return If the function succeeds, the return value is nonzero.
+ */
+ boolean AttachThreadInput(DWORD idAttach, DWORD idAttachTo, boolean fAttach);
+
+ /**
+ * Brings the thread that created the specified window into the foreground
+ * and activates the window. Keyboard input is directed to the window, and
+ * various visual cues are changed for the user. The system assigns a
+ * slightly higher priority to the thread that created the foreground window
+ * than it does to other threads.
+ *
+ * @param hWnd A handle to the window that should be activated and brought
+ * to the foreground.
+ *
+ * @return If the window was brought to the foreground, the return value is
+ * nonzero.
+ */
+ boolean SetForegroundWindow(HWND hWnd);
+
+ /**
+ * Retrieves a handle to the foreground window (the window with which the
+ * user is currently working). The system assigns a slightly higher priority
+ * to the thread that creates the foreground window than it does to other
+ * threads.
+ *
+ * @return The return value is a handle to the foreground window. The
+ * foreground window can be NULL in certain circumstances, such as when a
+ * window is losing activation.
+ */
+ HWND GetForegroundWindow();
+
+ /**
+ * Sets the keyboard focus to the specified window. The window must be
+ * attached to the calling thread's message queue.
+ *
+ * @param hWnd A handle to the window that will receive the keyboard input.
+ * If this parameter is NULL, keystrokes are ignored.
+ *
+ * @return If the function succeeds, the return value is the handle to the
+ * window that previously had the keyboard focus. If the hWnd parameter is
+ * invalid or the window is not attached to the calling thread's message
+ * queue, the return value is NULL. To get extended error information, call
+ * GetLastError.
+ */
+ HWND SetFocus(HWND hWnd);
+
+ /**
+ * Synthesizes keystrokes, mouse motions, and button clicks.
+ *
+ * @param nInputs The number of structures in the pInputs array.
+ *
+ * @param pInputs An array of INPUT structures. Each structure represents an
+ * event to be inserted into the keyboard or mouse input stream.
+ *
+ * @param cbSize The size, in bytes, of an INPUT structure. If cbSize is not
+ * the size of an INPUT structure, the function fails.
+ *
+ * @return The function returns the number of events that it successfully
+ * inserted into the keyboard or mouse input stream. If the function returns
+ * zero, the input was already blocked by another thread. To get extended
+ * error information, call GetLastError.
+ *
+ * This function fails when it is blocked by UIPI. Note that neither
+ * GetLastError nor the return value will indicate the failure was caused by
+ * UIPI blocking.
+ */
+ DWORD SendInput(DWORD nInputs, WinUser.INPUT[] pInputs, int cbSize);
+
+ /**
+ * Waits until the specified process has finished processing its initial
+ * input and is waiting for user input with no input pending, or until the
+ * time-out interval has elapsed.
+ *
+ * @param hProcess A handle to the process. If this process is a console
+ * application or does not have a message queue, WaitForInputIdle returns
+ * immediately.
+ *
+ * @param dwMilliseconds The time-out interval, in milliseconds. If
+ * dwMilliseconds is INFINITE, the function does not return until the
+ * process is idle.
+ *
+ * @return The following table shows the possible return values for this
+ * function.
+ *
+ *
+ * | Return code/value |
+ * Description |
+ *
+ *
+ * | 0 |
+ * The wait was satisfied successfully. |
+ *
+ *
+ * | WAIT_TIMEOUT |
+ * The wait was terminated because the time-out interval elapsed. |
+ *
+ *
+ * | WAIT_FAILED |
+ * An error occurred. |
+ *
+ *
+ */
+ DWORD WaitForInputIdle(HANDLE hProcess, DWORD dwMilliseconds);
+
+ /**
+ * The InvalidateRect function adds a rectangle to the specified window's
+ * update region. The update region represents the portion of the window's
+ * client area that must be redrawn.
+ *
+ * @param hWnd A handle to the window whose update region has changed. If
+ * this parameter is NULL, the system invalidates and redraws all windows,
+ * not just the windows for this application, and sends the WM_ERASEBKGND
+ * and WM_NCPAINT messages before the function returns. Setting this
+ * parameter to NULL is not recommended.
+ *
+ * @param lpRect A pointer to a RECT structure that contains the client
+ * coordinates of the rectangle to be added to the update region. If this
+ * parameter is NULL, the entire client area is added to the update region.
+ *
+ * @param bErase Specifies whether the background within the update region
+ * is to be erased when the update region is processed. If this parameter is
+ * TRUE, the background is erased when the BeginPaint function is called. If
+ * this parameter is FALSE, the background remains unchanged.
+ *
+ * @return If the function succeeds, the return value is nonzero. If the
+ * function fails, the return value is zero.
+ */
+ boolean InvalidateRect(HWND hWnd, RECT lpRect, boolean bErase);
+
+ /**
+ * The RedrawWindow function updates the specified rectangle or region in a
+ * window's client area.
+ *
+ * @param hWnd A handle to the window to be redrawn. If this parameter is
+ * NULL, the desktop window is updated.
+ *
+ * @param lprcUpdate A pointer to a RECT structure containing the
+ * coordinates, in device units, of the update rectangle. This parameter is
+ * ignored if the hrgnUpdate parameter identifies a region.
+ *
+ * @param hrgnUpdate A handle to the update region. If both the hrgnUpdate
+ * and lprcUpdate parameters are NULL, the entire client area is added to
+ * the update region.
+ *
+ * @param flags One or more redraw flags. This parameter can be used to
+ * invalidate or validate a window, control repainting, and control which
+ * windows are affected by RedrawWindow.
+ *
+ * @return If the function succeeds, the return value is nonzero. If the
+ * function fails, the return value is zero.
+ */
+ boolean RedrawWindow(HWND hWnd, RECT lprcUpdate,
+ HRGN hrgnUpdate, DWORD flags);
+
+ /**
+ * Retrieves a handle to a window that has the specified relationship
+ * (Z-Order or owner) to the specified window.
+ *
+ * @param hWnd A handle to a window. The window handle retrieved is relative
+ * to this window, based on the value of the uCmd parameter.
+ *
+ * @param uCmd The relationship between the specified window and the window
+ * whose handle is to be retrieved.
+ *
+ * @return If the function succeeds, the return value is a window handle. If
+ * no window exists with the specified relationship to the specified window,
+ * the return value is NULL. To get extended error information, call
+ * GetLastError.
+ */
+ HWND GetWindow(HWND hWnd, DWORD uCmd);
+
+ /**
+ * The UpdateWindow function updates the client area of the specified window
+ * by sending a WM_PAINT message to the window if the window's update region
+ * is not empty. The function sends a WM_PAINT message directly to the
+ * window procedure of the specified window, bypassing the application
+ * queue. If the update region is empty, no message is sent.
+ *
+ * @param hWnd Handle to the window to be updated.
+ *
+ * @return If the function succeeds, the return value is nonzero. If the
+ * function fails, the return value is zero.
+ */
+ boolean UpdateWindow(HWND hWnd);
+
+ /**
+ * Sets the specified window's show state.
+ *
+ * @param hWnd A handle to the window.
+ *
+ * @param nCmdShow Controls how the window is to be shown. This parameter is
+ * ignored the first time an application calls ShowWindow, if the program
+ * that launched the application provides a STARTUPINFO structure.
+ * Otherwise, the first time ShowWindow is called, the value should be the
+ * value obtained by the WinMain function in its nCmdShow parameter.
+ *
+ * @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 ShowWindow(HWND hWnd, int nCmdShow);
+
+ /**
+ * Minimizes (but does not destroy) the specified window.
+ *
+ * @param hWnd A handle to the window to be minimized.
+ *
+ * @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 CloseWindow(HWND hWnd);
+
+ /**
+ * Defines a system-wide hot key.
+ *
+ * @param hWnd A handle to the window that will receive
+ * @param id The identifier of the hot key
+ * @param fsModifiers The keys that must be pressed in combination with the
+ * key specified by the uVirtKey parameter in order to generate the
+ * @param vk The virtual-key code of the hot key
+ * @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 {@link Kernel32#GetLastError}.
+ * {@link WinUser#WM_HOTKEY} messages generated by the hot key
+ * {@link WinUser#WM_HOTKEY} message.
+ * A combination of the following values
+ *
+ * - {@link WinUser#MOD_ALT} Either ALT key must be held down.
+ * - {@link WinUser#MOD_CONTROL} Either CTRL key must be held down.
+ * - {@link WinUser#MOD_NOREPEAT} Changes the hotkey behavior so that the
+ * keyboard auto-repeat does not yield multiple hotkey notifications.
+ *
+ * Windows Vista and Windows XP/2000: This flag is not supported.
+ * - {@link WinUser#MOD_SHIFT} Either SHIFT key must be held down.
+ *
+ * - {@link WinUser#MOD_WIN} Either WINDOWS key was held down. These keys
+ * are labeled with the Windows logo.
+ *
+ */
+ boolean RegisterHotKey(HWND hWnd, int id, int fsModifiers, int vk);
+
+ /**
+ * Frees a hot key previously registered by the calling thread.
+ *
+ * @param hWnd A handle to the window associated with the hot key to be
+ * freed. This parameter should be NULL if the hot key is not associated
+ * with a window.
+ *
+ * @param id The identifier of the hot key to be freed.
+ *
+ * @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 {@link Kernel32#GetLastError}.
+ */
+ boolean UnregisterHotKey(Pointer hWnd, int id);
+
+ /**
+ * Retrieves the time of the last input event.
+ *
+ * @param plii structure that receives the time of the last input event
+ * @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 {@link Kernel32#GetLastError}.
+ */
+ boolean GetLastInputInfo(LASTINPUTINFO plii);
+
+ /**
+ * Registers a window class for subsequent use in calls to the CreateWindow
+ * or CreateWindowEx function.
+ *
+ * @param lpwcx Type: const WNDCLASSEX* A pointer to a WNDCLASSEX structure.
+ * You must fill the structure with the appropriate class attributes before
+ * passing it to the function.
+ *
+ * @return If the function succeeds, the return value is a class atom that
+ * uniquely identifies the class being registered. This atom can only be
+ * used by the CreateWindow, CreateWindowEx, GetClassInfo, GetClassInfoEx,
+ * FindWindow, FindWindowEx, and UnregisterClass functions and the
+ * IActiveIMMap::FilterClientWindows method.
+ *
+ * If the function fails, the return value is zero. To get extended error
+ * information, call {@link Kernel32#GetLastError}.
+ */
+ public ATOM RegisterClassEx(WNDCLASSEX lpwcx);
+
+ /**
+ * Unregisters a window class, freeing the memory required for the class.
+ *
+ * @param lpClassName [in] Type: LPCTSTR
+ *
+ * A null-terminated string or a class atom. If lpClassName is a string, it
+ * specifies the window class name. This class name must have been
+ * registered by a previous call to the RegisterClass or RegisterClassEx
+ * function. System classes, such as dialog box controls, cannot be
+ * unregistered. If this parameter is an atom, it must be a class atom
+ * created by a previous call to the RegisterClass or RegisterClassEx
+ * function. The atom must be in the low-order word of lpClassName; the
+ * high-order word must be zero.
+ *
+ * @param hInstance [in,optional] Type: HINSTANCE A handle to the instance
+ * of the module that created the class. *
+ *
+ * @return Type: BOOL If the function succeeds, the return value is nonzero.
+ *
+ * If the function fails, the return value is zero. To get extended error
+ * information, call {@link Kernel32#GetLastError}.
+ */
+ public boolean UnregisterClass(WString lpClassName, HINSTANCE hInstance);
+
+ /**
+ * Creates an overlapped, pop-up, or child window with an extended window
+ * style; otherwise, this function is identical to the CreateWindow
+ * function. For more information about creating a window and for full
+ * descriptions of the other parameters of CreateWindowEx, see CreateWindow.
+ *
+ * @param dwExStyle [in] Type: DWORD
+ *
+ * The extended window style of the window being created. For a list of
+ * possible values,see Extended Window Styles.
+ *
+ * @param lpClassName [in, optional] Type: LPCTSTR
+ *
+ * A null-terminated string or a class atom created by a previous call to
+ * the RegisterClass or RegisterClassEx function. The atom must be in the
+ * low-order word of lpClassName; the high-order word must be zero. If
+ * lpClassName is a string, it specifies the window class name. The class
+ * name can be any name registered with RegisterClass or RegisterClassEx,
+ * provided that the module that registers the class is also the module that
+ * creates the window. The class name can also be any of the predefined
+ * system class names.
+ *
+ * @param lpWindowName [in, optional] Type: LPCTSTR
+ *
+ * The window name. If the window style specifies a title bar, the window
+ * title pointed to by lpWindowName is displayed in the title bar. When
+ * using CreateWindow to create controls, such as buttons, check boxes, and
+ * static controls, use lpWindowName to specify the text of the control.
+ * When creating a static control with the SS_ICON style, use lpWindowName
+ * to specify the icon name or identifier. To specify an identifier, use the
+ * syntax "#num".
+ *
+ * @param dwStyle [in] Type: DWORD
+ *
+ * The style of the window being created. This parameter can be a
+ * combination of the window style values, plus the control styles indicated
+ * in the Remarks section.
+ *
+ * @param x [in] Type: int
+ *
+ * The initial horizontal position of the window. For an overlapped or
+ * pop-up window, the x parameter is the initial x-coordinate of the
+ * window's upper-left corner, in screen coordinates. For a child window, x
+ * is the x-coordinate of the upper-left corner of the window relative to
+ * the upper-left corner of the parent window's client area. If x is set to
+ * CW_USEDEFAULT, the system selects the default position for the window's
+ * upper-left corner and ignores the y parameter. CW_USEDEFAULT is valid
+ * only for overlapped windows; if it is specified for a pop-up or child
+ * window, the x and y parameters are set to zero.
+ *
+ * @param y [in] Type: int
+ *
+ * The initial vertical position of the window. For an overlapped or pop-up
+ * window, the y parameter is the initial y-coordinate of the window's
+ * upper-left corner, in screen coordinates. For a child window, y is the
+ * initial y-coordinate of the upper-left corner of the child window
+ * relative to the upper-left corner of the parent window's client area. For
+ * a list box y is the initial y-coordinate of the upper-left corner of the
+ * list box's client area relative to the upper-left corner of the parent
+ * window's client area.
+ *
+ * If an overlapped window is created with the WS_VISIBLE style bit set and
+ * the x parameter is set to CW_USEDEFAULT, then the y parameter determines
+ * how the window is shown. If the y parameter is CW_USEDEFAULT, then the
+ * window manager calls ShowWindow with the SW_SHOW flag after the window
+ * has been created. If the y parameter is some other value, then the window
+ * manager calls ShowWindow with that value as the nCmdShow parameter.
+ *
+ * @param nWidth [in] Type: int
+ *
+ * The width, in device units, of the window. For overlapped windows, nWidth
+ * is the window's width, in screen coordinates, or CW_USEDEFAULT. If nWidth
+ * is CW_USEDEFAULT, the system selects a default width and height for the
+ * window; the default width extends from the initial x-coordinates to the
+ * right edge of the screen; the default height extends from the initial
+ * y-coordinate to the top of the icon area. CW_USEDEFAULT is valid only for
+ * overlapped windows; if CW_USEDEFAULT is specified for a pop-up or child
+ * window, the nWidth and nHeight parameter are set to zero.
+ *
+ * @param nHeight [in] Type: int
+ *
+ * The height, in device units, of the window. For overlapped windows,
+ * nHeight is the window's height, in screen coordinates. If the nWidth
+ * parameter is set to CW_USEDEFAULT, the system ignores nHeight.
+ *
+ * @param hWndParent [in, optional] Type: HWND
+ *
+ * A handle to the parent or owner window of the window being created. To
+ * create a child window or an owned window, supply a valid window handle.
+ * This parameter is optional for pop-up windows.
+ *
+ * To create a message-only window, supply HWND_MESSAGE or a handle to an
+ * existing message-only window.
+ *
+ * @param hMenu [in, optional] Type: HMENU
+ *
+ * A handle to a menu, or specifies a child-window identifier, depending on
+ * the window style. For an overlapped or pop-up window, hMenu identifies
+ * the menu to be used with the window; it can be NULL if the class menu is
+ * to be used. For a child window, hMenu specifies the child-window
+ * identifier, an integer value used by a dialog box control to notify its
+ * parent about events. The application determines the child-window
+ * identifier; it must be unique for all child windows with the same parent
+ * window.
+ *
+ * @param hInstance [in, optional] Type: HINSTANCE
+ *
+ * A handle to the instance of the module to be associated with the window.
+ *
+ * @param lpParam [in, optional] Type: LPVOID
+ *
+ * Pointer to a value to be passed to the window through the CREATESTRUCT
+ * structure (lpCreateParams member) pointed to by the lParam param of the
+ * WM_CREATE message. This message is sent to the created window by this
+ * function before it returns.
+ *
+ * If an application calls CreateWindow to create a MDI client window,
+ * lpParam should point to a CLIENTCREATESTRUCT structure. If an MDI client
+ * window calls CreateWindow to create an MDI child window, lpParam should
+ * point to a MDICREATESTRUCT structure. lpParam may be NULL if no
+ * additional data is needed.
+ *
+ * @return Type: HWND
+ *
+ * If the function succeeds, the return value is a handle to the new window.
+ *
+ * If the function fails, the return value is NULL. To get extended error
+ * information, call GetLastError.
+ *
+ * This function typically fails for one of the following reasons:
+ *
+ * - an invalid parameter value
+ * - the system class was registered by a different module
+ * - The WH_CBT hook is installed and returns a failure code
+ * - if one of the controls in the dialog template is not registered, or its
+ * window window procedure fails WM_CREATE or WM_NCCREATE
+ */
+ public HWND CreateWindowEx(int dwExStyle, WString lpClassName,
+ String lpWindowName, int dwStyle, int x, int y, int nWidth,
+ int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance,
+ LPVOID lpParam);
+
+ /**
+ * Destroys the specified window. The function sends WM_DESTROY and
+ * WM_NCDESTROY messages to the window to deactivate it and remove the
+ * keyboard focus from it. The function also destroys the window's menu,
+ * flushes the thread message queue, destroys timers, removes clipboard
+ * ownership, and breaks the clipboard viewer chain (if the window is at the
+ * top of the viewer chain).
+ *
+ * If the specified window is a parent or owner window, DestroyWindow
+ * automatically destroys the associated child or owned windows when it
+ * destroys the parent or owner window. The function first destroys child or
+ * owned windows, and then it destroys the parent or owner window.
+ *
+ * DestroyWindow also destroys modeless dialog boxes created by the
+ * CreateDialog function.
+ *
+ * @param hWnd [in] Type: HWND A handle to the window to be destroyed.
+ *
+ * @return Type: BOOL If the function succeeds, the return value is nonzero.
+ *
+ * If the function fails, the return value is zero. To get extended error
+ * information, call {@link Kernel32#GetLastError}.
+ */
+ public boolean DestroyWindow(HWND hWnd);
+
+ /**
+ * Retrieves information about a window class, including a handle to the
+ * small icon associated with the window class. The GetClassInfo function
+ * does not retrieve a handle to the small icon.
+ *
+ * @param hinst [in, optional] Type: HINSTANCE
+ *
+ * A handle to the instance of the application that created the class. To
+ * retrieve information about classes defined by the system (such as buttons
+ * or list boxes), set this parameter to NULL.
+ *
+ * @param lpszClass [in] Type: LPCTSTR
+ *
+ * The class name. The name must be that of a preregistered class or a class
+ * registered by a previous call to the RegisterClass or RegisterClassEx
+ * function. Alternatively, this parameter can be a class atom created by a
+ * previous call to RegisterClass or RegisterClassEx. The atom must be in
+ * the low-order word of lpszClass; the high-order word must be zero.
+ *
+ * @param lpwcx [out] Type: LPWNDCLASSEX
+ *
+ * A pointer to a WNDCLASSEX structure that receives the information about
+ * the class.
+ *
+ * @return Type: BOOL If the function finds a matching class and
+ * successfully copies the data, the return value is nonzero.
+ *
+ * If the function fails, the return value is zero. To get extended error
+ * information, call {@link Kernel32#GetLastError} .
+ */
+ public boolean GetClassInfoEx(HINSTANCE hinst, WString lpszClass,
+ WNDCLASSEX lpwcx);
+
+ /**
+ * Calls the default window procedure to provide default processing for any
+ * window messages that an application does not process. This function
+ * ensures that every message is processed. DefWindowProc is called with the
+ * same parameters received by the window procedure.
+ *
+ * @param hWnd [in] Type: HWND
+ *
+ * A handle to the window procedure that received the message.
+ *
+ * @param Msg [in] Type: UINT
+ *
+ * The message.
+ *
+ * @param wParam [in] Type: WPARAM
+ *
+ * Additional message information. The content of this parameter depends on
+ * the value of the Msg parameter.
+ *
+ * @param lParam [in] Type: LPARAM
+ *
+ * Additional message information. The content of this parameter depends on
+ * the value of the Msg parameter.
+ *
+ * @return Type: LRESULT The return value is the result of the message
+ * processing and depends on the message.
+ *
+ * If the function fails, the return value is zero. To get extended error
+ * information, call {@link Kernel32#GetLastError}.
+ */
+ public LRESULT DefWindowProc(HWND hWnd, int Msg, WPARAM wParam,
+ LPARAM lParam);
+
+ /**
+ * Registers the device or type of device for which a window will receive
+ * notifications.
+ *
+ * @param hRecipient [in] A handle to the window or service that will
+ * receive device events for the devices specified in the NotificationFilter
+ * parameter. The same window handle can be used in multiple calls to
+ * RegisterDeviceNotification.
+ *
+ * Services can specify either a window handle or service status handle.
+ *
+ * @param notificationFilter [in] A pointer to a block of data that
+ * specifies the type of device for which notifications should be sent. This
+ * block always begins with the DEV_BROADCAST_HDR structure. The data
+ * following this header is dependent on the value of the dbch_devicetype
+ * member, which can be DBT_DEVTYP_DEVICEINTERFACE or DBT_DEVTYP_HANDLE. For
+ * more information, see Remarks.
+ *
+ * @param Flags [in] This parameter can be one of the following values.
+ * DEVICE_NOTIFY_WINDOW_HANDLE0x00000000 The hRecipient parameter is a
+ * window handle.
+ *
+ * DEVICE_NOTIFY_SERVICE_HANDLE0x00000001 The hRecipient parameter is a
+ * service status handle.
+ *
+ * In addition, you can specify the following value.
+ *
+ * DEVICE_NOTIFY_ALL_INTERFACE_CLASSES0x00000004 Notifies the recipient of
+ * device interface events for all device interface classes. (The
+ * dbcc_classguid member is ignored.)
+ *
+ * This value can be used only if the dbch_devicetype member is
+ * DBT_DEVTYP_DEVICEINTERFACE.
+ *
+ * @return value
+ *
+ * If the function succeeds, the return value is a device notification
+ * handle.
+ *
+ * If the function fails, the return value is NULL. To get extended error
+ * information, call GetLastError.
+ */
+ HDEVNOTIFY RegisterDeviceNotification(HANDLE hRecipient,
+ Structure notificationFilter, int Flags);
+
+ /**
+ * Closes the specified device notification handle.
+ *
+ * @param Handle [in] Device notification handle returned by the
+ * RegisterDeviceNotification function.
+ *
+ * @return Return value
+ *
+ * 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 UnregisterDeviceNotification(HDEVNOTIFY Handle);
+
+ /**
+ * Defines a new window message that is guaranteed to be unique throughout
+ * the system. The message value can be used when sending or posting
+ * messages.
+ *
+ * @param string The message to be registered.
+ *
+ * @return If the message is successfully registered, the return value is a
+ * message identifier in the range 0xC000 through 0xFFFF.
+ *
+ * If the function fails, the return value is zero. To get extended error
+ * information, call GetLastError.
+ *
+ */
+ int RegisterWindowMessage(String string);
+
+ boolean GetIconInfo(HICON hIcon, ICONINFO iconinfo);
+
+ boolean DrawIcon(HDC hDC, int X, int Y, HICON hIcon);
+
+ boolean DrawIconEx(HDC hdc, int xLeft, int yTop, HICON hIcon, int cxWidth, int cyWidth, UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, int diFlags);
+
+ HWND GetDesktopWindow();
+ public static final int DI_MASK = 1;
+ public static final int DI_IMAGE = 2;
+ public static final int DI_NORMAL = 3;
+ public static final int DI_COMPAT = 4;
+ public static final int DI_DEFAULTSIZE = 8;
+
+ int FillRect(HDC hDC, RECT lprc, HANDLE hbr);
+}
\ No newline at end of file
diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/W32Errors.java b/trunk/src/com/sun/jna/platform/win32/W32Errors.java
similarity index 93%
rename from trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/W32Errors.java
rename to trunk/src/com/sun/jna/platform/win32/W32Errors.java
index 458339a45..4bd8bf3e7 100644
--- a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/W32Errors.java
+++ b/trunk/src/com/sun/jna/platform/win32/W32Errors.java
@@ -10,9 +10,9 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
-package com.jpexs.decompiler.flash.gui.jna.platform.win32;
+package com.sun.jna.platform.win32;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinNT.HRESULT;
+import com.sun.jna.platform.win32.WinNT.HRESULT;
// TODO: Auto-generated Javadoc
/**
diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/Win32Exception.java b/trunk/src/com/sun/jna/platform/win32/Win32Exception.java
similarity index 91%
rename from trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/Win32Exception.java
rename to trunk/src/com/sun/jna/platform/win32/Win32Exception.java
index 7d17a6bec..75fede1ae 100644
--- a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/Win32Exception.java
+++ b/trunk/src/com/sun/jna/platform/win32/Win32Exception.java
@@ -14,7 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package com.jpexs.decompiler.flash.gui.jna.platform.win32;
+package com.sun.jna.platform.win32;
/**
*
@@ -32,7 +32,7 @@ package com.jpexs.decompiler.flash.gui.jna.platform.win32;
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinNT.HRESULT;
+import com.sun.jna.platform.win32.WinNT.HRESULT;
/**
* Win32 exception.
diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/WinBase.java b/trunk/src/com/sun/jna/platform/win32/WinBase.java
similarity index 97%
rename from trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/WinBase.java
rename to trunk/src/com/sun/jna/platform/win32/WinBase.java
index 49f2542b2..94708e69a 100644
--- a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/WinBase.java
+++ b/trunk/src/com/sun/jna/platform/win32/WinBase.java
@@ -10,13 +10,13 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
-package com.jpexs.decompiler.flash.gui.jna.platform.win32;
+package com.sun.jna.platform.win32;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.Platform;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.Union;
+import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.ptr.ByteByReference;
import com.sun.jna.win32.StdCallLibrary;
import java.util.Arrays;
diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/WinDef.java b/trunk/src/com/sun/jna/platform/win32/WinDef.java
similarity index 94%
rename from trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/WinDef.java
rename to trunk/src/com/sun/jna/platform/win32/WinDef.java
index 0d535208d..5b1e61af7 100644
--- a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/WinDef.java
+++ b/trunk/src/com/sun/jna/platform/win32/WinDef.java
@@ -10,13 +10,13 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
-package com.jpexs.decompiler.flash.gui.jna.platform.win32;
+package com.sun.jna.platform.win32;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.BaseTSD.LONG_PTR;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.IntegerType;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
+import com.sun.jna.platform.win32.BaseTSD.LONG_PTR;
+import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.ptr.ByReference;
import com.sun.jna.win32.StdCallLibrary;
import java.awt.Rectangle;
diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/WinError.java b/trunk/src/com/sun/jna/platform/win32/WinError.java
similarity index 99%
rename from trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/WinError.java
rename to trunk/src/com/sun/jna/platform/win32/WinError.java
index fb9f22e93..ead581699 100644
--- a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/WinError.java
+++ b/trunk/src/com/sun/jna/platform/win32/WinError.java
@@ -10,9 +10,9 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
-package com.jpexs.decompiler.flash.gui.jna.platform.win32;
+package com.sun.jna.platform.win32;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinNT.HRESULT;
+import com.sun.jna.platform.win32.WinNT.HRESULT;
/**
* Error code definitions for the Win32 API functions. Ported from Windows SDK
diff --git a/trunk/src/com/sun/jna/platform/win32/WinGDI.java b/trunk/src/com/sun/jna/platform/win32/WinGDI.java
new file mode 100644
index 000000000..eab6a8742
--- /dev/null
+++ b/trunk/src/com/sun/jna/platform/win32/WinGDI.java
@@ -0,0 +1,130 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.sun.jna.platform.win32;
+
+/**
+ *
+ * @author petrik
+ */
+import com.sun.jna.Structure;
+import com.sun.jna.platform.win32.WinDef.RECT;
+import com.sun.jna.win32.StdCallLibrary;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Ported from WinGDI.h. Microsoft Windows SDK 6.0A.
+ *
+ * @author dblock[at]dblock.org
+ */
+public interface WinGDI extends StdCallLibrary {
+
+ public int RDH_RECTANGLES = 1;
+
+ public class RGNDATAHEADER extends Structure {
+
+ public int dwSize = size();
+ public int iType = RDH_RECTANGLES; // required
+ public int nCount;
+ public int nRgnSize;
+ public RECT rcBound;
+
+ @Override
+ protected List getFieldOrder() {
+ return Arrays.asList(new String[]{"dwSize", "iType", "nCount", "nRgnSize", "rcBound"});
+ }
+ }
+
+ public class RGNDATA extends Structure {
+
+ public RGNDATAHEADER rdh;
+ public byte[] Buffer;
+
+ @Override
+ protected List getFieldOrder() {
+ return Arrays.asList(new String[]{"rdh", "Buffer"});
+ }
+
+ public RGNDATA() {
+ this(1);
+ }
+
+ public RGNDATA(int bufferSize) {
+ Buffer = new byte[bufferSize];
+ allocateMemory();
+ }
+ }
+ public int RGN_AND = 1;
+ public int RGN_OR = 2;
+ public int RGN_XOR = 3;
+ public int RGN_DIFF = 4;
+ public int RGN_COPY = 5;
+ public int ERROR = 0;
+ public int NULLREGION = 1;
+ public int SIMPLEREGION = 2;
+ public int COMPLEXREGION = 3;
+ public int ALTERNATE = 1;
+ public int WINDING = 2;
+ public int BI_RGB = 0;
+ public int BI_RLE8 = 1;
+ public int BI_RLE4 = 2;
+ public int BI_BITFIELDS = 3;
+ public int BI_JPEG = 4;
+ public int BI_PNG = 5;
+
+ public class BITMAPINFOHEADER extends Structure {
+
+ public int biSize = size();
+ public int biWidth;
+ public int biHeight;
+ public short biPlanes;
+ public short biBitCount;
+ public int biCompression;
+ public int biSizeImage;
+ public int biXPelsPerMeter;
+ public int biYPelsPerMeter;
+ public int biClrUsed;
+ public int biClrImportant;
+
+ @Override
+ protected List getFieldOrder() {
+ return Arrays.asList(new String[]{"biSize", "biWidth", "biHeight", "biPlanes", "biBitCount", "biCompression", "biSizeImage", "biXPelsPerMeter", "biYPelsPerMeter", "biClrUsed", "biClrImportant"});
+ }
+ }
+
+ public class RGBQUAD extends Structure {
+
+ public byte rgbBlue;
+ public byte rgbGreen;
+ public byte rgbRed;
+ public byte rgbReserved = 0;
+
+ @Override
+ protected List getFieldOrder() {
+ return Arrays.asList(new String[]{"rgbBlue", "rgbGreen", "rgbRed", "rgbReserved"});
+ }
+ }
+
+ public class BITMAPINFO extends Structure {
+
+ public BITMAPINFOHEADER bmiHeader = new BITMAPINFOHEADER();
+ public RGBQUAD[] bmiColors = new RGBQUAD[1];
+
+ @Override
+ protected List getFieldOrder() {
+ return Arrays.asList(new String[]{"bmiHeader", "bmiColors"});
+ }
+
+ public BITMAPINFO() {
+ this(1);
+ }
+
+ public BITMAPINFO(int size) {
+ bmiColors = new RGBQUAD[size];
+ }
+ }
+ public int DIB_RGB_COLORS = 0;
+ public int DIB_PAL_COLORS = 1;
+}
\ No newline at end of file
diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/WinNT.java b/trunk/src/com/sun/jna/platform/win32/WinNT.java
similarity index 99%
rename from trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/WinNT.java
rename to trunk/src/com/sun/jna/platform/win32/WinNT.java
index c84777cac..75c925279 100644
--- a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/WinNT.java
+++ b/trunk/src/com/sun/jna/platform/win32/WinNT.java
@@ -10,7 +10,7 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
-package com.jpexs.decompiler.flash.gui.jna.platform.win32;
+package com.sun.jna.platform.win32;
import com.sun.jna.FromNativeContext;
import com.sun.jna.Memory;
@@ -386,12 +386,14 @@ public interface WinNT extends WinError, WinDef, WinBase, BaseTSD {
// AccessSystemAcl access type
//
int ACCESS_SYSTEM_SECURITY = 0x01000000;
+ int PAGE_NOACCESS = 0x01;
int PAGE_READONLY = 0x02;
int PAGE_READWRITE = 0x04;
int PAGE_WRITECOPY = 0x08;
int PAGE_EXECUTE = 0x10;
int PAGE_EXECUTE_READ = 0x20;
int PAGE_EXECUTE_READWRITE = 0x40;
+ int PAGE_GUARD = 0x100;
int SECTION_QUERY = 0x0001;
int SECTION_MAP_WRITE = 0x0002;
int SECTION_MAP_READ = 0x0004;
diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/WinReg.java b/trunk/src/com/sun/jna/platform/win32/WinReg.java
similarity index 92%
rename from trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/WinReg.java
rename to trunk/src/com/sun/jna/platform/win32/WinReg.java
index 3e3bdcce1..cd93e6dca 100644
--- a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/WinReg.java
+++ b/trunk/src/com/sun/jna/platform/win32/WinReg.java
@@ -10,10 +10,10 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
-package com.jpexs.decompiler.flash.gui.jna.platform.win32;
+package com.sun.jna.platform.win32;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.Pointer;
+import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.ptr.ByReference;
import com.sun.jna.win32.StdCallLibrary;
diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/WinUser.java b/trunk/src/com/sun/jna/platform/win32/WinUser.java
similarity index 93%
rename from trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/WinUser.java
rename to trunk/src/com/sun/jna/platform/win32/WinUser.java
index 8fde2d436..35d7ef2d7 100644
--- a/trunk/src/com/jpexs/decompiler/flash/gui/jna/platform/win32/WinUser.java
+++ b/trunk/src/com/sun/jna/platform/win32/WinUser.java
@@ -10,23 +10,23 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU
* Lesser General Public License for more details.
*/
-package com.jpexs.decompiler.flash.gui.jna.platform.win32;
+package com.sun.jna.platform.win32;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.BaseTSD.ULONG_PTR;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinDef.HBRUSH;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinDef.HCURSOR;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinDef.HICON;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinDef.HINSTANCE;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinDef.HWND;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinDef.LPARAM;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinDef.LRESULT;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinDef.WPARAM;
-import com.jpexs.decompiler.flash.gui.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.Callback;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.Union;
import com.sun.jna.WString;
+import com.sun.jna.platform.win32.BaseTSD.ULONG_PTR;
+import com.sun.jna.platform.win32.WinDef.HBRUSH;
+import com.sun.jna.platform.win32.WinDef.HCURSOR;
+import com.sun.jna.platform.win32.WinDef.HICON;
+import com.sun.jna.platform.win32.WinDef.HINSTANCE;
+import com.sun.jna.platform.win32.WinDef.HWND;
+import com.sun.jna.platform.win32.WinDef.LPARAM;
+import com.sun.jna.platform.win32.WinDef.LRESULT;
+import com.sun.jna.platform.win32.WinDef.WPARAM;
+import com.sun.jna.platform.win32.WinNT.HANDLE;
import com.sun.jna.win32.StdCallLibrary;
import java.util.Arrays;
import java.util.List;