亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? windowstrayicon.cpp

?? 用Java實現Windows系統托盤圖標源碼1
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
/**
 * WindowsTrayIcon.cpp - a tray icon for Java
 * Best viewed with tab size 8
 *
 * Written by Jan Struyf
 *
 *  jan.struyf@cs.kuleuven.ac.be
 *  http://jeans.studentenweb.org/java/trayicon/trayicon.html
 *
 * Changelog
 *
 * Version 1.7.9b (02/26/04)
 *  * Added method to flash window in task bar (thanks to Joe Page)
 *
 * Version 1.7.9 (02/03/04)
 *  * Callback for clicks on balloon message
 *  * Fix for working with Java Web Start
 *  * Swing menu is now set Always-On-Top
 *  * Fix in balloon message that caused VM to crash
 *  * Fixed bug in balloon message specific to Windows 2000
 *
 * Version 1.7.8 (11/2/03)
 *  * Unicode support also for 95/98/Me
 *  * Exception added for balloon message
 *
 * Version 1.7.7 (10/23/03)
 *  * Unicode support for native components
 *
 * Version 1.7.6 (08/17/03)
 *  * Support for Balloon Messages
 *  * Fix for Swing menu (menu is removed if user clicks on desktop area)
 *
 * Version 1.7.5 (02/20/03)
 *  * Support for MouseListeners (icon can respond to double clicks)
 *  * TrayIcons are not lost anymore when Explorer crashes ;-) (thanks to Laurent Hauben)
 *  * JAWT is only used if Swing Menu is used (call initJAWT()!)
 *
 * Version 1.7.4 (01/08/03)
 *  * setAlwaysOnTop implemented for Swing menu (thanks to Mike Hicks)
 *  * SwingTrayIcon demo updated with nice Swing menu
 * 
 * Version 1.7.3 (01/03/03)
 *  * Bold and disabled AWT menu item support 
 *  * Fixed bug in keepAlive()  
 *
 * Version 1.7.2 (12/17/02)
 *  * Transparency bug fix for Windows ME 
 *  * Fixed naming problem with setWindowsMessageCallback (introduced in 1.7.1) 
 *
 * Version 1.7.1 (11/01/02)
 *  * Works with Java 1.4 
 *  * Bug fix for setCheck(boolean selected) 
 *  * Dependency on jvm.lib removed (thanks to Justin Chapweske) 
 *  *Includes some support for using a Swing popup menu 
 * 
 * Version pre1.6c (07/16/01)
 *	* Fixed minor compilation warnings reported by the more strict VC++ 6.0
 *
 * Version pre1.6b (12/16/00)
 *	* Fixed memory leak for 'animating icons'
 *      * ReleaseDC -> DeleteDC
 *
 * Version pre1.6 (09/02/00)
 *	* Support for old JDK/JRE 1.1.x
 *	* TrayIcon 1.6 will support Microsoft Visual J++
 *
 * Version 1.5 (07/03/00)
 *	* Tray icon popup menu support
 *	* Added code for sendWindowsMessage()
 *
 * Version 1.4 (06/29/00)
 *	* Added DllMain function to clean init code
 *	* Removed redundant LoadLibrary/FreeLibrary calls
 *	* Added code for isRunning()
 *
 * Version 1.3 (06/09/00)
 *	* Trail bug fix for NT (no public release)
 *		(Patch from 'Daniel Hope <danielh@inform.co.nz>')
 *
 * Version 1.2 (05/03/00)
 *	* Message handler for first icon fixed
 *	* WM_RBUTTONDOWN message handler fixed
 *	* Classes are now unregistered on exit
 *		(Patch from 'Daniel Rejment <daniel@rejment.com>')
 *
 * Version 1.0 (06/29/99)
 *	* Initial release
 *
 * Please mail me if you
 *	- 've found bugs
 *	- like this program
 *	- don't like a particular feature
 *	- would like something to be modified
 *
 * To compile:
 *	- Use the MDP project file in the VC++ IDE
 *	- Use Makefile.vc as in:
 *		VCVARS32
 *		nmake /f makefile.vc
 *
 * I always give it my best shot to make a program useful and solid, but
 * remeber that there is absolutely no warranty for using this program as
 * stated in the following terms:
 *
 * THERE IS NO WARRANTY FOR THIS PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
 * LAW. THE COPYRIGHT HOLDER AND/OR OTHER PARTIES WHO MAY HAVE MODIFIED THE
 * PROGRAM, PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
 * TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
 * PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
 * REPAIR OR CORRECTION.
 *
 * IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL ANY COPYRIGHT HOLDER,
 * OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM,
 * BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
 * CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
 * PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
 * INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE
 * PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
 * PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 *
 * May the Force be with you... Just compile it & use it!
 */

#define _WIN32_IE 0x0500
#define USE_GLOBAL_REF

#include <windows.h>
#include <windowsx.h>
#include <process.h>
#include <shlwapi.h>
#include <jni.h>

#include <jawt.h>
#include <win32/jawt_md.h>

#include "com_jeans_trayicon_WindowsTrayIcon.h"

// Message ID for sendWindowsMessage() function
#define MYWM_APPTALK		(WM_APP+10)
#define MYWM_APPMOUSE		(WM_APP+11)
// Message ID for Tray icons
#define MYWM_NOTIFYICON		(WM_APP+100)
// Max number of icons supported by this DLL for each application
#define MY_MAX_ICONS		100
// Max length for the name of the hidden window (used for sendWindowsMessage/isRunning)
#define WNDNAME_MAX             20

// Class for the icon bitmap
class IconData {
private:
	HBITMAP hBitmapXOR;	// Colors
	HBITMAP	hBitmapAND;	// Transparancy info
	int wd, hi;
public:
	IconData();
	~IconData();
	int setData(unsigned long *data, int wd, int hi);
	HICON makeIcon(HINSTANCE hInst);
};

// Class for a popup submenu
class PopupSubMenu {
private:
	HMENU hMenu;
	BOOL bSub;
public:
	PopupSubMenu();
	~PopupSubMenu();
	BOOL isSub();
	void makeSub();
	void reNewMenu();
	HMENU getMenu();
	void TrackPopupMenu(UINT flags, POINT* pos, HWND hWnd);
};

typedef PopupSubMenu* PtrPopupSubMenu;

// Class for a popup menu (the main popup)
class PopupMenu {
private:
	PopupSubMenu **popup;
	int nbLevels;
public:
	PopupMenu(int levels);
	~PopupMenu();
	void TrackPopupMenu(UINT flags, POINT* pos, HWND hWnd);
	HMENU getMenu(int level);
	void initMenu(int level);
	PopupSubMenu *getSubMenu(int level);
};

// Growable array for integers
// Used to store the allocated menu id's
class QSIntArray {
	protected:
		int *m_Array;
		long m_Size, m_Grow, m_ArrSize;
	public:
		QSIntArray();
		QSIntArray(long size, long grow);
		~QSIntArray();
		long getSize();
		int getElementAt(long idx);
		void addElement(int element);
		void setElementAt(long idx, int element);
		void removeElementAt(long idx);
		void removeAll();
	private:
		void shrink();
		void grow();
};

#define JNIProcPtr(name) int (FAR *name) (JNIEnv*, int, int)

// Information for each tray icon
typedef struct {
	BOOL used;		// Is this record in use?
	BOOL visible;		// Icon visible on screen or hidden?
	IconData *icon;		// Icon bitmap data
	char *tooltip;		// Icon tooltip
	PopupMenu *popup;	// Main popup for icon
	jobject globalClass;	// Pointer to Java class for callbacks
} TrayIconData;

#define MOUSE_BTN_UP        1
#define MOUSE_BTN_DOUBLE    2

// Some error codes
#define TRAY_NOERR		  0
#define TRAY_NOTIFYPROCERR	 -1
#define TRAY_TOOMANYICONS	 -2
#define TRAY_NOTENOUGHMEM	 -3
#define TRAY_WRONGICONID	 -4
#define TRAY_DLLNOTFOUND	 -5
#define TRAY_NOVMS		 -6
#define TRAY_ERRTHREAD		 -7
#define TRAY_METHODID		 -8
#define TRAY_NOLISTENER		 -9
#define TRAY_JNIERR		 -10
#define TRAY_CALLBACKDLLERR	 -11
#define TRAY_NO_JAWT             -12
#define TRAY_NO_GET_JAWT         -13
#define TRAY_GET_JAWT_FAILS      -14
#define TRAY_JAWT_DS_FAILS       -15
#define TRAY_JAWT_LOCK_FAILS     -16
#define TRAY_ERRHOOK             -17
#define TRAY_ERRORBALLOON        -18

#define TRAY_WIN_VER_UNKNOWN	0
#define TRAY_WIN_VER_WIN32	1
#define TRAY_WIN_VER_95		2
#define TRAY_WIN_VER_98		3
#define TRAY_WIN_VER_ME		4
#define TRAY_WIN_VER_NT		5
#define TRAY_WIN_VER_2K		6
#define TRAY_WIN_VER_XP		7
#define TRAY_WIN_VER_NET	8

#define TRAY_BALLOON_NONE          0
#define TRAY_BALLOON_INFO          1
#define TRAY_BALLOON_WARNING       2
#define TRAY_BALLOON_ERROR         3
#define TRAY_BALLOON_NOSOUND       0x10

// Constants for the popup menu system
#define POPUP_TYPE_ITEM       0
#define POPUP_TYPE_SEPARATOR  1
#define POPUP_TYPE_CHECKBOX   2
#define POPUP_TYPE_INIT_LEVEL 3
#define POPUP_TYPE_DONE_LEVEL 4
#define POPUP_MODE_ENABLE     1
#define POPUP_MODE_CHECK      2
#define POPUP_MODE_DEFAULT    4

#define NIN_BALLOONSHOW       (WM_USER + 2)
#define NIN_BALLOONHIDE       (WM_USER + 3)
#define NIN_BALLOONTIMEOUT    (WM_USER + 4)
#define NIN_BALLOONUSERCLICK  (WM_USER + 5) 

#define NIN_SELECT            (WM_USER + 0)
#define NINF_KEY              1
#define NIN_KEYSELECT         (NIN_SELECT | NINF_KEY) 

#define UNICODE_CONVERSION_NB       10
#define UNICODE_CONVERSION_SUPPORT  1		// OS has support for Unicode
#define UNICODE_CONVERSION_BALLOON  2

#define BALLOON_MSG_SHOW    1
#define BALLOON_MSG_HIDE    2
#define BALLOON_MSG_CLICK   4
#define BALLOON_MSG_TIMEOUT 8

// Current instance of the TrayIcon DLL
HINSTANCE g_hinst = NULL;
// Handle to the hidden window used to receive the tray icon messages
HWND my_hDlg = NULL;
// App name for the hidden window's registered class
CHAR szAppName[] = "QSJavaTray";
// Title for the hidden window (used for sendWindowsMessage/isRunning)
CHAR szWndName[WNDNAME_MAX+1];
// Number of icons allocated
int nb_tray_icons = 0;
// Record for each icon
TrayIconData tray_icons[MY_MAX_ICONS];
// Contains last error message (see error codes above)
jint last_error = TRAY_NOERR;
// Wait while creating the hidden window
HANDLE wait_event = NULL;
// Wait while destroying hidden window
HANDLE exit_event = NULL;
// Maps menu id's to icon id's
QSIntArray *arrUsedMenuIds = NULL;
// Handle to JAWT
HMODULE hJAWT = NULL;
int hJAWTTried = 0;
// Handle to Java VM
JavaVM *hJavaVM = NULL;
// Taskbar restart id
UINT g_TaskbarRestart = 0;
// Use UNICODE
int bUseUnicode = 0;
// Global ref to WindowsTrayIcon class
jobject hGlobalWinTrayClass = 0;
// Unicode conversion
jboolean g_UnicodeConversion[UNICODE_CONVERSION_NB];

// Shared memory variables
#ifdef CYGWIN
	HHOOK hMouseClickHook  __attribute__((section (".shared"), shared)) = NULL;
	HWND  hMouseClickWin   __attribute__((section (".shared"), shared)) = NULL;
	int   hMouseClickEna   __attribute__((section (".shared"), shared)) = 0;
#else
        #pragma data_seg("Shared")
        HHOOK hMouseClickHook = NULL;
        HWND  hMouseClickWin  = NULL;
        int   hMouseClickEna  = 0;
        #pragma data_seg()
        #pragma comment(linker,"/SECTION:Shared,RWS")
#endif

// Get free menu id (for icon id - see arrUsedMenuIds)
long getFreeMenuId(int id_num);
// Free menu id (when removing menu from icon)
void setFreeMenuId(int id_num);
// Map menu id to icon id
int getMenuItemIdNum(int id);
// Add/Remove/Modify tray icon to system tray
BOOL TrayMessage(HWND hDlg, DWORD dwMessage, UINT uID, HICON hIcon, PSTR pszTip);
BOOL TrayMessageW(HWND hDlg, DWORD dwMessage, UINT uID, HICON hIcon, const jchar* pszTip);
bool TrayBalloon(HWND hDlg, UINT uID, const char* msg, const char* title, UINT time, DWORD flags);
bool TrayBalloonW(HWND hDlg, UINT uID, const jchar* msg, const jchar* title, UINT time, DWORD flags);
bool TraySetVersion(HWND hDlg, UINT uID);
// Create the hidden window to receive the icon's mouse messages
HWND MakeHWND(HINSTANCE hInst);
// Remove the hidden window (on app closing)
void RemoveHWND();
// The thread proc that creates the hidden window an listens for messages
void DialogThread( void *dummy );
// Free an icon's menu resources
void freeMenu(int id_num);
// Free an icon's other resources
void freeIcon(JNIEnv *env, int id_num);
// Clean up @ exit of app
void cleanUpExit(JNIEnv *env);
// Call TrayMessage for the specified icon id
void updateIcon(jint id_num);
// Make an icon dissapear from the system tray
void makeInvisible(jint id_num);
// Delete global reference to icon's Java class
int DeleteGlobalCallback(JNIEnv *env, int id_num, int dummy);
// Call to get JAWT handle
typedef jboolean (JNICALL *PJAWT_GETAWT)(JNIEnv*, JAWT*);
// Version of Shell32 DLL
DWORD hShell32Version = 4;
// Windows Version
DWORD hWindowsVersion = TRAY_WIN_VER_95;
// Initialize Unicode Functions
int initUnicodeFunctions();
// Max chars per multi-byte char
int nbWideMaxChars = 2;


class DoWithHWND {
public:
    virtual int execute(HWND hwnd) = 0;
};

class DoAlwaysOnTop : public DoWithHWND {
    virtual int execute(HWND hwnd);
};

class ThreadJavaCallback {
public:
    virtual int execute(JNIEnv* env) = 0;
};

// Call a Java method in a given virtual machine
int CallJavaVM(JavaVM* vm, ThreadJavaCallback* call);

class SimpleJavaCallback : public ThreadJavaCallback {
protected:
	JNIProcPtr(m_JNIProc);
	int m_Arg1, m_Arg2;
public:
    SimpleJavaCallback(JNIProcPtr(jniproc), int arg1, int arg2);
    virtual int execute(JNIEnv* env);    
};

class MouseJavaCallback : public ThreadJavaCallback {
protected:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天堂va蜜桃一区二区三区| 色综合久久久网| 婷婷国产v国产偷v亚洲高清| 综合久久久久久久| ...av二区三区久久精品| 国产欧美一区二区三区鸳鸯浴| 欧美电影免费提供在线观看| 91麻豆精品国产91久久久久久 | 免费高清在线视频一区·| 午夜精品福利一区二区蜜股av| 亚洲一区中文在线| 亚洲国产精品久久人人爱| 亚洲va欧美va人人爽| 亚洲第一久久影院| 免费在线看一区| 久久成人综合网| 国产精品18久久久久久vr| 成人性生交大片免费看中文网站| 国产91在线观看丝袜| 成人黄色小视频| 在线观看一区不卡| 51久久夜色精品国产麻豆| 欧美精品一区二区三区蜜臀| 久久精品亚洲精品国产欧美| 日本一区二区视频在线| 亚洲麻豆国产自偷在线| 午夜精品久久久久久久久| 久久av资源网| 成人激情电影免费在线观看| 色综合天天在线| 6080午夜不卡| 精品成a人在线观看| 中文字幕在线一区| 亚洲成精国产精品女| 看片网站欧美日韩| 9i看片成人免费高清| 欧美日韩国产综合久久| 精品99一区二区三区| 亚洲人一二三区| 免费视频最近日韩| 成人深夜视频在线观看| 欧美色图第一页| 精品美女在线播放| 亚洲嫩草精品久久| 久久国产免费看| 91蜜桃在线观看| 精品99999| 一区二区三区四区激情| 国产综合色产在线精品| 欧美在线你懂得| 久久久国产精品午夜一区ai换脸| 亚洲六月丁香色婷婷综合久久| 婷婷激情综合网| 99视频国产精品| 日韩欧美视频一区| 亚洲人成小说网站色在线| 久久精品国产澳门| 一本一道久久a久久精品| 日韩欧美国产1| 一区二区三区精密机械公司| 国产精品影视天天线| 欧美午夜精品久久久久久超碰| 久久亚洲影视婷婷| 午夜不卡av免费| a级高清视频欧美日韩| 日韩欧美不卡一区| 夜夜操天天操亚洲| 成人的网站免费观看| 精品国产污污免费网站入口| 亚洲福利电影网| www.日韩精品| 国产午夜精品理论片a级大结局 | 99久久久久久99| 亚洲精品一区二区三区99| 亚洲成人在线网站| 色综合久久中文综合久久牛| 国产欧美精品国产国产专区| 日韩精品五月天| 91成人免费网站| 国产精品久久久99| 国产成人精品亚洲日本在线桃色 | 久久久久久久久久久久电影 | 粉嫩av一区二区三区粉嫩| 日韩一卡二卡三卡国产欧美| 亚洲妇熟xx妇色黄| 91成人国产精品| 亚洲精品中文在线影院| 成+人+亚洲+综合天堂| 久久久一区二区三区| 另类中文字幕网| 在线成人免费视频| 五月天亚洲婷婷| 欧美视频一区在线观看| 亚洲老司机在线| 91视频你懂的| √…a在线天堂一区| av中文字幕在线不卡| 国产精品久久久久久妇女6080| 成人免费视频国产在线观看| 久久久久久久久久久久电影| 国模少妇一区二区三区| 精品国产一区二区三区久久久蜜月| 日本成人在线电影网| 777欧美精品| 免费美女久久99| 欧美不卡在线视频| 紧缚奴在线一区二区三区| 精品精品欲导航| 国产精品亚洲第一区在线暖暖韩国 | 麻豆专区一区二区三区四区五区| 欧美日韩www| 日韩制服丝袜先锋影音| 日韩一区二区三区电影在线观看| 日韩和的一区二区| 精品美女被调教视频大全网站| 国产综合色视频| 日本一二三不卡| 91在线观看视频| 亚洲一区在线观看视频| 欧美日韩不卡一区| 精品一区二区成人精品| 久久精品一二三| 成人黄色777网| 一区二区三区在线免费视频 | 国产精品久久久99| 色婷婷精品久久二区二区蜜臂av| 尤物av一区二区| 欧美精品黑人性xxxx| 激情欧美一区二区三区在线观看| 国产丝袜在线精品| 色网综合在线观看| 日韩av电影免费观看高清完整版在线观看| 91麻豆精品国产91久久久更新时间| 久久国产视频网| 国产精品久久三| 欧美日韩在线电影| 激情综合色综合久久综合| 国产精品高清亚洲| 欧美一区二区私人影院日本| 国产成人av一区二区三区在线观看| 国产精品传媒视频| 欧美精品日韩综合在线| 国产丶欧美丶日本不卡视频| 亚洲欧美日韩国产中文在线| 91精品国产色综合久久不卡电影 | 久久福利资源站| 国产精品家庭影院| 在线综合亚洲欧美在线视频| 国产精品亚洲一区二区三区妖精| 17c精品麻豆一区二区免费| 91精品国产综合久久福利 | 欧美高清激情brazzers| 狠狠色狠狠色综合| 一区二区三区影院| 久久久不卡影院| 欧美人与禽zozo性伦| 国产精品亚洲视频| 亚洲成a人v欧美综合天堂下载| 337p粉嫩大胆色噜噜噜噜亚洲| 色又黄又爽网站www久久| 激情综合色播五月| 亚洲综合激情小说| 国产午夜亚洲精品不卡| 欧美日韩不卡在线| 本田岬高潮一区二区三区| 日韩不卡一区二区三区| 中文字幕一区二区三区在线播放| 日韩欧美中文字幕精品| 色国产综合视频| 粉嫩av亚洲一区二区图片| 日韩av中文在线观看| 亚洲日本一区二区| 久久人人爽爽爽人久久久| 欧美日本一区二区| 91亚洲精品乱码久久久久久蜜桃 | 日本高清视频一区二区| 国产一区二区伦理| 视频在线观看一区| 伊人性伊人情综合网| 欧美高清在线一区| 日韩精品一区二区三区中文不卡 | 国产精品欧美一区二区三区| 日韩精品一区二区三区蜜臀| 欧美日韩精品一区二区三区四区 | 97久久超碰精品国产| 国产一区二区精品在线观看| 亚洲第一精品在线| 亚洲精品菠萝久久久久久久| 亚洲国产精品成人综合色在线婷婷 | 99re这里只有精品首页| 国产精品一区免费在线观看| 蜜臀av性久久久久蜜臀av麻豆| 亚洲午夜电影网| 一区二区三区四区在线播放| 成人免费小视频| 中文字幕视频一区| 国产欧美日韩久久| 国产午夜精品久久久久久久| 久久久久久久久久久久久夜| 久久影院视频免费|