/******************************************************************************* * Copyright (c) 2010 Philipp Kursawe. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Philipp Kursawe (phil.kursawe@gmail.com) - initial API and implementation ******************************************************************************/ package clipboard.monitor.windows.internal; import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.Structure; import com.sun.jna.examples.win32.W32API; public interface User32 extends W32API { User32 INSTANCE = (User32) Native.loadLibrary( "user32", User32.class, DEFAULT_OPTIONS); //$NON-NLS-1$ final int GWL_EXSTYLE = -20; final int GWL_STYLE = -16; final int GWL_WNDPROC = -4; final int GWL_HINSTANCE = -6; final int GWL_ID = -12; final int GWL_USERDATA = -21; final int DWL_DLGPROC = 4; final int DWL_MSGRESULT = 0; final int DWL_USER = 8; final int WS_EX_COMPOSITED = 0x20000000; final int WS_EX_LAYERED = 0x80000; final int WS_EX_TRANSPARENT = 32; final int WM_DESTROY = 0x0002; final int WM_CHANGECBCHAIN = 0x030D; final int WM_DRAWCLIPBOARD = 0x0308; int GetWindowLong(HWND hWnd, int nIndex); int SetWindowLong(HWND hWnd, int nIndex, int dwNewLong); interface WNDPROC extends StdCallCallback { int callback(HWND hWnd, int uMsg, WPARAM uParam, LPARAM lParam); } int SetWindowLong(HWND hWnd, int nIndex, WNDPROC proc); HWND CreateWindowEx(int styleEx, String className, String windowName, int style, int x, int y, int width, int height, HWND hndParent, int hndMenu, int hndInst, Object parm); final HWND HWND_TOPMOST = new HWND(Pointer.createConstant(-1)); final int SWP_NOSIZE = 1; boolean SetWindowPos(HWND hWnd, HWND hWndInsAfter, int x, int y, int cx, int cy, short uFlags); int DestroyWindow(HWND hwnd); HWND SetClipboardViewer(HWND hWndNewViewer); boolean ChangeClipboardChain(HWND hWndRemove, HWND hWndNewNext); // http://msdn.microsoft.com/en-us/library/ms644958(VS.85).aspx public static class POINT extends Structure { public int x; public int y; } /* * PeekMessage() Options */ final int PM_NOREMOVE = 0x0000; final int PM_REMOVE = 0x0001; final int PM_NOYIELD = 0x0002; class MSG extends Structure { public int hWnd; public int message; public short wParam; public int lParam; public int time; public POINT pt; } // http://msdn.microsoft.com/en-us/library/ms644936(VS.85).aspx 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); int DispatchMessage(MSG lpMsg); final int QS_KEY = 0x0001; final int QS_MOUSEMOVE = 0x0002; final int QS_MOUSEBUTTON = 0x0004; final int QS_POSTMESSAGE = 0x0008; final int QS_TIMER = 0x0010; final int QS_PAINT = 0x0020; final int QS_SENDMESSAGE = 0x0040; final int QS_HOTKEY = 0x0080; final int QS_ALLPOSTMESSAGE = 0x0100; final int QS_RAWINPUT = 0x0400; final int QS_MOUSE = (QS_MOUSEMOVE | QS_MOUSEBUTTON); final int QS_INPUT = (QS_MOUSE | QS_KEY | QS_RAWINPUT); final int QS_ALLEVENTS = (QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY); final int QS_ALLINPUT = (QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY | QS_SENDMESSAGE); int MsgWaitForMultipleObjects(int nCount, HANDLE[] pHandles, boolean bWaitAll, int dwMilliseconds, int dwWakeMask); void SendMessage(HWND hWnd, int message, WPARAM wParam, LPARAM lParam); void PostMessage(HWND hWnd, int message, WPARAM wParam, LPARAM lParam); int DefWindowProc(HWND hWnd, int msg, WPARAM wParam, LPARAM lParam); }