windowstrayicon.java

来自「OSGI这是一个中间件,与UPNP齐名,是用于移植到嵌入式平台之上」· Java 代码 · 共 682 行 · 第 1/2 页

JAVA
682
字号
/**************************************************************************************************************** *                                                                                                              * * Windows messaging code for detecting previous instance                                                       * *                                                                                                              * ****************************************************************************************************************//** * Checks if there's an instance with hidden window title = appName running * Can be used to detect that another instance of your app is already running (so exit..) * * Param appName = the title of the hidden window to search for */	public static native boolean isRunning(String appName);/** * Send a message to another app (message can contain an integer) * Can be used to detect that another instance of your app is already running * That instance can for example restore it's window after it receives the windows * message - see demo app for more info * * Param appName = the title of the hidden window to search for * Param message = the integer message to send (only native int size supported) */	public static native int sendWindowsMessage(String appName, int message);/** * Set callback method for receiving windows messages * See sendWindowsMessage() for more information or take a look at the demo app * * Param callback = the callback method for this app */	public static void setWindowsMessageCallback(TrayIconCallback callback) {		m_WMessageCallback = callback;	}/** * Keep TrayIcon alive (make sure application does not exit) */	public static void keepAlive() {		if (m_Keeper == null) {			m_Keeper = new TrayIconKeeper();			m_Keeper.start();		}	}		public final static int FLASHW_STOP = 0;	public final static int FLASHW_CAPTION = 1;	public final static int FLASHW_TRAY = 2;	public final static int FLASHW_ALL = FLASHW_CAPTION | FLASHW_TRAY;	public final static int FLASHW_TIMER = 4;	public final static int FLASHW_TIMERNOFG = 12;	public static void flashWindow(Frame wnd) throws TrayIconException {		flashWindow(wnd, FLASHW_ALL | FLASHW_TIMERNOFG, 0, 0);	}		public static void flashWindow(Frame wnd, int flags, int count, int timeout) throws TrayIconException {		flashWindow(wnd.getTitle(), flags, count, timeout);	}		public static void flashWindow(String title, int flags, int count, int timeout) throws TrayIconException {		if (!flashWindowImpl(title, flags, count, timeout)) {			throw new TrayIconException("Flash window not supported");		}	}			public static native boolean flashWindowImpl(String title, int flags, int count, int timeout);		public static void setCurrentWindow(Window wnd) {		m_CurrentWindow = wnd;	}	public static native String getWindowsVersionString();	public static native int getWindowsVersion();	public final static int WIN_VER_UNKNOWN = 0;	public final static int WIN_VER_WIN32 = 1;	public final static int WIN_VER_95 = 2;	public final static int WIN_VER_98 = 3;	public final static int WIN_VER_ME = 4;	public final static int WIN_VER_NT = 5;	public final static int WIN_VER_2K = 6;	public final static int WIN_VER_XP = 7;	public final static int WIN_VER_NET = 8;		public static boolean supportsBallonInfo() {		int version = getWindowsVersion();		return version >= WIN_VER_2K;	}/**************************************************************************************************************** *                                                                                                              * * Next section is for inter use only -- or for hackers :O)                                                     * *                                                                                                              * ****************************************************************************************************************/// Constructor	private WindowsTrayIcon() {	}// Each icon has a unique id ranging from 0..99	private int m_ID;// Each icon can have a popup menu - activated when user right clicks the icon	private TrayIconPopup m_Popup;// Each icon can have any number of ActionListeners - notified when user clicks (left/right) the icon	private Vector m_ActList, m_MouseList, m_BalloonList;// Each application can have one WindowsMessageCallback - notified when another app uses sendWindowsMessage	private static TrayIconCallback m_WMessageCallback;	private final static int MOUSE_BTN_UP = 1;	private final static int MOUSE_BTN_DOUBLE = 2;	public static TrayDummyComponent getDummyComponent() {		if (m_Dummy == null) m_Dummy = new TrayDummyComponent();		return m_Dummy;	}/** * Private method called by native library when user clicks mouse button * * Param button = "Left" or "Right" or "Middle" */	private void notifyMouseListeners(int button, int mask, int xp, int yp) {		int clicks = (mask & MOUSE_BTN_DOUBLE) != 0 ? 2 : 1;		boolean up = (mask & MOUSE_BTN_UP) != 0;		if (m_ActList != null && clicks == 1 && up == false) {			ActionEvent evt = null;			if (button == 0) evt = new ActionEvent(this,0,"Left");			else if (button == 1) evt = new ActionEvent(this,0,"Right");			else evt = new ActionEvent(this,0,"Middle");			for (Enumeration enu = m_ActList.elements(); enu.hasMoreElements(); ) {				ActionListener listener = (ActionListener)enu.nextElement();				listener.actionPerformed(evt);			}		}		if (m_MouseList != null) {			int modifiers = 0;			if (button == 0) modifiers |= MouseEvent.BUTTON1_MASK;			else if (button == 1) modifiers |= MouseEvent.BUTTON2_MASK;			else modifiers |= MouseEvent.BUTTON3_MASK;			// (Component source, int id, long when, int modifiers, int x, int y, int clickCount, boolean popupTrigger)			MouseEvent evt = new MouseEvent(getDummyComponent(), 0, 0, modifiers, xp, yp, clicks, button == 1);			for (Enumeration enu = m_MouseList.elements(); enu.hasMoreElements(); ) {				MouseListener listener = (MouseListener)enu.nextElement();				if (up) listener.mouseReleased(evt);				else listener.mousePressed(evt);			}		}	}	/** * Private method called by native library when something happens with the balloon message * */	private void notifyBalloonListeners(int mask) {		if (m_BalloonList != null) {			TrayBalloonEvent evt = new TrayBalloonEvent(mask);			for (Enumeration enu = m_BalloonList.elements(); enu.hasMoreElements(); ) {				TrayBalloonListener listener = (TrayBalloonListener)enu.nextElement();				listener.balloonChanged(evt);			}		}	}	/** * Private method called by native library when user selects popup menu item * * Param id = id of menu item (each menu item has unique id) */	private void notifyMenuListeners(int id) {		if (m_Popup != null) m_Popup.onSelected(id);	}/** * Private method called by native library when it receives a sendWindowsMessage event * See sendWindowsMessage() for more information or take a look at the demo app * * Param lParam = parameter send along with windows message */	private static int callWindowsMessage(int lParam) {		if (m_WMessageCallback != null) return m_WMessageCallback.callback(lParam);		else return 0;	}	private static void callMouseHook(int xp, int yp) {		if (m_MouseHook != null) {			MouseEvent evt = new MouseEvent(getDummyComponent(), 0, 0, 0, xp, yp, 1, true);			m_MouseHook.mousePressed(evt);		}	}/** * Modify property of menu item * * Param menuId = the id of the menu item * Param what = which property to modify * Param state = true property enabled */	void modifyPopup(int menuId, int what, boolean state) {		modifyPopup(m_ID, menuId, what, state);	}/** * Init new popup menu - used by setPopup() * * Param id = the icon's id * Param nblevels = the submenu depth of the new popup */	static native void initPopup(int id, int nblevels);// Constants for builing a popup menu// Used by subclasses of TrayIconPopupItem	final static int POPUP_TYPE_ITEM        = 0;	// Simple item	final static int POPUP_TYPE_SEPARATOR   = 1;	// Separator	final static int POPUP_TYPE_CHECKBOX    = 2;	// Checkbox item	final static int POPUP_TYPE_INIT_LEVEL  = 3;	// First item of submenu	final static int POPUP_TYPE_DONE_LEVEL  = 4;	// Last item of submenu// Enable/Disable and friends	final static int POPUP_MODE_ENABLE      = 1;	final static int POPUP_MODE_CHECK       = 2;	final static int POPUP_MODE_DEFAULT     = 4;/** * Add popup menu item - used by setTrayIcon() in subclasses of TrayIconPopupItem * * Param id = the icon's id * Param level = the submenu level * Param name = the name of the menu item * Param type = POPUP_TYPE_ITEM or POPUP_TYPE_SEPARATOR or.. */	static native int subPopup(int id, int level, String name, int type, int extra);/** * Modify menu item properties * * Param id = the icon's id * Param menuId = the id of the menu item * Param what = property to modify * Param state = on/off */		private static native void modifyPopup(int id, int menuId, int what, boolean state);		/** * Allocate a new id for icon - used in constructor */	private static native int getFreeId();/** * Set bitmap data for icon - used in constructor and setImage() * * Param id = the icon's id * Param w, h = the images size * Param pixels = the pixel array */	private static native void setIconData(int id, int w, int h, int pixels[]);/** * Make Tray Icon visible/invisible - used by setVisible() * * Param id = the icon's id * Param hide = visible/invisible? */	private static native void showIcon(int id, boolean hide);/** * Test if Tray Icon is in the system tray - used by isVisible() * * Param id = the icon's id */	private static native int testVisible(int id);/** * Enable mouse/menu messages for icon - used by addActionListener() and setPopup() * * Param ico = the icons class (this) * Param id = the icon's id * Param enable = enable/disable mouse events? */	private static native void clickEnable(WindowsTrayIcon ico, int id, boolean enable);/** * Set tooltip - used by setToolTip(String tip) * * Param id = the icon's id * Param tip = the new tooltip */	private static native void setToolTip(int id, String tip);/** * Free all native resources for this icon - used by freeIcon() * * Param id = the icon's id */	private static native void freeIcon(int id);		private static native void detectAllClicks(int id);	public static native void initJAWT();	public static native void initHook();	public static native void setMouseHookEnabled(int enable);	public static void setMouseClickHook(MouseListener listener) {		m_MouseHook = listener;				setMouseHookEnabled(listener == null ? 0 : 1);	}		private static native void initTrayIcon(String appName, WindowsTrayIcon cls);	private static native int showBalloon(int id, String msg, String title, int timeout, int flags);	private static native void termTrayIcon();		public static Window getCurrentWindow() {		return m_CurrentWindow;	}	// Init the native library	static {		boolean ok = false;		String version = System.getProperty("java.version");		if (version.length() >= 3) {			String v1 = version.substring(0,3);			if (v1.equals("1.1")) {				System.loadLibrary("TrayIcon11");				ok = true;			} else {				System.loadLibrary("TrayIcon12");				ok = true;			}		}		if (!ok) {			System.out.println("Wrong Java VM version: "+version);			System.exit(-1);		}	}}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?