/* 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. * <p/> * 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.examples.win32; import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.Structure; import com.sun.jna.examples.win32.GDI32.RECT; import com.sun.jna.ptr.ByteByReference; import com.sun.jna.ptr.IntByReference; /** 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 W32API { User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class, DEFAULT_OPTIONS); HDC GetDC(HWND hWnd); int ReleaseDC(HWND hWnd, HDC hDC); 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; class FLASHWINFO extends Structure { public int cbSize; public HANDLE hWnd; public int dwFlags; public int uCount; public int dwTimeout; } 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; HWND FindWindow(String winClass, String title); /** ASCII version. */ int GetClassName(HWND hWnd, byte[] lpClassName, int nMaxCount); /** Unicode version. */ int GetClassName(HWND hWnd, char[] lpClassName, int nMaxCount); 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; } boolean GetGUIThreadInfo(int idThread, GUITHREADINFO lpgui); 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; } boolean GetWindowInfo(HWND hWnd, WINDOWINFO pwi); boolean GetWindowRect(HWND hWnd, RECT rect); /** ASCII version. */ int GetWindowText(HWND hWnd, byte[] lpString, int nMaxCount); /** Unicode version. */ int GetWindowText(HWND hWnd, char[] lpString, int nMaxCount); int GetWindowTextLength(HWND hWnd); /** ASCII version. */ int GetWindowModuleFileName(HWND hWnd, byte[] lpszFileName, int cchFileNameMax); /** Unicode version. */ int GetWindowModuleFileName(HWND hWnd, char[] lpszFileName, int cchFileNameMax); int GetWindowThreadProcessId(HWND hWnd, IntByReference lpdwProcessId); interface WNDENUMPROC extends StdCallCallback { /** Return whether to continue enumeration. */ boolean callback(HWND hWnd, Pointer data); } boolean EnumWindows(WNDENUMPROC lpEnumFunc, Pointer data); boolean EnumChildWindows(HWND hWnd, WNDENUMPROC lpEnumFunc, Pointer data); boolean EnumThreadWindows(int dwThreadId, WNDENUMPROC lpEnumFunc, Pointer data); boolean FlashWindowEx(FLASHWINFO info); HICON LoadIcon(HINSTANCE hInstance, String iconName); HANDLE LoadImage(HINSTANCE hinst, // handle to instance String name, // image to load int type, // image type int xDesired, // desired width int yDesired, // desired height int load // load options ); boolean DestroyIcon(HICON hicon); 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_EX_COMPOSITED = 0x20000000; int WS_EX_LAYERED = 0x80000; int WS_EX_TRANSPARENT = 32; int GetWindowLong(HWND hWnd, int nIndex); int SetWindowLong(HWND hWnd, int nIndex, int dwNewLong); // Do not use this version on win64 Pointer SetWindowLong(HWND hWnd, int nIndex, Pointer dwNewLong); LONG_PTR GetWindowLongPtr(HWND hWnd, int nIndex); LONG_PTR SetWindowLongPtr(HWND hWnd, int nIndex, LONG_PTR dwNewLongPtr); Pointer SetWindowLongPtr(HWND hWnd, int nIndex, Pointer dwNewLongPtr); int LWA_COLORKEY = 1; int LWA_ALPHA = 2; int ULW_COLORKEY = 1; int ULW_ALPHA = 2; int ULW_OPAQUE = 4; boolean SetLayeredWindowAttributes(HWND hwnd, int crKey, byte bAlpha, int dwFlags); boolean GetLayeredWindowAttributes(HWND hwnd, IntByReference pcrKey, ByteByReference pbAlpha, IntByReference pdwFlags); /** Defines the x- and y-coordinates of a point. */ class POINT extends Structure { public int x, y; public POINT() { } public POINT(int x, int y) { this.x = x; this.y = y; } } /** Specifies the width and height of a rectangle. */ class SIZE extends Structure { public int cx, cy; public SIZE() { } public SIZE(int w, int h) { this.cx = w; this.cy = h; } } int AC_SRC_OVER = 0x00; int AC_SRC_ALPHA = 0x01; int AC_SRC_NO_PREMULT_ALPHA = 0x01; int AC_SRC_NO_ALPHA = 0x02; 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; } boolean UpdateLayeredWindow(HWND hwnd, HDC hdcDst, POINT pptDst, SIZE psize, HDC hdcSrc, POINT pptSrc, int crKey, BLENDFUNCTION pblend, int dwFlags); int SetWindowRgn(HWND hWnd, HRGN hRgn, boolean bRedraw); 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; boolean GetKeyboardState(byte[] state); short GetAsyncKeyState(int vKey); int WH_KEYBOARD = 2; int WH_MOUSE = 7; int WH_KEYBOARD_LL = 13; int WH_MOUSE_LL = 14; class HHOOK extends HANDLE { } interface HOOKPROC extends StdCallCallback { } int WM_KEYDOWN = 256; int WM_KEYUP = 257; int WM_SYSKEYDOWN = 260; int WM_SYSKEYUP = 261; class KBDLLHOOKSTRUCT extends Structure { public int vkCode; public int scanCode; public int flags; public int time; public ULONG_PTR dwExtraInfo; } interface LowLevelKeyboardProc extends HOOKPROC { LRESULT callback(int nCode, WPARAM wParam, KBDLLHOOKSTRUCT lParam); } HHOOK SetWindowsHookEx(int idHook, HOOKPROC lpfn, HINSTANCE hMod, int dwThreadId); LRESULT CallNextHookEx(HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam); LRESULT CallNextHookEx(HHOOK hhk, int nCode, WPARAM wParam, Pointer lParam); boolean UnhookWindowsHookEx(HHOOK hhk); class MSG extends Structure { public HWND hWnd; public int message; public WPARAM wParam; public LPARAM lParam; public int time; public POINT pt; } int GetMessage(MSG lpMsg, HWND hWnd, int wMsgFilterMin, int wMsgFilterMax); boolean PeekMessage(MSG lpMsg, HWND hWnd, int wMsgFilterMin, int wMsgFilterMax, int wRemoveMsg); boolean TranslateMessage(MSG lpMsg); LRESULT DispatchMessage(MSG lpMsg); void PostMessage(HWND hWnd, int msg, WPARAM wParam, LPARAM lParam); void PostQuitMessage(int nExitCode); }