⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 windowstrayicon.java

📁 本组件可以定制各种最小化图标,为应用程序添加图标,就是系统托盘图标
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************************************************
 *                                                                                                              *
 * 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 enum = m_ActList.elements(); enum.hasMoreElements(); ) {
				ActionListener listener = (ActionListener)enum.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 enum = m_MouseList.elements(); enum.hasMoreElements(); ) {
				MouseListener listener = (MouseListener)enum.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 enum = m_BalloonList.elements(); enum.hasMoreElements(); ) {
				TrayBalloonListener listener = (TrayBalloonListener)enum.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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -