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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? windowstrayicon.cpp

?? 用Java實(shí)現(xiàn)Windows系統(tǒng)托盤(pán)圖標(biāo)源碼1
?? CPP
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
	int m_IDNum, m_Button, m_Mask;
	POINT m_Pos;
public:
    MouseJavaCallback(int idnum, int button, int mask);    
    MouseJavaCallback(int idnum, int button, int mask, POINT* pos);
    POINT* getPos();
    virtual int execute(JNIEnv* env);    
};

class BalloonJavaCallback : public ThreadJavaCallback {
protected:
	int m_IDNum, m_Mask;
public:
    BalloonJavaCallback(int idnum, int mask);    
    virtual int execute(JNIEnv* env);    
};

void doWithHWND(DoWithHWND* hwndProc, JNIEnv* env, jobject window);
void GetJAWTHandle();
void RemoveJAWT();
void RemoveHook();
char* find_in_path(const char* append);
BOOL GetOSName(char* osname, int* version);
int TrayGetWindowsVersion();
int GetShell32VerionHelp(DLLVERSIONINFO* version);
DWORD GetShell32Version();

// Struct size for Win95 compatibility
#define MY_NOTIFYICONDATA_V2_SIZE 88

// New struct (WinXP style)
typedef struct {
	DWORD cbSize;			// 4
	HWND  hWnd;			// 8
	DWORD uID;			// 12
	DWORD uFlags;			// 16
	DWORD uCallbackMessage;		// 20
	HICON hIcon;			// 24
	char szTip[128];		// 152
	DWORD dwState;			// 156
	DWORD dwStateMask;		// 160
	char szInfo[256];		// 416
	DWORD uTimeOrVersion;		// 420
	char szInfoTitle[64];		// 484
	DWORD dwInfoFlags;		// 488
	GUID guidItem;			// 492
} MY_NOTIFYICONDATA;
	
// New struct (WinXP style - Unicode Version)
typedef struct {
	DWORD cbSize;			// 4
	HWND  hWnd;			// 8
	DWORD uID;			// 12
	DWORD uFlags;			// 16
	DWORD uCallbackMessage;		// 20
	HICON hIcon;			// 24
	jchar szTip[128];		// 152
	DWORD dwState;			// 156
	DWORD dwStateMask;		// 160
	jchar szInfo[256];		// 416
	DWORD uTimeOrVersion;		// 420
	jchar szInfoTitle[64];		// 484
	DWORD dwInfoFlags;		// 488
	GUID guidItem;			// 492
} MY_NOTIFYICONDATAW;
	
// Should be declared by header files
#define NIF_INFO           0x10
#define NIM_SETVERSION     0x04 
#define NOTIFYICON_VERSION 3

#define NIIF_NONE          0
#define NIIF_INFO          1
#define NIIF_WARNING       2
#define NIIF_ERROR         3
#define NIIF_NOSOUND       0x10

typedef struct {
  UINT cbSize;
  HWND hwnd;
  DWORD dwFlags;
  UINT uCount;
  DWORD dwTimeout;
} MY_FLASHWINFO;

#define MY_FLASHW_STOP		0
#define MY_FLASHW_CAPTION	1
#define MY_FLASHW_TRAY		2
#define MY_FLASHW_TIMER		4
#define MY_FLASHW_TIMERNOFG	12

typedef BOOL (*P_FLASHWINDOWEX)(MY_FLASHWINFO*);

void copyJCharMax(const jchar* src, jchar* tar, int size) {
	for (int i = 0; i < size-1; i++) {
		tar[i] = src[i];
		if (src[i] == 0) return;
	}
	tar[size-1] = 0;
}

int lenJChar(const jchar* src) {
	if (src == NULL) return 0;
	int len = 0;
	while (src[len] != 0) len++;
	return len;
}

#define UNICODE_NAME_MAX 8

typedef struct {
	char name[UNICODE_NAME_MAX];
	jchar value; 	
} UnicodeMapping;

UnicodeMapping UnicodeMap[] =
	{{"lsquo", 8216}, {"rsquo", 8217}, {"ldquo", 8220}, {"rdquo", 8221}, {"dagger", 8224},
	 {"Dagger", 8225}, {"permil", 8240}, {"larr", 8592}, {"uarr", 8593}, {"rarr", 8594},
	 {"darr", 8595}, {"trade", 8482}, {"iexcl", 161}, {"cent", 162}, {"pound", 163},
	 {"curren", 164}, {"yen", 165}, {"sect", 167}, {"copy", 169}, {"not", 172}, {"reg", 174},
	 {"deg", 176}, {"plusmn", 177}, {"sup2", 178}, {"sup3", 179}, {"micro", 181}, {"para", 182},
	 {"middot", 183}, {"sup1", 185}, {"frac14", 188}, {"frac12", 189}, {"frac34", 190}, 
	 {"iquest", 191}, {"Agrave", 192}, {"Aacute", 193}, {"Acirc", 194}, {"Atilde", 195},
	 {"Auml", 196}, {"Aring", 197}, {"AElig", 198}, {"Ccedil", 199}, {"Egrave", 200},
	 {"Eacute", 201}, {"Ecirc", 202}, {"Euml", 203}, {"Igrave", 204}, {"Iacute", 205},
	 {"Icirc", 206}, {"Iuml", 207}, {"ETH", 208}, {"Ntilde", 209}, {"Ograve", 210},
	 {"Oacute", 211}, {"Ocirc", 212}, {"Otilde", 213}, {"Ouml", 214}, {"times", 215},
	 {"Oslash", 216}, {"Ugrave", 217}, {"Uacute", 218}, {"Ucirc", 219}, {"Uuml", 220},
	 {"Yacute", 221}, {"THORN", 222}, {"szlig", 223}, {"agrave", 224}, {"aacute", 225},
	 {"acirc", 226}, {"atilde", 227}, {"auml", 228}, {"aring", 229}, {"aelig", 230},
	 {"ccedil", 231}, {"egrave", 232}, {"eacute", 233}, {"ecirc", 234}, {"euml", 235},
	 {"igrave", 236}, {"iacute", 237}, {"icirc", 238}, {"iuml", 239}, {"eth", 240},
	 {"ntilde", 241}, {"ograve", 242}, {"oacute", 243}, {"ocirc", 244}, {"otilde", 245},
	 {"ouml", 246}, {"divide", 247}, {"oslash", 248}, {"ugrave", 249}, {"uacute", 250},
	 {"ucirc", 251}, {"uuml", 252}, {"yacute", 253}, {"thorn", 254}, {"yuml", 255},
	 {"", 0}};

void convertUnicodeString(const jchar* strg, jchar* strgo, int nbMax) {
	char buffer[UNICODE_NAME_MAX+1];
	int in_buffer = 0, bufpos = 0, pos = 0, opos = 0;
	while (strg[pos] != 0) {
		if (pos >= nbMax) break;
		if (opos >= nbMax) break;
		if (in_buffer == 1) {
			if (strg[pos] == (jchar)';') {
				int mappos = 0, found = 0;
				buffer[bufpos] = 0;
				while (UnicodeMap[mappos].value != 0) {
					if (strcmp(UnicodeMap[mappos].name, buffer) == 0) {
						int len = strlen(UnicodeMap[mappos].name);
						opos -= len+1;
						strgo[opos++] = UnicodeMap[mappos].value;
						found = 1;
					}
					mappos++;
				}
				if (found == 0) {
					strgo[opos++] = (jchar)';';
				}
				in_buffer = 0;
			} else if (strg[pos] == (jchar)'&') {
				strgo[opos++] = (jchar)'&';
				bufpos = 0;
			} else {
				if (bufpos < UNICODE_NAME_MAX) {
					if (strg[pos] < 255) {
						buffer[bufpos++] = (char)strg[pos];
					} else {
						in_buffer = 0;
					}
				} else {
					in_buffer = 0;
				}
				strgo[opos++] = strg[pos];
			}
		} else {
			if (strg[pos] == (jchar)'&') {
				in_buffer = 1;
				bufpos = 0;	
			}
			strgo[opos++] = strg[pos];
		}
		pos++;
	}
	strgo[opos] = 0;
}

char* convertUnicodeANSI(jchar* unicode) {
	int len = lenJChar(unicode);
	int nbmax = nbWideMaxChars*len;
	char* result = new char[nbmax+2];
	// Convert Unicode string to ANSI string
	if (!WideCharToMultiByte(CP_ACP, 0, (const WCHAR*)unicode, len+1, result, nbmax+1, NULL, NULL)) {
		// Fall back :-(
		for (int i = 0; i < len; i++) {
			result[i] = (char)(unicode[i] & 0xFF);
		}
	}
	return result;	
}

/*
 * Class:     com_jeans_trayicon_WindowsTrayIcon
 * Method:    enableUnicodeConversion
 * Signature: (IZ)V
 */
JNIEXPORT void JNICALL Java_com_jeans_trayicon_WindowsTrayIcon_enableUnicodeConversion(JNIEnv *, jclass, jint which, jboolean enable) {
	g_UnicodeConversion[which] = enable;
}

/*
 * Class:     com_jeans_trayicon_WindowsTrayIcon
 * Method:    hasUnicodeConversion
 * Signature: (I)I
 */
JNIEXPORT jboolean JNICALL Java_com_jeans_trayicon_WindowsTrayIcon_hasUnicodeConversion(JNIEnv *, jclass, jint which) {
	return g_UnicodeConversion[which];
}
/*
 * Class:     com_jeans_trayicon_WindowsTrayIcon
 * Method:    supportsBalloonMessages
 * Signature: ()Z
 */
JNIEXPORT jboolean JNICALL Java_com_jeans_trayicon_WindowsTrayIcon_supportsBalloonMessages(JNIEnv *, jclass) {
	if (hShell32Version < 5) {
		// No balloon messages supported :-(
		return FALSE;	
	} else {
		return TRUE;
	}	
}
/*
 * Class:     jeans_trayicon_WindowsTrayIcon
 * Method:    getLastError
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_com_jeans_trayicon_WindowsTrayIcon_getLastError(JNIEnv *, jclass) {
	int err = last_error;
	last_error = TRAY_NOERR;
	return last_error;		// Return the last error
}

/*
 * Class:     WindowsTrayIcon
 * Method:    getFreeId
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_com_jeans_trayicon_WindowsTrayIcon_getFreeId(JNIEnv *env, jclass) {
	// Wait for the hidden window to be created (see initTrayIcon())
	if (wait_event != NULL) {
		WaitForSingleObject(wait_event,10000);
		CloseHandle(wait_event);
		wait_event = NULL;
	}
	// Hidden window handle valid?
	if (my_hDlg == NULL) {
		last_error = TRAY_NOTIFYPROCERR;
		return TRAY_NOTIFYPROCERR;
	}
	// Instance handle valid?
	if (g_hinst == NULL) {
		last_error = TRAY_DLLNOTFOUND;
		return TRAY_DLLNOTFOUND;
	}
	// Find unused icon record and return icon id
	for (int ctr = 0; ctr < MY_MAX_ICONS; ctr++) {
		if (tray_icons[ctr].used == FALSE) {
			// Unused record, initialize fields and return id
			tray_icons[ctr].used = TRUE;
			tray_icons[ctr].visible = FALSE;
			tray_icons[ctr].icon = NULL;
			tray_icons[ctr].tooltip = NULL;
			tray_icons[ctr].popup = NULL;
			return ctr;
		}
	}
	// No empty record left, return error
	last_error = TRAY_TOOMANYICONS;
	return TRAY_TOOMANYICONS;
}

/*
 * Class:     WindowsTrayIcon
 * Method:    setIconData
 * Signature: (III[I)V
 */
JNIEXPORT void JNICALL Java_com_jeans_trayicon_WindowsTrayIcon_setIconData(JNIEnv *env, jclass, jint id_num, jint wd, jint hi, jintArray array) {
	// Instance handle valid?
	if (g_hinst == NULL) {
		last_error = TRAY_DLLNOTFOUND;
		return;
	}
	// Icon id valid?
	if (tray_icons[id_num].used == FALSE) {
		last_error = TRAY_WRONGICONID;
		return;
	}
	// Get array length and elements
	jsize len = env->GetArrayLength(array);
	jint *body = env->GetIntArrayElements(array, 0);
	// Allocate data for icon bitmap and store the given pixel array
	IconData *data = new IconData();
	if (data != NULL && data->setData((unsigned long *)body, wd, hi) != -1) {
		IconData *olddata = tray_icons[id_num].icon;
		tray_icons[id_num].icon = data;
		updateIcon(id_num);
		if (olddata != NULL) delete olddata;
	} else {
		delete data;
		last_error = TRAY_NOTENOUGHMEM;
	}
	// Release java array
	env->ReleaseIntArrayElements(array, body, 0);
}

void showIcon(int id_num) {
	// Show icon in windows system tray
	if (tray_icons[id_num].icon != NULL) {
		HICON icon = tray_icons[id_num].icon->makeIcon(g_hinst);
		if (icon != NULL) {
			if (bUseUnicode == 0) {			
				TrayMessage(my_hDlg, NIM_ADD, id_num, icon, tray_icons[id_num].tooltip);
			} else {
				TrayMessageW(my_hDlg, NIM_ADD, id_num, icon, (jchar*)tray_icons[id_num].tooltip);
			}
			tray_icons[id_num].visible = TRUE;
		} else {
			last_error = TRAY_NOTENOUGHMEM;
		}
	}
}

/*
 * Class:     WindowsTrayIcon
 * Method:    showIcon
 * Signature: (IZ)V
 */
JNIEXPORT void JNICALL Java_com_jeans_trayicon_WindowsTrayIcon_showIcon(JNIEnv *, jclass, jint id_num, jboolean show) {
	// Hidden window handle valid?
	if (my_hDlg == NULL) {
		last_error = TRAY_NOTIFYPROCERR;
		return;
	}
	// Instance handle valid?
	if (g_hinst == NULL) {
		last_error = TRAY_DLLNOTFOUND;
		return;
	}
	// Icon id valid?
	if (tray_icons[id_num].used == FALSE) {
		last_error = TRAY_WRONGICONID;
		return;
	}
	if (show) {
		if (tray_icons[id_num].visible == FALSE) {
			showIcon(id_num);
		}
	} else {
		// Hide icon (make invisible)
		if (tray_icons[id_num].visible == TRUE) {
			TrayMessage(my_hDlg, NIM_DELETE, id_num, NULL, NULL);
			tray_icons[id_num].visible = FALSE;
		}
	}
}

/*
 * Class:     jeans_trayicon_WindowsTrayIcon
 * Method:    testVisible
 * Signature: (I)I
 */
JNIEXPORT jint JNICALL Java_com_jeans_trayicon_WindowsTrayIcon_testVisible(JNIEnv *, jclass, jint id_num) {
	// Icon id valid?
	if (tray_icons[id_num].used == FALSE) {
		last_error = TRAY_WRONGICONID;
		return TRAY_WRONGICONID;
	}
	// Is the icon visible now?
	if (tray_icons[id_num].visible == TRUE) {
		return 1;
	} else {
		return 0;
	}
}

/*
 * Class:     jeans_trayicon_WindowsTrayIcon
 * Method:    clickEnable
 * Signature: (Ljeans/graph/trayicon/WindowsTrayIcon;IZ)V
 */
JNIEXPORT void JNICALL Java_com_jeans_trayicon_WindowsTrayIcon_clickEnable(JNIEnv *env, jclass, jobject ic_cls, jint id_num, jboolean enable) {
	// Icon id valid?
	if (tray_icons[id_num].used == FALSE) {
		last_error = TRAY_WRONGICONID;
		return;
	}
	if (enable == TRUE) {
		// Make icon clickenable by storing a global reference to it's class
		jobject globalWinTrayClass = env->NewGlobalRef(ic_cls);
		if (globalWinTrayClass != 0) {
			if (tray_icons[id_num].globalClass != 0)
				env->DeleteGlobalRef(tray_icons[id_num].globalClass);
			tray_icons[id_num].globalClass = globalWinTrayClass;
		}
	} else {
		// Remove the icon's global class reference
		if (tray_icons[id_num].globalClass != 0)
			env->DeleteGlobalRef(tray_icons[id_num].globalClass);
		tray_icons[id_num].globalClass = 0;
	}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲图片激情小说| 日韩成人免费电影| 亚洲狠狠爱一区二区三区| 男男gaygay亚洲| 91丨porny丨户外露出| 4438x成人网最大色成网站| 亚洲国产电影在线观看| 日韩黄色免费网站| 色欧美88888久久久久久影院| 欧美一二三四在线| 一区二区三区不卡在线观看| 大胆亚洲人体视频| 日韩欧美电影一二三| 亚洲一卡二卡三卡四卡五卡| 国产高清不卡一区二区| 日韩免费高清视频| 亚洲123区在线观看| 91在线观看成人| 久久久久久久久久久久久久久99 | 国产欧美一区二区精品性| 午夜欧美2019年伦理| 色综合久久久久综合体| 欧美国产欧美综合| 国产综合成人久久大片91| 欧美精品日韩一本| 亚洲电影视频在线| 色94色欧美sute亚洲线路一久| 国产日韩欧美综合在线| 国产福利一区二区三区视频| 精品免费国产二区三区 | 国产综合成人久久大片91| 91精品国产aⅴ一区二区| 亚洲综合区在线| 91精品91久久久中77777| 亚洲日本va午夜在线影院| a级精品国产片在线观看| 国产欧美精品一区| 成人毛片老司机大片| 中文字幕精品一区二区三区精品| 精品亚洲免费视频| 久久一日本道色综合| 国产一区二区精品久久| 久久免费看少妇高潮| 激情五月婷婷综合| 久久综合狠狠综合久久综合88 | 国产精品18久久久久久久久| www久久精品| 成人一级黄色片| 中文字幕亚洲区| 色猫猫国产区一区二在线视频| 一区二区三区四区中文字幕| 欧美亚洲动漫制服丝袜| 五月天激情综合网| 精品久久国产字幕高潮| 国产成人亚洲综合色影视| 国产精品视频麻豆| 日本道在线观看一区二区| 午夜激情综合网| 久久亚洲欧美国产精品乐播| 国产精品一二三四区| 国产精品的网站| 欧美日韩精品三区| 国产酒店精品激情| 亚洲丝袜制服诱惑| 欧美精三区欧美精三区| 精彩视频一区二区| 亚洲精品中文在线影院| 欧美电影影音先锋| 国产福利一区二区三区视频 | 国产精品私人自拍| 欧美图片一区二区三区| 久久99精品国产91久久来源| 中文字幕高清不卡| 7777女厕盗摄久久久| 成人黄色大片在线观看| 亚洲成人自拍一区| 国产欧美一区二区三区鸳鸯浴| 91成人免费在线| 国产精品亚洲а∨天堂免在线| 一区二区三区毛片| 久久久久久久久久看片| 欧美日韩情趣电影| 丁香婷婷综合激情五月色| 亚洲成人动漫一区| 国产女主播视频一区二区| 在线观看中文字幕不卡| 国产综合成人久久大片91| 一区二区三区美女| 国产精品免费av| 日韩一二三四区| 91精品国产乱码久久蜜臀| 不卡一区二区在线| 捆绑紧缚一区二区三区视频| 一区二区三区中文字幕精品精品| 精品久久五月天| 欧美少妇性性性| 国产91色综合久久免费分享| 免费看黄色91| 亚洲福中文字幕伊人影院| 国产精品全国免费观看高清 | 91网站视频在线观看| 国产主播一区二区三区| 天堂成人国产精品一区| 亚洲女人小视频在线观看| 久久久www免费人成精品| 欧美精三区欧美精三区| 在线免费观看成人短视频| 成人午夜av电影| 国产成人免费9x9x人网站视频| 日韩精品一级二级| 午夜精品aaa| 污片在线观看一区二区| 一区二区日韩av| 亚洲男人天堂av| 亚洲男人的天堂在线观看| 国产精品久久久久aaaa樱花| 中文字幕精品一区| 国产精品久久久久影视| 国产清纯美女被跳蛋高潮一区二区久久w| 日韩午夜在线观看视频| 69av一区二区三区| 91精品久久久久久久99蜜桃| 欧美日韩精品一区二区| 在线播放国产精品二区一二区四区| 91成人网在线| 欧美裸体bbwbbwbbw| 欧美另类高清zo欧美| 日韩一区二区影院| 精品国产百合女同互慰| 久久精品欧美一区二区三区不卡| 久久久久国产精品人| 国产精品久久久久久久久晋中 | 亚洲国产毛片aaaaa无费看| 亚洲夂夂婷婷色拍ww47| 亚洲一区免费观看| 日韩精品国产精品| 国产自产高清不卡| 成人激情午夜影院| 欧美在线观看你懂的| 日韩三级免费观看| 欧美videos大乳护士334| 国产视频一区不卡| 一区二区三区免费| 精品一区二区日韩| 不卡视频免费播放| 欧美日韩精品一区二区天天拍小说 | 在线观看91视频| 欧美一区二区黄色| 国产欧美综合在线| 亚洲一二三四在线观看| 另类的小说在线视频另类成人小视频在线| 精油按摩中文字幕久久| 成人美女视频在线观看18| 欧美色综合天天久久综合精品| 日韩欧美一区二区久久婷婷| 国产精品久线在线观看| 日韩精品一区第一页| 成人做爰69片免费看网站| 欧美日韩成人综合天天影院 | 亚洲日本一区二区三区| 青青青爽久久午夜综合久久午夜| 国内精品伊人久久久久av一坑| 99久免费精品视频在线观看| 制服视频三区第一页精品| 国产视频在线观看一区二区三区 | 裸体一区二区三区| 91美女在线看| 精品久久久三级丝袜| 亚洲国产成人porn| 成人午夜伦理影院| 精品欧美乱码久久久久久1区2区| 亚洲欧美日韩国产综合在线| 久久爱www久久做| 欧美性xxxxx极品少妇| 欧美激情在线一区二区三区| 日韩精品视频网站| 色呦呦一区二区三区| 久久亚洲一级片| 久久精品国产在热久久| 欧美中文字幕亚洲一区二区va在线 | 精品一区二区三区免费毛片爱 | 亚洲婷婷综合色高清在线| 精品一区二区三区的国产在线播放| 欧美中文字幕亚洲一区二区va在线| 日本一区免费视频| 看片网站欧美日韩| 欧美日韩美少妇| 亚洲综合色成人| 色菇凉天天综合网| 综合色中文字幕| 成人免费看视频| 国产色综合久久| 精品一区二区免费视频| 欧美mv和日韩mv国产网站| 婷婷开心久久网| 欧美高清精品3d| 日本伊人色综合网| 日韩欧美色综合网站| 久久成人麻豆午夜电影| 日韩欧美在线网站|