From 4218a075499f3937c1bfa3cf28ea967be2ca2530 Mon Sep 17 00:00:00 2001 From: Tobias Wolf Date: Sat, 1 Dec 2012 17:46:10 +0100 Subject: [PATCH] code extension for creating and registering win32 windows Create new code for registering new window classes and creating window example. Listening for win32 window events. Listening for logoff/logon events. Created also new api for 'Wtsapi32.dll'. --- .../com/sun/jna/platform/win32/User32.java | 2826 ++++++++++------- .../com/sun/jna/platform/win32/WinDef.java | 766 +++-- .../com/sun/jna/platform/win32/WinUser.java | 1386 ++++---- .../com/sun/jna/platform/win32/Wtsapi32.java | 95 + .../jna/platform/win32/Win32WindowTest.java | 219 ++ 5 files changed, 3192 insertions(+), 2100 deletions(-) create mode 100644 contrib/platform/src/com/sun/jna/platform/win32/Wtsapi32.java create mode 100644 contrib/platform/test/com/sun/jna/platform/win32/Win32WindowTest.java diff --git a/contrib/platform/src/com/sun/jna/platform/win32/User32.java b/contrib/platform/src/com/sun/jna/platform/win32/User32.java index 57bbf2eabd..39967e001f 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/User32.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/User32.java @@ -1,1087 +1,1739 @@ -/* Copyright (c) 2007 Timothy Wall, 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.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 - */ -public interface User32 extends StdCallLibrary, WinUser { - - User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class, - W32APIOptions.DEFAULT_OPTIONS); - - /** - * 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/valueDescription
0The wait was satisfied successfully.
WAIT_TIMEOUTThe wait was terminated because the time-out interval elapsed.
WAIT_FAILEDAn 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.ByReference 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.ByReference 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 {@link WinUser#WM_HOTKEY} messages generated by the hot key - * - * @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 {@link WinUser#WM_HOTKEY} message.
- * A combination of the following values - *

- * @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}. - */ - 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); -} +/* Copyright (c) 2007 Timothy Wall, 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 java.util.Arrays; +import java.util.List; + +import com.sun.jna.Callback; +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; + +// TODO: Auto-generated Javadoc +/** + * 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 + */ +public interface User32 extends StdCallLibrary, WinUser { + + /** The instance. */ + User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class, + W32APIOptions.DEFAULT_OPTIONS); + + int CS_GLOBALCLASS = 0x4000; + + int WS_EX_TOPMOST = 0x00000008; + + int WS_OVERLAPPED = 0x00000000; + + /** + * 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/valueDescription
0The wait was satisfied successfully.
WAIT_TIMEOUTThe wait was terminated because the time-out interval + * elapsed.
WAIT_FAILEDAn 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.ByReference 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.ByReference 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 + *

+ */ + 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); + + /** + * Contains window class information. It is used with the RegisterClassEx + * and GetClassInfoEx functions. + * + * The WNDCLASSEX structure is similar to the WNDCLASS structure. There are + * two differences. WNDCLASSEX includes the cbSize member, which specifies + * the size of the structure, and the hIconSm member, which contains a + * handle to a small icon associated with the window class. + */ + public class WNDCLASSEX extends Structure { + + /** + * The Class ByReference. + */ + public static class ByReference extends WNDCLASSEX implements + Structure.ByReference { + } + + /** + * Instantiates a new wndclassex. + */ + public WNDCLASSEX() { + } + + /** + * Instantiates a new wndclassex. + * + * @param memory + * the memory + */ + public WNDCLASSEX(Pointer memory) { + super(memory); + read(); + } + + /** The cb size. */ + public int cbSize = this.size(); + + /** The style. */ + public int style; + + /** The lpfn wnd proc. */ + public Callback lpfnWndProc; + + /** The cb cls extra. */ + public int cbClsExtra; + + /** The cb wnd extra. */ + public int cbWndExtra; + + /** The h instance. */ + public HINSTANCE hInstance; + + /** The h icon. */ + public HICON hIcon; + + /** The h cursor. */ + public HCURSOR hCursor; + + /** The hbr background. */ + public HBRUSH hbrBackground; + + /** The lpsz menu name. */ + public String lpszMenuName; + + /** The lpsz class name. */ + public WString lpszClassName; + + /** The h icon sm. */ + public HICON hIconSm; + + /* + * (non-Javadoc) + * + * @see com.sun.jna.Structure#getFieldOrder() + */ + @Override + protected List getFieldOrder() { + return Arrays.asList(new String[] { "cbSize", "style", + "lpfnWndProc", "cbClsExtra", "cbWndExtra", "hInstance", + "hIcon", "hCursor", "hbrBackground", "lpszMenuName", + "lpszClassName", "hIconSm" }); + } + } + + /** + * An application-defined function that processes messages sent to a window. + * The WNDPROC type defines a pointer to this callback function. + * + * WindowProc is a placeholder for the application-defined function name. + */ + public interface WindowProc extends Callback { + + /** + * @param hwnd + * [in] Type: HWND + * + * A handle to the window. + * + * @param uMsg + * [in] Type: UINT + * + * The message. + * + * For lists of the system-provided messages, see + * System-Defined Messages. + * + * @param wParam + * [in] Type: WPARAM + * + * Additional message information. The contents of this + * parameter depend on the value of the uMsg parameter. + * + * @param lParam + * [in] Type: LPARAM + * + * Additional message information. The contents of this + * parameter depend on the value of the uMsg parameter. + * + * @return the lresult + */ + LRESULT callback(HWND hwnd, int uMsg, WPARAM wParam, LPARAM lParam); + } +} diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinDef.java b/contrib/platform/src/com/sun/jna/platform/win32/WinDef.java index 5c1d596019..b1303886e7 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinDef.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinDef.java @@ -25,359 +25,425 @@ import com.sun.jna.win32.StdCallLibrary; /** - * Ported from Windef.h (various macros and types). - * Microsoft Windows SDK 6.0A. + * Ported from Windef.h (various macros and types). Microsoft Windows SDK 6.0A. + * * @author dblock[at]dblock.org */ @SuppressWarnings("serial") public interface WinDef extends StdCallLibrary { - int MAX_PATH = 260; - - /** - * 16-bit unsigned integer. - */ - public static class WORD extends IntegerType { - public WORD() { - this(0); - } - - public WORD(long value) { - super(2, value, true); - } - } - - /** - * 32-bit unsigned integer. - */ - public static class DWORD extends IntegerType { - public DWORD() { - this(0); - } - - public DWORD(long value) { - super(4, value, true); - } - - /** - * Low WORD. - * @return - * Low WORD. - */ - public WORD getLow() { - return new WORD(longValue() & 0xFFFF); - } - - /** - * High WORD. - * @return - * High WORD. - */ - public WORD getHigh() { - return new WORD((longValue() >> 16) & 0xFFFF); - } - } - - /** - * 32-bit signed integer. - */ - public static class LONG extends IntegerType { - public LONG() { - this(0); - } - - public LONG(long value) { - super(Native.LONG_SIZE, value); - } - } - - /** - * Handle to a device context (DC). - */ - public static class HDC extends HANDLE { - public HDC() { - - } - - public HDC(Pointer p) { - super(p); - } - } - - /** - * Handle to an icon. - */ - public static class HICON extends HANDLE { - public HICON() { - - } - - public HICON(Pointer p) { - super(p); - } - } - - /** - * Handle to a cursor. - */ - public static class HCURSOR extends HICON { - public HCURSOR() { - - } - - public HCURSOR(Pointer p) { - super(p); - } - } - - /** - * Handle to a cursor. - */ - public static class HMENU extends HANDLE { - public HMENU() { - - } - - public HMENU(Pointer p) { - super(p); - } - } - - /** - * Handle to a pen. - */ - public static class HPEN extends HANDLE { - public HPEN() { - - } - - public HPEN(Pointer p) { - super(p); - } - } - - /** - * Handle to a resource. - */ - public static class HRSRC extends HANDLE { - public HRSRC() { - - } - - public HRSRC(Pointer p) { - super(p); - } - } - - /** - * Handle to a palette. - */ - public static class HPALETTE extends HANDLE { - public HPALETTE() { - - } - - public HPALETTE(Pointer p) { - super(p); - } - } - - /** - * Handle to a bitmap. - */ - public static class HBITMAP extends HANDLE { - public HBITMAP() { - - } - - public HBITMAP(Pointer p) { - super(p); - } - } - - /** - * Handle to a region. - */ - public static class HRGN extends HANDLE { - public HRGN() { - - } - - public HRGN(Pointer p) { - super(p); - } - } - - /** - * Handle to a window. - */ - public static class HWND extends HANDLE { - public HWND() { - - } - - public HWND(Pointer p) { - super(p); - } - } - - /** - * Handle to an instance. - */ - public static class HINSTANCE extends HANDLE { - - } - - /** - * Handle to a module. The value is the base address of the module. - */ - public static class HMODULE extends HINSTANCE { - - } - - /** - * Handle to a font. - */ - public static class HFONT extends HANDLE { - public HFONT() { - - } - - public HFONT(Pointer p) { - super(p); - } - } - - /** - * Message parameter. - */ - public static class LPARAM extends LONG_PTR { - public LPARAM() { - this(0); - } - - public LPARAM(long value) { - super(value); - } - } - - /** - * Signed result of message processing. - */ - public static class LRESULT extends LONG_PTR { - public LRESULT() { - this(0); - } - - public LRESULT(long value) { - super(value); - } - } - - /** Integer type big enough for a pointer. */ - public static class INT_PTR extends IntegerType { - public INT_PTR() { - super(Pointer.SIZE); - } - - public INT_PTR(long value) { - super(Pointer.SIZE, value); - } - - public Pointer toPointer() { - return Pointer.createConstant(longValue()); - } - } - - /** - * Unsigned INT_PTR. - */ - public static class UINT_PTR extends IntegerType { - public UINT_PTR() { - super(Pointer.SIZE); - } - - public UINT_PTR(long value) { - super(Pointer.SIZE, value, true); - } - - public Pointer toPointer() { - return Pointer.createConstant(longValue()); - } - } - - /** - * Message parameter. - */ - public static class WPARAM extends UINT_PTR { - public WPARAM() { - this(0); - } - - public WPARAM(long value) { - super(value); - } - } - - public class RECT extends Structure { - public int left; - public int top; - public int right; - public int bottom; - - protected List getFieldOrder() { - return Arrays.asList(new String[] { "left", "top", "right", "bottom" }); - } - - public Rectangle toRectangle() { - return new Rectangle(left, top, right-left, bottom-top); - } - - public String toString() { - return "[(" + left + "," + top + ")(" + right + "," + bottom + ")]"; - } - } - - /** - * 32-bit unsigned integer. - */ - public static class ULONG extends IntegerType { - public ULONG() { - this(0); - } - - public ULONG(long value) { - super(Native.LONG_SIZE, value, true); - } - - public static class ByReference implements Structure.ByReference { - - } - } - - /** - * 64-bit unsigned integer. - */ - public static class ULONGLONG extends IntegerType { - public ULONGLONG() { - this(0); - } - - public ULONGLONG(long value) { - super(8, value, true); - } - } - - /** - * 64-bit unsigned integer. - */ - public static class DWORDLONG extends IntegerType { - public DWORDLONG() { - this(0); - } - - public DWORDLONG(long value) { - super(8, value, true); - } - } + int MAX_PATH = 260; + + /** + * 16-bit unsigned integer. + */ + public static class WORD extends IntegerType { + public WORD() { + this(0); + } + + public WORD(long value) { + super(2, value, true); + } + } + + /** + * 32-bit unsigned integer. + */ + public static class DWORD extends IntegerType { + public DWORD() { + this(0); + } + + public DWORD(long value) { + super(4, value, true); + } + + /** + * Low WORD. + * + * @return Low WORD. + */ + public WORD getLow() { + return new WORD(longValue() & 0xFF); + } + + /** + * High WORD. + * + * @return High WORD. + */ + public WORD getHigh() { + return new WORD((longValue() >> 16) & 0xFF); + } + } + + /** + * 32-bit signed integer. + */ + public static class LONG extends IntegerType { + public LONG() { + this(0); + } + + public LONG(long value) { + super(Native.LONG_SIZE, value); + } + } + + /** + * Handle to a device context (DC). + */ + public static class HDC extends HANDLE { + public HDC() { + + } + + public HDC(Pointer p) { + super(p); + } + } + + /** + * Handle to an icon. + */ + public static class HICON extends HANDLE { + public HICON() { + + } + + public HICON(Pointer p) { + super(p); + } + } + + /** + * Handle to a cursor. + */ + public static class HCURSOR extends HICON { + public HCURSOR() { + + } + + public HCURSOR(Pointer p) { + super(p); + } + } + + /** + * Handle to a cursor. + */ + public static class HMENU extends HANDLE { + public HMENU() { + + } + + public HMENU(Pointer p) { + super(p); + } + } + + /** + * Handle to a pen. + */ + public static class HPEN extends HANDLE { + public HPEN() { + + } + + public HPEN(Pointer p) { + super(p); + } + } + + /** + * Handle to a resource. + */ + public static class HRSRC extends HANDLE { + public HRSRC() { + + } + + public HRSRC(Pointer p) { + super(p); + } + } + + /** + * Handle to a palette. + */ + public static class HPALETTE extends HANDLE { + public HPALETTE() { + + } + + public HPALETTE(Pointer p) { + super(p); + } + } + + /** + * Handle to a bitmap. + */ + public static class HBITMAP extends HANDLE { + public HBITMAP() { + + } + + public HBITMAP(Pointer p) { + super(p); + } + } + + /** + * Handle to a region. + */ + public static class HRGN extends HANDLE { + public HRGN() { + + } + + public HRGN(Pointer p) { + super(p); + } + } + + /** + * Handle to a window. + */ + public static class HWND extends HANDLE { + public HWND() { + + } + + public HWND(Pointer p) { + super(p); + } + } + + /** + * Handle to an instance. + */ + public static class HINSTANCE extends HANDLE { + + } + + /** + * Handle to a module. The value is the base address of the module. + */ + public static class HMODULE extends HINSTANCE { + + } + + /** + * Handle to a font. + */ + public static class HFONT extends HANDLE { + public HFONT() { + + } + + public HFONT(Pointer p) { + super(p); + } + } + + /** + * Message parameter. + */ + public static class LPARAM extends LONG_PTR { + public LPARAM() { + this(0); + } + + public LPARAM(long value) { + super(value); + } + } + + /** + * Signed result of message processing. + */ + public static class LRESULT extends LONG_PTR { + public LRESULT() { + this(0); + } + + public LRESULT(long value) { + super(value); + } + } + + /** Integer type big enough for a pointer. */ + public static class INT_PTR extends IntegerType { + public INT_PTR() { + super(Pointer.SIZE); + } + + public INT_PTR(long value) { + super(Pointer.SIZE, value); + } + + public Pointer toPointer() { + return Pointer.createConstant(longValue()); + } + } + + /** + * Unsigned INT_PTR. + */ + public static class UINT_PTR extends IntegerType { + public UINT_PTR() { + super(Pointer.SIZE); + } + + public UINT_PTR(long value) { + super(Pointer.SIZE, value, true); + } + + public Pointer toPointer() { + return Pointer.createConstant(longValue()); + } + } + + /** + * Message parameter. + */ + public static class WPARAM extends UINT_PTR { + public WPARAM() { + this(0); + } + + public WPARAM(long value) { + super(value); + } + } + + public class RECT extends Structure { + public int left; + public int top; + public int right; + public int bottom; + + protected List getFieldOrder() { + return Arrays.asList(new String[] { "left", "top", "right", + "bottom" }); + } + + public Rectangle toRectangle() { + return new Rectangle(left, top, right - left, bottom - top); + } + + public String toString() { + return "[(" + left + "," + top + ")(" + right + "," + bottom + ")]"; + } + } + + /** + * 32-bit unsigned integer. + */ + public static class ULONG extends IntegerType { + public ULONG() { + this(0); + } + + public ULONG(long value) { + super(Native.LONG_SIZE, value, true); + } + + public static class ByReference implements Structure.ByReference { + + } + } + + /** + * 64-bit unsigned integer. + */ + public static class ULONGLONG extends IntegerType { + public ULONGLONG() { + this(0); + } + + public ULONGLONG(long value) { + super(8, value, true); + } + } + + /** + * 64-bit unsigned integer. + */ + public static class DWORDLONG extends IntegerType { + public DWORDLONG() { + this(0); + } + + public DWORDLONG(long value) { + super(8, value, true); + } + } + + /** + * Handle to a bitmap. + */ + public static class HBRUSH extends HANDLE { + public HBRUSH() { + + } + + public HBRUSH(Pointer p) { + super(p); + } + } + + /** + * 16-bit unsigned integer. + */ + public static class ATOM extends WORD { + public ATOM() { + this(0); + } + + public ATOM(long value) { + super(value); + } + } + + /** + * Message parameter. + */ + public static class LPVOID extends LONG_PTR { + public LPVOID() { + this(0); + } + + public LPVOID(long value) { + super(value); + } + } + + public class POINT extends Structure { + + public static class ByReference extends POINT implements + Structure.ByReference { + } + + public POINT() { + } + + public POINT(Pointer memory) { + super(memory); + read(); + } + + public int x, y; + + public POINT(int x, int y) { + this.x = x; + this.y = y; + } + + protected List getFieldOrder() { + return Arrays.asList(new String[] { "x", "y" }); + } + } } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinUser.java b/contrib/platform/src/com/sun/jna/platform/win32/WinUser.java index b8224ce080..219002ac5b 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinUser.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinUser.java @@ -28,667 +28,727 @@ * @author dblock[at]dblock.org */ public interface WinUser extends StdCallLibrary, WinDef { - HWND HWND_BROADCAST = new HWND(Pointer.createConstant(0xFFFF)); - - int FLASHW_STOP = 0; - int FLASHW_CAPTION = 1; - int FLASHW_TRAY = 2; - int FLASHW_ALL = (FLASHW_CAPTION | FLASHW_TRAY); - int FLASHW_TIMER = 4; - int FLASHW_TIMERNOFG = 12; - - int IMAGE_BITMAP = 0; - int IMAGE_ICON = 1; - int IMAGE_CURSOR = 2; - int IMAGE_ENHMETAFILE = 3; - - int LR_DEFAULTCOLOR = 0x0000; - int LR_MONOCHROME = 0x0001; - int LR_COLOR = 0x0002; - int LR_COPYRETURNORG = 0x0004; - int LR_COPYDELETEORG = 0x0008; - int LR_LOADFROMFILE = 0x0010; - int LR_LOADTRANSPARENT = 0x0020; - int LR_DEFAULTSIZE = 0x0040; - int LR_VGACOLOR = 0x0080; - int LR_LOADMAP3DCOLORS = 0x1000; - int LR_CREATEDIBSECTION = 0x2000; - int LR_COPYFROMRESOURCE = 0x4000; - int LR_SHARED = 0x8000; - - public class GUITHREADINFO extends Structure { - public int cbSize = size(); - public int flags; - public HWND hwndActive; - public HWND hwndFocus; - public HWND hwndCapture; - public HWND hwndMenuOwner; - public HWND hwndMoveSize; - public HWND hwndCaret; - public RECT rcCaret; - - protected List getFieldOrder() { - return Arrays.asList(new String[] { "cbSize", "flags", "hwndActive", "hwndFocus", "hwndCapture", "hwndMenuOwner", "hwndMoveSize", "hwndCaret", "rcCaret" }); - } - } - - public class WINDOWINFO extends Structure { - public int cbSize = size(); - public RECT rcWindow; - public RECT rcClient; - public int dwStyle; - public int dwExStyle; - public int dwWindowStatus; - public int cxWindowBorders; - public int cyWindowBorders; - public short atomWindowType; - public short wCreatorVersion; - protected List getFieldOrder() { - return Arrays.asList(new String[] { "cbSize", "rcWindow", "rcClient", "dwStyle", "dwExStyle", "dwWindowStatus", "cxWindowBorders", "cyWindowBorders", "atomWindowType", "wCreatorVersion" }); - } - } - - int GWL_EXSTYLE = -20; - int GWL_STYLE = -16; - int GWL_WNDPROC = -4; - int GWL_HINSTANCE = -6; - int GWL_ID = -12; - int GWL_USERDATA = -21; - int DWL_DLGPROC = 4; - - int DWL_MSGRESULT = 0; - int DWL_USER = 8; - - int WS_MAXIMIZE = 0x01000000; - int WS_VISIBLE = 0x10000000; - int WS_MINIMIZE = 0x20000000; - int WS_CHILD = 0x40000000; - int WS_POPUP = 0x80000000; - int WS_EX_COMPOSITED = 0x20000000; - int WS_EX_LAYERED = 0x80000; - int WS_EX_TRANSPARENT = 32; - - int LWA_COLORKEY = 1; - int LWA_ALPHA = 2; - int ULW_COLORKEY = 1; - int ULW_ALPHA = 2; - int ULW_OPAQUE = 4; - - /** Defines the x- and y-coordinates of a point. */ - public class POINT extends Structure { - public int x, y; - public POINT() { } - public POINT(int x, int y) { - this.x = x; - this.y = y; - } - protected List getFieldOrder() { - return Arrays.asList(new String[] { "x", "y" }); - } - } - - public class MSG extends Structure { - public HWND hWnd; - public int message; - public WPARAM wParam; - public LPARAM lParam; - public int time; - public POINT pt; - protected List getFieldOrder() { - return Arrays.asList(new String[] { "hWnd", "message", "wParam", "lParam", "time", "pt" }); - } - } - - public class FLASHWINFO extends Structure { - public int cbSize; - public HANDLE hWnd; - public int dwFlags; - public int uCount; - public int dwTimeout; - protected List getFieldOrder() { - return Arrays.asList(new String[] { "cbSize", "hWnd", "dwFlags", "uCount", "dwTimeout" }); - } - } - - public interface WNDENUMPROC extends StdCallCallback { - /** Return whether to continue enumeration. */ - boolean callback(HWND hWnd, Pointer data); - } - - public interface LowLevelKeyboardProc extends HOOKPROC { - LRESULT callback(int nCode, WPARAM wParam, KBDLLHOOKSTRUCT lParam); - } - - /** Specifies the width and height of a rectangle. */ - public class SIZE extends Structure { - public int cx, cy; - public SIZE() { } - public SIZE(int w, int h) { - this.cx = w; - this.cy = h; - } - protected List getFieldOrder() { - return Arrays.asList(new String[] { "cx", "cy" }); - } - } - - int AC_SRC_OVER = 0x00; - int AC_SRC_ALPHA = 0x01; - int AC_SRC_NO_PREMULT_ALPHA = 0x01; - int AC_SRC_NO_ALPHA = 0x02; - - public class BLENDFUNCTION extends Structure { - public byte BlendOp = AC_SRC_OVER; // only valid value - public byte BlendFlags = 0; // only valid value - public byte SourceConstantAlpha; - public byte AlphaFormat; - protected List getFieldOrder() { - return Arrays.asList(new String[] { "BlendOp", "BlendFlags", "SourceConstantAlpha", "AlphaFormat"}); - } - } - - int VK_SHIFT = 16; - int VK_LSHIFT = 0xA0; - int VK_RSHIFT = 0xA1; - int VK_CONTROL = 17; - int VK_LCONTROL = 0xA2; - int VK_RCONTROL = 0xA3; - int VK_MENU = 18; - int VK_LMENU = 0xA4; - int VK_RMENU = 0xA5; - - int MOD_ALT = 0x0001; - int MOD_CONTROL = 0x0002; - int MOD_NOREPEAT = 0x4000; - int MOD_SHIFT = 0x0004; - int MOD_WIN = 0x0008; - - int WH_KEYBOARD = 2; - int WH_MOUSE = 7; - int WH_KEYBOARD_LL = 13; - int WH_MOUSE_LL = 14; - - public class HHOOK extends HANDLE { - - } - - public interface HOOKPROC extends StdCallCallback { - - } - - /** - * The WM_PAINT message is sent when the system or another application makes a request to paint a portion of an \ - * application's window. - */ - int WM_PAINT = 0x000F; - - /** - * Sent as a signal that a window or an application should terminate. - */ - int WM_CLOSE = 0x0010; - - /** - * Indicates a request to terminate an application, and is generated when the application calls the PostQuitMessage - * function. - */ - int WM_QUIT = 0x0012; - - /** - * Sent to a window when the window is about to be hidden or shown. - */ - int WM_SHOWWINDOW = 0x0018; - - /** - * Sent to the parent window of an owner-drawn button, combo box, list box, or menu when a visual aspect of the - * button, combo box, list box, or menu has changed. - */ - int WM_DRAWITEM = 0x002B; - - /** - * Posted to the window with the keyboard focus when a nonsystem key is pressed. A nonsystem key is a key that is - * pressed when the ALT key is not pressed. - */ - int WM_KEYDOWN = 0x0100; - - /** - * Posted to the window with the keyboard focus when a WM_KEYDOWN message is translated by the TranslateMessage - * function. The WM_CHAR message contains the character code of the key that was pressed. - */ - int WM_CHAR = 0x0102; - - /** - * A window receives this message when the user chooses a command from the Window menu (formerly known as the system - * or control menu) or when the user chooses the maximize button, minimize button, restore button, or close button. - */ - int WM_SYSCOMMAND = 0x0112; - - /** - * An application sends the WM_MDIMAXIMIZE message to a multiple-document interface (MDI) client window to maximize - * an MDI child window. - */ - int WM_MDIMAXIMIZE = 0x0225; - - /** - * Posted when the user presses a hot key registered by the RegisterHotKey function. - * The message is placed at the top of the message queue associated with the thread that registered the hot key. - */ - int WM_HOTKEY = 0x0312; - - int WM_KEYUP = 257; - int WM_SYSKEYDOWN = 260; - int WM_SYSKEYUP = 261; - - public class KBDLLHOOKSTRUCT extends Structure { - public int vkCode; - public int scanCode; - public int flags; - public int time; - public ULONG_PTR dwExtraInfo; - protected List getFieldOrder() { - return Arrays.asList(new String[] { "vkCode", "scanCode", "flags", "time", "dwExtraInfo" }); - } - } - - int SM_CXSCREEN = 0; - int SM_CYSCREEN = 1; - int SM_CXVSCROLL = 2; - int SM_CYHSCROLL = 3; - int SM_CYCAPTION = 4; - int SM_CXBORDER = 5; - int SM_CYBORDER = 6; - int SM_CXDLGFRAME = 7; - int SM_CYDLGFRAME = 8; - int SM_CYVTHUMB = 9; - int SM_CXHTHUMB = 10; - int SM_CXICON = 11; - int SM_CYICON = 12; - int SM_CXCURSOR = 13; - int SM_CYCURSOR = 14; - int SM_CYMENU = 15; - int SM_CXFULLSCREEN = 16; - int SM_CYFULLSCREEN = 17; - int SM_CYKANJIWINDOW = 18; - int SM_MOUSEPRESENT = 19; - int SM_CYVSCROLL = 20; - int SM_CXHSCROLL = 21; - int SM_DEBUG = 22; - int SM_SWAPBUTTON = 23; - int SM_RESERVED1 = 24; - int SM_RESERVED2 = 25; - int SM_RESERVED3 = 26; - int SM_RESERVED4 = 27; - int SM_CXMIN = 28; - int SM_CYMIN = 29; - int SM_CXSIZE = 30; - int SM_CYSIZE = 31; - int SM_CXFRAME = 32; - int SM_CYFRAME = 33; - int SM_CXMINTRACK = 34; - int SM_CYMINTRACK = 35; - int SM_CXDOUBLECLK = 36; - int SM_CYDOUBLECLK = 37; - int SM_CXICONSPACING = 38; - int SM_CYICONSPACING = 39; - int SM_MENUDROPALIGNMENT = 40; - int SM_PENWINDOWS = 41; - int SM_DBCSENABLED = 42; - int SM_CMOUSEBUTTONS = 43; - - int SM_CXFIXEDFRAME = SM_CXDLGFRAME; /* ;win40 name change */ - int SM_CYFIXEDFRAME = SM_CYDLGFRAME; /* ;win40 name change */ - int SM_CXSIZEFRAME = SM_CXFRAME; /* ;win40 name change */ - int SM_CYSIZEFRAME = SM_CYFRAME; /* ;win40 name change */ - - int SM_SECURE = 44; - int SM_CXEDGE = 45; - int SM_CYEDGE = 46; - int SM_CXMINSPACING = 47; - int SM_CYMINSPACING = 48; - int SM_CXSMICON = 49; - int SM_CYSMICON = 50; - int SM_CYSMCAPTION = 51; - int SM_CXSMSIZE = 52; - int SM_CYSMSIZE = 53; - int SM_CXMENUSIZE = 54; - int SM_CYMENUSIZE = 55; - int SM_ARRANGE = 56; - int SM_CXMINIMIZED = 57; - int SM_CYMINIMIZED = 58; - int SM_CXMAXTRACK = 59; - int SM_CYMAXTRACK = 60; - int SM_CXMAXIMIZED = 61; - int SM_CYMAXIMIZED = 62; - int SM_NETWORK = 63; - int SM_CLEANBOOT = 67; - int SM_CXDRAG = 68; - int SM_CYDRAG = 69; - int SM_SHOWSOUNDS = 70; - int SM_CXMENUCHECK = 71; - int SM_CYMENUCHECK = 72; - int SM_SLOWMACHINE = 73; - int SM_MIDEASTENABLED = 74; - int SM_MOUSEWHEELPRESENT = 75; - int SM_XVIRTUALSCREEN = 76; - int SM_YVIRTUALSCREEN = 77; - int SM_CXVIRTUALSCREEN = 78; - int SM_CYVIRTUALSCREEN = 79; - int SM_CMONITORS = 80; - int SM_SAMEDISPLAYFORMAT = 81; - int SM_IMMENABLED = 82; - int SM_CXFOCUSBORDER = 83; - int SM_CYFOCUSBORDER = 84; - int SM_TABLETPC = 86; - int SM_MEDIACENTER = 87; - int SM_STARTER = 88; - int SM_SERVERR2 = 89; - int SM_MOUSEHORIZONTALWHEELPRESENT = 91; - int SM_CXPADDEDBORDER = 92; - int SM_REMOTESESSION = 0x1000; - int SM_SHUTTINGDOWN = 0x2000; - int SM_REMOTECONTROL = 0x2001; - int SM_CARETBLINKINGENABLED = 0x2002; - - int SW_HIDE = 0; - int SW_SHOWNORMAL = 1; - int SW_NORMAL = 1; - int SW_SHOWMINIMIZED = 2; - int SW_SHOWMAXIMIZED = 3; - int SW_MAXIMIZE = 3; - int SW_SHOWNOACTIVATE = 4; - int SW_SHOW = 5; - int SW_MINIMIZE = 6; - int SW_SHOWMINNOACTIVE = 7; - int SW_SHOWNA = 8; - int SW_RESTORE = 9; - int SW_SHOWDEFAULT = 10; - int SW_FORCEMINIMIZE = 11; - int SW_MAX = 11; - - int RDW_INVALIDATE = 0x0001; - int RDW_INTERNALPAINT = 0x0002; - int RDW_ERASE = 0x0004; - int RDW_VALIDATE = 0x0008; - int RDW_NOINTERNALPAINT = 0x0010; - int RDW_NOERASE = 0x0020; - int RDW_NOCHILDREN = 0x0040; - int RDW_ALLCHILDREN = 0x0080; - int RDW_UPDATENOW = 0x0100; - int RDW_ERASENOW = 0x0200; - int RDW_FRAME = 0x0400; - int RDW_NOFRAME = 0x0800; - - /** - * The retrieved handle identifies the window of the same type that is highest in the Z order. - * - * If the specified window is a topmost window, the handle identifies a topmost window. If the specified window is a - * top-level window, the handle identifies a top-level window. If the specified window is a child window, the handle - * identifies a sibling window. - */ - int GW_HWNDFIRST = 0; - - /** - * The retrieved handle identifies the window of the same type that is lowest in the Z order. - * - * If the specified window is a topmost window, the handle identifies a topmost window. If the specified window is a - * top-level window, the handle identifies a top-level window. If the specified window is a child window, the handle - * identifies a sibling window. - */ - int GW_HWNDLAST = 1; - - /** - * The retrieved handle identifies the window below the specified window in the Z order. - * - * If the specified window is a topmost window, the handle identifies a topmost window. If the specified window is a - * top-level window, the handle identifies a top-level window. If the specified window is a child window, the handle - * identifies a sibling window. - */ - int GW_HWNDNEXT = 2; - - /** - * The retrieved handle identifies the window above the specified window in the Z order. - * - * If the specified window is a topmost window, the handle identifies a topmost window. If the specified window is a - * top-level window, the handle identifies a top-level window. If the specified window is a child window, the - * handle identifies a sibling window. - */ - int GW_HWNDPREV = 3; - - /** - * The retrieved handle identifies the specified window's owner window, if any. For more information, see Owned - * Windows. - */ - int GW_OWNER = 4; - - /** - * The retrieved handle identifies the child window at the top of the Z order, if the specified window is a parent - * window; otherwise, the retrieved handle is NULL. The function examines only child windows of the specified - * window. It does not examine descendant windows. - */ - int GW_CHILD = 5; - - /** - * The retrieved handle identifies the enabled popup window owned by the specified window (the search uses the first - * such window found using GW_HWNDNEXT); otherwise, if there are no enabled popup windows, the retrieved handle is - * that of the specified window. - */ - int GW_ENABLEDPOPUP = 6; - - /** - * Retains the current Z order (ignores the hWndInsertAfter parameter). - */ - int SWP_NOZORDER = 0x0004; - - /** - * Minimizes the window. - */ - int SC_MINIMIZE = 0xF020; - - /** - * Maximizes the window. - */ - int SC_MAXIMIZE = 0xF030; - - /** - * Contains information about a simulated message generated by an input device other than a keyboard or mouse. - */ - public static class HARDWAREINPUT extends Structure { - - public static class ByReference extends HARDWAREINPUT implements Structure.ByReference { - public ByReference() { - } - - public ByReference(Pointer memory) { - super(memory); - } - } - - public HARDWAREINPUT() { - } - - public HARDWAREINPUT(Pointer memory) { - super(memory); - read(); - } - - public WinDef.DWORD uMsg; - public WinDef.WORD wParamL; - public WinDef.WORD wParamH; - protected List getFieldOrder() { - return Arrays.asList(new String[] { "uMsg", "wParamL", "wParamH" }); - } - } - - /** - * Used by SendInput to store information for synthesizing input events such as keystrokes, mouse movement, and mouse - * clicks. - */ - public static class INPUT extends Structure { - - public static final int INPUT_MOUSE = 0; - public static final int INPUT_KEYBOARD = 1; - public static final int INPUT_HARDWARE = 2; - - public static class ByReference extends INPUT implements Structure.ByReference { - public ByReference() { - } - - public ByReference(Pointer memory) { - super(memory); - } - } - - public INPUT() { - } - - public INPUT(Pointer memory) { - super(memory); - read(); - } - - public WinDef.DWORD type; - public INPUT_UNION input = new INPUT_UNION(); - protected List getFieldOrder() { - return Arrays.asList(new String[] { "type", "input" }); - } - - public static class INPUT_UNION extends Union { - - public INPUT_UNION() { - } - - public INPUT_UNION(Pointer memory) { - super(memory); - read(); - } - - public MOUSEINPUT mi; - public KEYBDINPUT ki; - public HARDWAREINPUT hi; - } - } - - /** - * Contains information about a simulated keyboard event. - */ - public static class KEYBDINPUT extends Structure { - - /** - * If specified, the scan code was preceded by a prefix byte that has the value 0xE0 (224). - */ - public static final int KEYEVENTF_EXTENDEDKEY = 0x0001; - - /** - * If specified, the key is being released. If not specified, the key is being pressed. - */ - public static final int KEYEVENTF_KEYUP = 0x0002; - - /** - * If specified, the system synthesizes a VK_PACKET keystroke. The wVk parameter must be zero. This flag can only be - * combined with the KEYEVENTF_KEYUP flag. For more information, see the Remarks section. - */ - public static final int KEYEVENTF_UNICODE = 0x0004; - - /** - * If specified, wScan identifies the key and wVk is ignored. - */ - public static final int KEYEVENTF_SCANCODE = 0x0008; - - public static class ByReference extends KEYBDINPUT implements Structure.ByReference { - public ByReference() { - } - - public ByReference(Pointer memory) { - super(memory); - } - } - - public KEYBDINPUT() { - } - - public KEYBDINPUT(Pointer memory) { - super(memory); - read(); - } - - /** - * A virtual-key code. The code must be a value in the range 1 to 254. If the dwFlags member specifies - * KEYEVENTF_UNICODE, wVk must be 0. - */ - public WinDef.WORD wVk; - - /** - * A hardware scan code for the key. If dwFlags specifies KEYEVENTF_UNICODE, wScan specifies a Unicode character - * which is to be sent to the foreground application. - */ - public WinDef.WORD wScan; - - /** - * Specifies various aspects of a keystroke. This member can be certain combinations of the following values. - */ - public WinDef.DWORD dwFlags; - - /** - * The time stamp for the event, in milliseconds. If this parameter is zero, the system will provide its own time - * stamp. - */ - public WinDef.DWORD time; - - /** - * An additional value associated with the keystroke. Use the GetMessageExtraInfo function to obtain this - * information. - */ - public BaseTSD.ULONG_PTR dwExtraInfo; - - protected List getFieldOrder() { - return Arrays.asList(new String[] { "wVk", "wScan", "dwFlags", "time", "dwExtraInfo" }); - } - } - - /** - * Contains information about a simulated mouse event. - */ - public static class MOUSEINPUT extends Structure { - - public static class ByReference extends MOUSEINPUT implements Structure.ByReference { - public ByReference() { - } - - public ByReference(Pointer memory) { - super(memory); - } - } - - public MOUSEINPUT() { - } - - public MOUSEINPUT(Pointer memory) { - super(memory); - read(); - } - - public WinDef.LONG dx; - public WinDef.LONG dy; - public WinDef.DWORD mouseData; - public WinDef.DWORD dwFlags; - public WinDef.DWORD time; - public BaseTSD.ULONG_PTR dwExtraInfo; - - protected List getFieldOrder() { - return Arrays.asList(new String[] { "dx", "dy", "mouseData", "dwFlags", "time", "dwExtraInfo" }); - } - } - - /** - * Contains the time of the last input. - */ - public static class LASTINPUTINFO extends Structure { - public int cbSize = size(); - - // Tick count of when the last input event was received. - public int dwTime; - - protected List getFieldOrder() { - return Arrays.asList(new String[] { "cbSize", "dwTime" }); - } - } + HWND HWND_BROADCAST = new HWND(Pointer.createConstant(0xFFFF)); + HWND HWND_MESSAGE = new HWND(Pointer.createConstant(-3)); + + int FLASHW_STOP = 0; + int FLASHW_CAPTION = 1; + int FLASHW_TRAY = 2; + int FLASHW_ALL = (FLASHW_CAPTION | FLASHW_TRAY); + int FLASHW_TIMER = 4; + int FLASHW_TIMERNOFG = 12; + + int IMAGE_BITMAP = 0; + int IMAGE_ICON = 1; + int IMAGE_CURSOR = 2; + int IMAGE_ENHMETAFILE = 3; + + int LR_DEFAULTCOLOR = 0x0000; + int LR_MONOCHROME = 0x0001; + int LR_COLOR = 0x0002; + int LR_COPYRETURNORG = 0x0004; + int LR_COPYDELETEORG = 0x0008; + int LR_LOADFROMFILE = 0x0010; + int LR_LOADTRANSPARENT = 0x0020; + int LR_DEFAULTSIZE = 0x0040; + int LR_VGACOLOR = 0x0080; + int LR_LOADMAP3DCOLORS = 0x1000; + int LR_CREATEDIBSECTION = 0x2000; + int LR_COPYFROMRESOURCE = 0x4000; + int LR_SHARED = 0x8000; + + public class GUITHREADINFO extends Structure { + public int cbSize = size(); + public int flags; + public HWND hwndActive; + public HWND hwndFocus; + public HWND hwndCapture; + public HWND hwndMenuOwner; + public HWND hwndMoveSize; + public HWND hwndCaret; + public RECT rcCaret; + + protected List getFieldOrder() { + return Arrays.asList(new String[] { "cbSize", "flags", + "hwndActive", "hwndFocus", "hwndCapture", "hwndMenuOwner", + "hwndMoveSize", "hwndCaret", "rcCaret" }); + } + } + + public class WINDOWINFO extends Structure { + public int cbSize = size(); + public RECT rcWindow; + public RECT rcClient; + public int dwStyle; + public int dwExStyle; + public int dwWindowStatus; + public int cxWindowBorders; + public int cyWindowBorders; + public short atomWindowType; + public short wCreatorVersion; + + protected List getFieldOrder() { + return Arrays.asList(new String[] { "cbSize", "rcWindow", + "rcClient", "dwStyle", "dwExStyle", "dwWindowStatus", + "cxWindowBorders", "cyWindowBorders", "atomWindowType", + "wCreatorVersion" }); + } + } + + int GWL_EXSTYLE = -20; + int GWL_STYLE = -16; + int GWL_WNDPROC = -4; + int GWL_HINSTANCE = -6; + int GWL_ID = -12; + int GWL_USERDATA = -21; + int DWL_DLGPROC = 4; + + int DWL_MSGRESULT = 0; + int DWL_USER = 8; + + int WS_MAXIMIZE = 0x01000000; + int WS_VISIBLE = 0x10000000; + int WS_MINIMIZE = 0x20000000; + int WS_CHILD = 0x40000000; + int WS_POPUP = 0x80000000; + int WS_EX_COMPOSITED = 0x20000000; + int WS_EX_LAYERED = 0x80000; + int WS_EX_TRANSPARENT = 32; + + int LWA_COLORKEY = 1; + int LWA_ALPHA = 2; + int ULW_COLORKEY = 1; + int ULW_ALPHA = 2; + int ULW_OPAQUE = 4; + + /** Defines the x- and y-coordinates of a point. */ + public class POINT extends Structure { + public int x, y; + + public POINT() { + } + + public POINT(int x, int y) { + this.x = x; + this.y = y; + } + + protected List getFieldOrder() { + return Arrays.asList(new String[] { "x", "y" }); + } + } + + public class MSG extends Structure { + public HWND hWnd; + public int message; + public WPARAM wParam; + public LPARAM lParam; + public int time; + public POINT pt; + + protected List getFieldOrder() { + return Arrays.asList(new String[] { "hWnd", "message", "wParam", + "lParam", "time", "pt" }); + } + } + + public class FLASHWINFO extends Structure { + public int cbSize; + public HANDLE hWnd; + public int dwFlags; + public int uCount; + public int dwTimeout; + + protected List getFieldOrder() { + return Arrays.asList(new String[] { "cbSize", "hWnd", "dwFlags", + "uCount", "dwTimeout" }); + } + } + + public interface WNDENUMPROC extends StdCallCallback { + /** Return whether to continue enumeration. */ + boolean callback(HWND hWnd, Pointer data); + } + + public interface LowLevelKeyboardProc extends HOOKPROC { + LRESULT callback(int nCode, WPARAM wParam, KBDLLHOOKSTRUCT lParam); + } + + /** Specifies the width and height of a rectangle. */ + public class SIZE extends Structure { + public int cx, cy; + + public SIZE() { + } + + public SIZE(int w, int h) { + this.cx = w; + this.cy = h; + } + + protected List getFieldOrder() { + return Arrays.asList(new String[] { "cx", "cy" }); + } + } + + int AC_SRC_OVER = 0x00; + int AC_SRC_ALPHA = 0x01; + int AC_SRC_NO_PREMULT_ALPHA = 0x01; + int AC_SRC_NO_ALPHA = 0x02; + + public class BLENDFUNCTION extends Structure { + public byte BlendOp = AC_SRC_OVER; // only valid value + public byte BlendFlags = 0; // only valid value + public byte SourceConstantAlpha; + public byte AlphaFormat; + + protected List getFieldOrder() { + return Arrays.asList(new String[] { "BlendOp", "BlendFlags", + "SourceConstantAlpha", "AlphaFormat" }); + } + } + + int VK_SHIFT = 16; + int VK_LSHIFT = 0xA0; + int VK_RSHIFT = 0xA1; + int VK_CONTROL = 17; + int VK_LCONTROL = 0xA2; + int VK_RCONTROL = 0xA3; + int VK_MENU = 18; + int VK_LMENU = 0xA4; + int VK_RMENU = 0xA5; + + int MOD_ALT = 0x0001; + int MOD_CONTROL = 0x0002; + int MOD_NOREPEAT = 0x4000; + int MOD_SHIFT = 0x0004; + int MOD_WIN = 0x0008; + + int WH_KEYBOARD = 2; + int WH_MOUSE = 7; + int WH_KEYBOARD_LL = 13; + int WH_MOUSE_LL = 14; + + public class HHOOK extends HANDLE { + + } + + public interface HOOKPROC extends StdCallCallback { + + } + + /** + * The WM_PAINT message is sent when the system or another application makes + * a request to paint a portion of an \ application's window. + */ + int WM_PAINT = 0x000F; + + /** + * Sent as a signal that a window or an application should terminate. + */ + int WM_CLOSE = 0x0010; + + /** + * Indicates a request to terminate an application, and is generated when + * the application calls the PostQuitMessage function. + */ + int WM_QUIT = 0x0012; + + /** + * Sent to a window when the window is about to be hidden or shown. + */ + int WM_SHOWWINDOW = 0x0018; + + /** + * Sent to the parent window of an owner-drawn button, combo box, list box, + * or menu when a visual aspect of the button, combo box, list box, or menu + * has changed. + */ + int WM_DRAWITEM = 0x002B; + + /** + * Posted to the window with the keyboard focus when a nonsystem key is + * pressed. A nonsystem key is a key that is pressed when the ALT key is not + * pressed. + */ + int WM_KEYDOWN = 0x0100; + + /** + * Posted to the window with the keyboard focus when a WM_KEYDOWN message is + * translated by the TranslateMessage function. The WM_CHAR message contains + * the character code of the key that was pressed. + */ + int WM_CHAR = 0x0102; + + /** + * A window receives this message when the user chooses a command from the + * Window menu (formerly known as the system or control menu) or when the + * user chooses the maximize button, minimize button, restore button, or + * close button. + */ + int WM_SYSCOMMAND = 0x0112; + + /** + * An application sends the WM_MDIMAXIMIZE message to a multiple-document + * interface (MDI) client window to maximize an MDI child window. + */ + int WM_MDIMAXIMIZE = 0x0225; + + /** + * Posted when the user presses a hot key registered by the RegisterHotKey + * function. The message is placed at the top of the message queue + * associated with the thread that registered the hot key. + */ + int WM_HOTKEY = 0x0312; + + int WM_KEYUP = 257; + int WM_SYSKEYDOWN = 260; + int WM_SYSKEYUP = 261; + + int WM_SESSION_CHANGE = 0x2b1; + int WM_CREATE = 0x0001; + int WM_SIZE = 0x0005; + int WM_DESTROY = 0x0002; + + public static final int WM_DEVICECHANGE = 0x0219; + + public class KBDLLHOOKSTRUCT extends Structure { + public int vkCode; + public int scanCode; + public int flags; + public int time; + public ULONG_PTR dwExtraInfo; + + protected List getFieldOrder() { + return Arrays.asList(new String[] { "vkCode", "scanCode", "flags", + "time", "dwExtraInfo" }); + } + } + + int SM_CXSCREEN = 0; + int SM_CYSCREEN = 1; + int SM_CXVSCROLL = 2; + int SM_CYHSCROLL = 3; + int SM_CYCAPTION = 4; + int SM_CXBORDER = 5; + int SM_CYBORDER = 6; + int SM_CXDLGFRAME = 7; + int SM_CYDLGFRAME = 8; + int SM_CYVTHUMB = 9; + int SM_CXHTHUMB = 10; + int SM_CXICON = 11; + int SM_CYICON = 12; + int SM_CXCURSOR = 13; + int SM_CYCURSOR = 14; + int SM_CYMENU = 15; + int SM_CXFULLSCREEN = 16; + int SM_CYFULLSCREEN = 17; + int SM_CYKANJIWINDOW = 18; + int SM_MOUSEPRESENT = 19; + int SM_CYVSCROLL = 20; + int SM_CXHSCROLL = 21; + int SM_DEBUG = 22; + int SM_SWAPBUTTON = 23; + int SM_RESERVED1 = 24; + int SM_RESERVED2 = 25; + int SM_RESERVED3 = 26; + int SM_RESERVED4 = 27; + int SM_CXMIN = 28; + int SM_CYMIN = 29; + int SM_CXSIZE = 30; + int SM_CYSIZE = 31; + int SM_CXFRAME = 32; + int SM_CYFRAME = 33; + int SM_CXMINTRACK = 34; + int SM_CYMINTRACK = 35; + int SM_CXDOUBLECLK = 36; + int SM_CYDOUBLECLK = 37; + int SM_CXICONSPACING = 38; + int SM_CYICONSPACING = 39; + int SM_MENUDROPALIGNMENT = 40; + int SM_PENWINDOWS = 41; + int SM_DBCSENABLED = 42; + int SM_CMOUSEBUTTONS = 43; + + int SM_CXFIXEDFRAME = SM_CXDLGFRAME; /* ;win40 name change */ + int SM_CYFIXEDFRAME = SM_CYDLGFRAME; /* ;win40 name change */ + int SM_CXSIZEFRAME = SM_CXFRAME; /* ;win40 name change */ + int SM_CYSIZEFRAME = SM_CYFRAME; /* ;win40 name change */ + + int SM_SECURE = 44; + int SM_CXEDGE = 45; + int SM_CYEDGE = 46; + int SM_CXMINSPACING = 47; + int SM_CYMINSPACING = 48; + int SM_CXSMICON = 49; + int SM_CYSMICON = 50; + int SM_CYSMCAPTION = 51; + int SM_CXSMSIZE = 52; + int SM_CYSMSIZE = 53; + int SM_CXMENUSIZE = 54; + int SM_CYMENUSIZE = 55; + int SM_ARRANGE = 56; + int SM_CXMINIMIZED = 57; + int SM_CYMINIMIZED = 58; + int SM_CXMAXTRACK = 59; + int SM_CYMAXTRACK = 60; + int SM_CXMAXIMIZED = 61; + int SM_CYMAXIMIZED = 62; + int SM_NETWORK = 63; + int SM_CLEANBOOT = 67; + int SM_CXDRAG = 68; + int SM_CYDRAG = 69; + int SM_SHOWSOUNDS = 70; + int SM_CXMENUCHECK = 71; + int SM_CYMENUCHECK = 72; + int SM_SLOWMACHINE = 73; + int SM_MIDEASTENABLED = 74; + int SM_MOUSEWHEELPRESENT = 75; + int SM_XVIRTUALSCREEN = 76; + int SM_YVIRTUALSCREEN = 77; + int SM_CXVIRTUALSCREEN = 78; + int SM_CYVIRTUALSCREEN = 79; + int SM_CMONITORS = 80; + int SM_SAMEDISPLAYFORMAT = 81; + int SM_IMMENABLED = 82; + int SM_CXFOCUSBORDER = 83; + int SM_CYFOCUSBORDER = 84; + int SM_TABLETPC = 86; + int SM_MEDIACENTER = 87; + int SM_STARTER = 88; + int SM_SERVERR2 = 89; + int SM_MOUSEHORIZONTALWHEELPRESENT = 91; + int SM_CXPADDEDBORDER = 92; + int SM_REMOTESESSION = 0x1000; + int SM_SHUTTINGDOWN = 0x2000; + int SM_REMOTECONTROL = 0x2001; + int SM_CARETBLINKINGENABLED = 0x2002; + + int SW_HIDE = 0; + int SW_SHOWNORMAL = 1; + int SW_NORMAL = 1; + int SW_SHOWMINIMIZED = 2; + int SW_SHOWMAXIMIZED = 3; + int SW_MAXIMIZE = 3; + int SW_SHOWNOACTIVATE = 4; + int SW_SHOW = 5; + int SW_MINIMIZE = 6; + int SW_SHOWMINNOACTIVE = 7; + int SW_SHOWNA = 8; + int SW_RESTORE = 9; + int SW_SHOWDEFAULT = 10; + int SW_FORCEMINIMIZE = 11; + int SW_MAX = 11; + + int RDW_INVALIDATE = 0x0001; + int RDW_INTERNALPAINT = 0x0002; + int RDW_ERASE = 0x0004; + int RDW_VALIDATE = 0x0008; + int RDW_NOINTERNALPAINT = 0x0010; + int RDW_NOERASE = 0x0020; + int RDW_NOCHILDREN = 0x0040; + int RDW_ALLCHILDREN = 0x0080; + int RDW_UPDATENOW = 0x0100; + int RDW_ERASENOW = 0x0200; + int RDW_FRAME = 0x0400; + int RDW_NOFRAME = 0x0800; + + /** + * The retrieved handle identifies the window of the same type that is + * highest in the Z order. + * + * If the specified window is a topmost window, the handle identifies a + * topmost window. If the specified window is a top-level window, the handle + * identifies a top-level window. If the specified window is a child window, + * the handle identifies a sibling window. + */ + int GW_HWNDFIRST = 0; + + /** + * The retrieved handle identifies the window of the same type that is + * lowest in the Z order. + * + * If the specified window is a topmost window, the handle identifies a + * topmost window. If the specified window is a top-level window, the handle + * identifies a top-level window. If the specified window is a child window, + * the handle identifies a sibling window. + */ + int GW_HWNDLAST = 1; + + /** + * The retrieved handle identifies the window below the specified window in + * the Z order. + * + * If the specified window is a topmost window, the handle identifies a + * topmost window. If the specified window is a top-level window, the handle + * identifies a top-level window. If the specified window is a child window, + * the handle identifies a sibling window. + */ + int GW_HWNDNEXT = 2; + + /** + * The retrieved handle identifies the window above the specified window in + * the Z order. + * + * If the specified window is a topmost window, the handle identifies a + * topmost window. If the specified window is a top-level window, the handle + * identifies a top-level window. If the specified window is a child window, + * the handle identifies a sibling window. + */ + int GW_HWNDPREV = 3; + + /** + * The retrieved handle identifies the specified window's owner window, if + * any. For more information, see Owned Windows. + */ + int GW_OWNER = 4; + + /** + * The retrieved handle identifies the child window at the top of the Z + * order, if the specified window is a parent window; otherwise, the + * retrieved handle is NULL. The function examines only child windows of the + * specified window. It does not examine descendant windows. + */ + int GW_CHILD = 5; + + /** + * The retrieved handle identifies the enabled popup window owned by the + * specified window (the search uses the first such window found using + * GW_HWNDNEXT); otherwise, if there are no enabled popup windows, the + * retrieved handle is that of the specified window. + */ + int GW_ENABLEDPOPUP = 6; + + /** + * Retains the current Z order (ignores the hWndInsertAfter parameter). + */ + int SWP_NOZORDER = 0x0004; + + /** + * Minimizes the window. + */ + int SC_MINIMIZE = 0xF020; + + /** + * Maximizes the window. + */ + int SC_MAXIMIZE = 0xF030; + + /** + * Contains information about a simulated message generated by an input + * device other than a keyboard or mouse. + */ + public static class HARDWAREINPUT extends Structure { + + public static class ByReference extends HARDWAREINPUT implements + Structure.ByReference { + public ByReference() { + } + + public ByReference(Pointer memory) { + super(memory); + } + } + + public HARDWAREINPUT() { + } + + public HARDWAREINPUT(Pointer memory) { + super(memory); + read(); + } + + public WinDef.DWORD uMsg; + public WinDef.WORD wParamL; + public WinDef.WORD wParamH; + + protected List getFieldOrder() { + return Arrays.asList(new String[] { "uMsg", "wParamL", "wParamH" }); + } + } + + /** + * Used by SendInput to store information for synthesizing input events such + * as keystrokes, mouse movement, and mouse clicks. + */ + public static class INPUT extends Structure { + + public static final int INPUT_MOUSE = 0; + public static final int INPUT_KEYBOARD = 1; + public static final int INPUT_HARDWARE = 2; + + public static class ByReference extends INPUT implements + Structure.ByReference { + public ByReference() { + } + + public ByReference(Pointer memory) { + super(memory); + } + } + + public INPUT() { + } + + public INPUT(Pointer memory) { + super(memory); + read(); + } + + public WinDef.DWORD type; + public INPUT_UNION input = new INPUT_UNION(); + + protected List getFieldOrder() { + return Arrays.asList(new String[] { "type", "input" }); + } + + public static class INPUT_UNION extends Union { + + public INPUT_UNION() { + } + + public INPUT_UNION(Pointer memory) { + super(memory); + read(); + } + + public MOUSEINPUT mi; + public KEYBDINPUT ki; + public HARDWAREINPUT hi; + } + } + + /** + * Contains information about a simulated keyboard event. + */ + public static class KEYBDINPUT extends Structure { + + /** + * If specified, the scan code was preceded by a prefix byte that has + * the value 0xE0 (224). + */ + public static final int KEYEVENTF_EXTENDEDKEY = 0x0001; + + /** + * If specified, the key is being released. If not specified, the key is + * being pressed. + */ + public static final int KEYEVENTF_KEYUP = 0x0002; + + /** + * If specified, the system synthesizes a VK_PACKET keystroke. The wVk + * parameter must be zero. This flag can only be combined with the + * KEYEVENTF_KEYUP flag. For more information, see the Remarks section. + */ + public static final int KEYEVENTF_UNICODE = 0x0004; + + /** + * If specified, wScan identifies the key and wVk is ignored. + */ + public static final int KEYEVENTF_SCANCODE = 0x0008; + + public static class ByReference extends KEYBDINPUT implements + Structure.ByReference { + public ByReference() { + } + + public ByReference(Pointer memory) { + super(memory); + } + } + + public KEYBDINPUT() { + } + + public KEYBDINPUT(Pointer memory) { + super(memory); + read(); + } + + /** + * A virtual-key code. The code must be a value in the range 1 to 254. + * If the dwFlags member specifies KEYEVENTF_UNICODE, wVk must be 0. + */ + public WinDef.WORD wVk; + + /** + * A hardware scan code for the key. If dwFlags specifies + * KEYEVENTF_UNICODE, wScan specifies a Unicode character which is to be + * sent to the foreground application. + */ + public WinDef.WORD wScan; + + /** + * Specifies various aspects of a keystroke. This member can be certain + * combinations of the following values. + */ + public WinDef.DWORD dwFlags; + + /** + * The time stamp for the event, in milliseconds. If this parameter is + * zero, the system will provide its own time stamp. + */ + public WinDef.DWORD time; + + /** + * An additional value associated with the keystroke. Use the + * GetMessageExtraInfo function to obtain this information. + */ + public BaseTSD.ULONG_PTR dwExtraInfo; + + protected List getFieldOrder() { + return Arrays.asList(new String[] { "wVk", "wScan", "dwFlags", + "time", "dwExtraInfo" }); + } + } + + /** + * Contains information about a simulated mouse event. + */ + public static class MOUSEINPUT extends Structure { + + public static class ByReference extends MOUSEINPUT implements + Structure.ByReference { + public ByReference() { + } + + public ByReference(Pointer memory) { + super(memory); + } + } + + public MOUSEINPUT() { + } + + public MOUSEINPUT(Pointer memory) { + super(memory); + read(); + } + + public WinDef.LONG dx; + public WinDef.LONG dy; + public WinDef.DWORD mouseData; + public WinDef.DWORD dwFlags; + public WinDef.DWORD time; + public BaseTSD.ULONG_PTR dwExtraInfo; + + protected List getFieldOrder() { + return Arrays.asList(new String[] { "dx", "dy", "mouseData", + "dwFlags", "time", "dwExtraInfo" }); + } + } + + /** + * Contains the time of the last input. + */ + public static class LASTINPUTINFO extends Structure { + public int cbSize = size(); + + // Tick count of when the last input event was received. + public int dwTime; + + protected List getFieldOrder() { + return Arrays.asList(new String[] { "cbSize", "dwTime" }); + } + } } diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Wtsapi32.java b/contrib/platform/src/com/sun/jna/platform/win32/Wtsapi32.java new file mode 100644 index 0000000000..7b405b2276 --- /dev/null +++ b/contrib/platform/src/com/sun/jna/platform/win32/Wtsapi32.java @@ -0,0 +1,95 @@ +package com.sun.jna.platform.win32; + +import com.sun.jna.Native; +import com.sun.jna.platform.win32.WinDef.HWND; +import com.sun.jna.win32.StdCallLibrary; +import com.sun.jna.win32.W32APIOptions; + +public interface Wtsapi32 extends StdCallLibrary { + + Wtsapi32 INSTANCE = (Wtsapi32) Native.loadLibrary("Wtsapi32", + Wtsapi32.class, W32APIOptions.DEFAULT_OPTIONS); + + int NOTIFY_FOR_ALL_SESSIONS = 1; + + int NOTIFY_FOR_THIS_SESSION = 0; + + /** + * The session identified by lParam was connected to the console terminal or + * RemoteFX session. + */ + public static final int WTS_CONSOLE_CONNECT = 0x1; + + /** + * The session identified by lParam was disconnected from the console + * terminal or RemoteFX session. + */ + public static final int WTS_CONSOLE_DISCONNECT = 0x2; + + /** + * The session identified by lParam was connected to the remote terminal. + */ + public static final int WTS_REMOTE_CONNECT = 0x3; + + /** + * The session identified by lParam was disconnected from the remote + * terminal. + */ + public static final int WTS_REMOTE_DISCONNECT = 0x4; + + /** + * A user has logged on to the session identified by lParam. + */ + public static final int WTS_SESSION_LOGON = 0x5; + + /** + * A user has logged off the session identified by lParam. + */ + public static final int WTS_SESSION_LOGOFF = 0x6; + + /** + * The session identified by lParam has been locked. + */ + public static final int WTS_SESSION_LOCK = 0x7; + + /** + * The session identified by lParam has been unlocked. + */ + public static final int WTS_SESSION_UNLOCK = 0x8; + + /** + * The session identified by lParam has changed its remote controlled + * status. To determine the status, call GetSystemMetrics and check the + * SM_REMOTECONTROL metric. + */ + public static final int WTS_SESSION_REMOTE_CONTROL = 0x9; + + /** + * Registers the specified window to receive session change notifications. + * + * @param hWnd + * [in] Handle of the window to receive session change + * notifications. + * + * @param dwFlags + * [in] Specifies which session notifications are to be received. + * This parameter can be one of the following values. + * + * @return If the function succeeds, the return value is TRUE. Otherwise, it + * is FALSE. To get extended error information, call GetLastError. + */ + public boolean WTSRegisterSessionNotification(HWND hWnd, int dwFlags); + + /** + * Unregisters the specified window so that it receives no further session + * change notifications. + * + * @param hWnd + * [in] Handle of the window to be unregistered from receiving + * session notifications. + * + * @return If the function succeeds, the return value is TRUE. Otherwise, it + * is FALSE. To get extended error information, call GetLastError. + */ + public boolean WTSUnRegisterSessionNotification(HWND hWnd); +} diff --git a/contrib/platform/test/com/sun/jna/platform/win32/Win32WindowTest.java b/contrib/platform/test/com/sun/jna/platform/win32/Win32WindowTest.java new file mode 100644 index 0000000000..68484a87a1 --- /dev/null +++ b/contrib/platform/test/com/sun/jna/platform/win32/Win32WindowTest.java @@ -0,0 +1,219 @@ +/* Copyright (c) 2012 Tobias Wolf, 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.WString; +import com.sun.jna.platform.win32.User32.WNDCLASSEX; +import com.sun.jna.platform.win32.User32.WindowProc; +import com.sun.jna.platform.win32.WinDef.HMODULE; +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.WinUser.MSG; + +// TODO: Auto-generated Javadoc +/** + * The Class Win32WindowTest. + */ +public class Win32WindowTest implements WindowProc { + + /** + * Instantiates a new win32 window test. + */ + public Win32WindowTest() { + // define new window class + WString windowClass = new WString("MyWindowClass"); + HMODULE hInst = Kernel32.INSTANCE.GetModuleHandle(""); + + WNDCLASSEX wClass = new WNDCLASSEX(); + wClass.hInstance = hInst; + wClass.lpfnWndProc = Win32WindowTest.this; + wClass.lpszClassName = windowClass; + + // register window class + User32.INSTANCE.RegisterClassEx(wClass); + getLastError(); + + // create new window + HWND hWnd = User32.INSTANCE + .CreateWindowEx( + User32.WS_EX_TOPMOST, + windowClass, + "My hidden helper window, used only to catch the windows events", + 0, 0, 0, 0, 0, WinUser.HWND_MESSAGE, null, hInst, null); + + getLastError(); + System.out.println("window sucessfully created! window hwnd: " + hWnd.getPointer().toString()); + + Wtsapi32.INSTANCE.WTSRegisterSessionNotification(hWnd, + Wtsapi32.NOTIFY_FOR_THIS_SESSION); + + MSG msg = new MSG(); + while (User32.INSTANCE.GetMessage(msg, hWnd, 0, 0) != 0) { + User32.INSTANCE.TranslateMessage(msg); + User32.INSTANCE.DispatchMessage(msg); + } + + Wtsapi32.INSTANCE.WTSUnRegisterSessionNotification(hWnd); + User32.INSTANCE.UnregisterClass(windowClass, hInst); + User32.INSTANCE.DestroyWindow(hWnd); + + System.out.println("program exit!"); + } + + /* (non-Javadoc) + * @see com.sun.jna.platform.win32.User32.WindowProc#callback(com.sun.jna.platform.win32.WinDef.HWND, int, com.sun.jna.platform.win32.WinDef.WPARAM, com.sun.jna.platform.win32.WinDef.LPARAM) + */ + public LRESULT callback(HWND hwnd, int uMsg, WPARAM wParam, LPARAM lParam) { + switch (uMsg) { + case WinUser.WM_DESTROY: { + User32.INSTANCE.PostQuitMessage(0); + return new LRESULT(0); + } + case WinUser.WM_SESSION_CHANGE: { + this.onSessionChange(wParam, lParam); + return new LRESULT(0); + } + case WinUser.WM_DEVICECHANGE: { + this.onDeviceChange(wParam, lParam); + return new LRESULT(0); + } + default: + return User32.INSTANCE.DefWindowProc(hwnd, uMsg, wParam, lParam); + } + } + + /** + * Gets the last error. + * + * @return the last error + */ + public int getLastError() { + int rc = Kernel32.INSTANCE.GetLastError(); + + if (rc != 0) + System.out.println("error: " + rc); + + return rc; + } + + /** + * On session change. + * + * @param wParam the w param + * @param lParam the l param + */ + protected void onSessionChange(WPARAM wParam, LPARAM lParam) { + switch (wParam.intValue()) { + case Wtsapi32.WTS_CONSOLE_CONNECT: { + this.onConsoleConnect(lParam.intValue()); + break; + } + case Wtsapi32.WTS_CONSOLE_DISCONNECT: { + this.onConsoleDisconnect(lParam.intValue()); + break; + } + case Wtsapi32.WTS_SESSION_LOGON: { + this.onMachineLogon(lParam.intValue()); + break; + } + case Wtsapi32.WTS_SESSION_LOGOFF: { + this.onMachineLogoff(lParam.intValue()); + break; + } + case Wtsapi32.WTS_SESSION_LOCK: { + this.onMachineLocked(lParam.intValue()); + break; + } + case Wtsapi32.WTS_SESSION_UNLOCK: { + this.onMachineUnlocked(lParam.intValue()); + break; + } + } + } + + /** + * On console connect. + * + * @param sessionId the session id + */ + protected void onConsoleConnect(int sessionId) { + System.out.println("onConsoleConnect: " + sessionId); + } + + /** + * On console disconnect. + * + * @param sessionId the session id + */ + protected void onConsoleDisconnect(int sessionId) { + System.out.println("onConsoleDisconnect: " + sessionId); + } + + /** + * On machine locked. + * + * @param sessionId the session id + */ + protected void onMachineLocked(int sessionId) { + System.out.println("onMachineLocked: " + sessionId); + } + + /** + * On machine unlocked. + * + * @param sessionId the session id + */ + protected void onMachineUnlocked(int sessionId) { + System.out.println("onMachineUnlocked: " + sessionId); + } + + /** + * On machine logon. + * + * @param sessionId the session id + */ + protected void onMachineLogon(int sessionId) { + System.out.println("onMachineLogon: " + sessionId); + } + + /** + * On machine logoff. + * + * @param sessionId the session id + */ + protected void onMachineLogoff(int sessionId) { + System.out.println("onMachineLogoff: " + sessionId); + } + + /** + * On device change. + * + * @param wParam the w param + * @param lParam the l param + */ + protected void onDeviceChange(WPARAM wParam, LPARAM lParam) { + System.out.println("WM_DEVICECHANGE"); + } + + /** + * The main method. + * + * @param args the arguments + */ + public static void main(String[] args) { + new Win32WindowTest(); + } +}