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

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

?? xkeymap.c

?? LInux 下的遠程桌面工具 Rdesktop
?? C
?? 第 1 頁 / 共 2 頁
字號:
				/* Ctrl-Alt-Enter: toggle full screen */				if (pressed)					xwin_toggle_fullscreen();				return True;			}			break;		case XK_Break:			/* Send Break sequence E0 46 E0 C6 */			if (pressed)			{				rdp_send_scancode(ev_time, RDP_KEYPRESS,						  (SCANCODE_EXTENDED | 0x46));				rdp_send_scancode(ev_time, RDP_KEYPRESS,						  (SCANCODE_EXTENDED | 0xc6));			}			/* No release sequence */			return True;			break;		case XK_Pause:			/* According to MS Keyboard Scan Code			   Specification, pressing Pause should result			   in E1 1D 45 E1 9D C5. I'm not exactly sure			   of how this is supposed to be sent via			   RDP. The code below seems to work, but with			   the side effect that Left Ctrl stays			   down. Therefore, we release it when Pause			   is released. */			if (pressed)			{				rdp_send_input(ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0xe1, 0);				rdp_send_input(ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0x1d, 0);				rdp_send_input(ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0x45, 0);				rdp_send_input(ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0xe1, 0);				rdp_send_input(ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0x9d, 0);				rdp_send_input(ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0xc5, 0);			}			else			{				/* Release Left Ctrl */				rdp_send_input(ev_time, RDP_INPUT_SCANCODE, RDP_KEYRELEASE,					       0x1d, 0);			}			return True;			break;		case XK_Meta_L:	/* Windows keys */		case XK_Super_L:		case XK_Hyper_L:			send_winkey(ev_time, pressed, True);			return True;			break;		case XK_Meta_R:		case XK_Super_R:		case XK_Hyper_R:			send_winkey(ev_time, pressed, False);			return True;			break;		case XK_space:			/* Prevent access to the Windows system menu in single app mode */			if (g_win_button_size			    && (get_key_state(state, XK_Alt_L) || get_key_state(state, XK_Alt_R)))				return True;			break;		case XK_Num_Lock:			/* Synchronize on key release */			if (g_numlock_sync && !pressed)				rdp_send_input(0, RDP_INPUT_SYNCHRONIZE, 0,					       ui_get_numlock_state(read_keyboard_state()), 0);			/* Inhibit */			return True;			break;		case XK_Overlay1_Enable:			/* Toggle SeamlessRDP */			if (pressed)				ui_seamless_toggle();			break;	}	return False;}key_translationxkeymap_translate_key(uint32 keysym, unsigned int keycode, unsigned int state){	key_translation tr = { 0, 0, 0, 0 };	key_translation *ptr;	ptr = keymap[keysym & KEYMAP_MASK];	if (ptr)	{		tr = *ptr;		if (tr.seq_keysym == 0)	/* Normal scancode translation */		{			if (MASK_HAS_BITS(tr.modifiers, MapInhibitMask))			{				DEBUG_KBD(("Inhibiting key\n"));				tr.scancode = 0;				return tr;			}			if (MASK_HAS_BITS(tr.modifiers, MapLocalStateMask))			{				/* The modifiers to send for this key should be obtained				   from the local state. Currently, only shift is implemented. */				if (MASK_HAS_BITS(state, ShiftMask))				{					tr.modifiers = MapLeftShiftMask;				}			}			/* Windows interprets CapsLock+Ctrl+key			   differently from Shift+Ctrl+key. Since we			   are simulating CapsLock with Shifts, things			   like Ctrl+f with CapsLock on breaks. To			   solve this, we are releasing Shift if Ctrl			   is on, but only if Shift isn't physically pressed. */			if (MASK_HAS_BITS(tr.modifiers, MapShiftMask)			    && MASK_HAS_BITS(remote_modifier_state, MapCtrlMask)			    && !MASK_HAS_BITS(state, ShiftMask))			{				DEBUG_KBD(("Non-physical Shift + Ctrl pressed, releasing Shift\n"));				MASK_REMOVE_BITS(tr.modifiers, MapShiftMask);			}			DEBUG_KBD(("Found scancode translation, scancode=0x%x, modifiers=0x%x\n",				   tr.scancode, tr.modifiers));		}	}	else	{		if (keymap_loaded)			warning("No translation for (keysym 0x%lx, %s)\n", keysym,				get_ksname(keysym));		/* not in keymap, try to interpret the raw scancode */		if (((int) keycode >= min_keycode) && (keycode <= 0x60))		{			tr.scancode = keycode - min_keycode;			/* The modifiers to send for this key should be			   obtained from the local state. Currently, only			   shift is implemented. */			if (MASK_HAS_BITS(state, ShiftMask))			{				tr.modifiers = MapLeftShiftMask;			}			DEBUG_KBD(("Sending guessed scancode 0x%x\n", tr.scancode));		}		else		{			DEBUG_KBD(("No good guess for keycode 0x%x found\n", keycode));		}	}	return tr;}static RD_BOOLis_modifier(uint8 scancode){	switch (scancode)	{		case SCANCODE_CHAR_LSHIFT:		case SCANCODE_CHAR_RSHIFT:		case SCANCODE_CHAR_LCTRL:		case SCANCODE_CHAR_RCTRL:		case SCANCODE_CHAR_LALT:		case SCANCODE_CHAR_RALT:		case SCANCODE_CHAR_LWIN:		case SCANCODE_CHAR_RWIN:		case SCANCODE_CHAR_NUMLOCK:			return True;		default:			break;	}	return False;}voidxkeymap_send_keys(uint32 keysym, unsigned int keycode, unsigned int state, uint32 ev_time,		  RD_BOOL pressed, uint8 nesting){	key_translation tr, *ptr;	tr = xkeymap_translate_key(keysym, keycode, state);	if (tr.seq_keysym == 0)	{		/* Scancode translation */		if (tr.scancode == 0)			return;		save_remote_modifiers(tr.scancode);		ensure_remote_modifiers(ev_time, tr);		rdp_send_scancode(ev_time, pressed ? RDP_KEYPRESS : RDP_KEYRELEASE, tr.scancode);		restore_remote_modifiers(ev_time, tr.scancode);		return;	}	/* Sequence, only on key down */	if (pressed)	{		ptr = &tr;		do		{			DEBUG_KBD(("Handling sequence element, keysym=0x%x\n",				   (unsigned int) ptr->seq_keysym));			if (nesting++ > 32)			{				error("Sequence nesting too deep\n");				return;			}			xkeymap_send_keys(ptr->seq_keysym, keycode, state, ev_time, True, nesting);			xkeymap_send_keys(ptr->seq_keysym, keycode, state, ev_time, False, nesting);			ptr = ptr->next;		}		while (ptr);	}}uint16xkeymap_translate_button(unsigned int button){	switch (button)	{		case Button1:	/* left */			return MOUSE_FLAG_BUTTON1;		case Button2:	/* middle */			return MOUSE_FLAG_BUTTON3;		case Button3:	/* right */			return MOUSE_FLAG_BUTTON2;		case Button4:	/* wheel up */			return MOUSE_FLAG_BUTTON4;		case Button5:	/* wheel down */			return MOUSE_FLAG_BUTTON5;	}	return 0;}char *get_ksname(uint32 keysym){	char *ksname = NULL;	if (keysym == NoSymbol)		ksname = "NoSymbol";	else if (!(ksname = XKeysymToString(keysym)))		ksname = "(no name)";	return ksname;}voidsave_remote_modifiers(uint8 scancode){	if (is_modifier(scancode))		return;	saved_remote_modifier_state = remote_modifier_state;}voidrestore_remote_modifiers(uint32 ev_time, uint8 scancode){	key_translation dummy;	if (is_modifier(scancode))		return;	dummy.scancode = 0;	dummy.modifiers = saved_remote_modifier_state;	ensure_remote_modifiers(ev_time, dummy);}voidensure_remote_modifiers(uint32 ev_time, key_translation tr){	/* If this key is a modifier, do nothing */	if (is_modifier(tr.scancode))		return;	if (!g_numlock_sync)	{		/* NumLock */		if (MASK_HAS_BITS(tr.modifiers, MapNumLockMask)		    != MASK_HAS_BITS(remote_modifier_state, MapNumLockMask))		{			/* The remote modifier state is not correct */			uint16 new_remote_state;			if (MASK_HAS_BITS(tr.modifiers, MapNumLockMask))			{				DEBUG_KBD(("Remote NumLock state is incorrect, activating NumLock.\n"));				new_remote_state = KBD_FLAG_NUMLOCK;				remote_modifier_state = MapNumLockMask;			}			else			{				DEBUG_KBD(("Remote NumLock state is incorrect, deactivating NumLock.\n"));				new_remote_state = 0;				remote_modifier_state = 0;			}			rdp_send_input(0, RDP_INPUT_SYNCHRONIZE, 0, new_remote_state, 0);		}	}	/* Shift. Left shift and right shift are treated as equal; either is fine. */	if (MASK_HAS_BITS(tr.modifiers, MapShiftMask)	    != MASK_HAS_BITS(remote_modifier_state, MapShiftMask))	{		/* The remote modifier state is not correct */		if (MASK_HAS_BITS(tr.modifiers, MapLeftShiftMask))		{			/* Needs left shift. Send down. */			rdp_send_scancode(ev_time, RDP_KEYPRESS, SCANCODE_CHAR_LSHIFT);		}		else if (MASK_HAS_BITS(tr.modifiers, MapRightShiftMask))		{			/* Needs right shift. Send down. */			rdp_send_scancode(ev_time, RDP_KEYPRESS, SCANCODE_CHAR_RSHIFT);		}		else		{			/* Should not use this modifier. Send up for shift currently pressed. */			if (MASK_HAS_BITS(remote_modifier_state, MapLeftShiftMask))				/* Left shift is down */				rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_LSHIFT);			else				/* Right shift is down */				rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_RSHIFT);		}	}	/* AltGr */	if (MASK_HAS_BITS(tr.modifiers, MapAltGrMask)	    != MASK_HAS_BITS(remote_modifier_state, MapAltGrMask))	{		/* The remote modifier state is not correct */		if (MASK_HAS_BITS(tr.modifiers, MapAltGrMask))		{			/* Needs this modifier. Send down. */			rdp_send_scancode(ev_time, RDP_KEYPRESS, SCANCODE_CHAR_RALT);		}		else		{			/* Should not use this modifier. Send up. */			rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_RALT);		}	}}unsigned intread_keyboard_state(){#ifdef RDP2VNC	return 0;#else	unsigned int state;	Window wdummy;	int dummy;	XQueryPointer(g_display, g_wnd, &wdummy, &wdummy, &dummy, &dummy, &dummy, &dummy, &state);	return state;#endif}uint16ui_get_numlock_state(unsigned int state){	uint16 numlock_state = 0;	if (get_key_state(state, XK_Num_Lock))		numlock_state = KBD_FLAG_NUMLOCK;	return numlock_state;}voidreset_modifier_keys(){	unsigned int state = read_keyboard_state();	/* reset keys */	uint32 ev_time;	ev_time = time(NULL);	if (MASK_HAS_BITS(remote_modifier_state, MapLeftShiftMask)	    && !get_key_state(state, XK_Shift_L))		rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_LSHIFT);	if (MASK_HAS_BITS(remote_modifier_state, MapRightShiftMask)	    && !get_key_state(state, XK_Shift_R))		rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_RSHIFT);	if (MASK_HAS_BITS(remote_modifier_state, MapLeftCtrlMask)	    && !get_key_state(state, XK_Control_L))		rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_LCTRL);	if (MASK_HAS_BITS(remote_modifier_state, MapRightCtrlMask)	    && !get_key_state(state, XK_Control_R))		rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_RCTRL);	if (MASK_HAS_BITS(remote_modifier_state, MapLeftAltMask) && !get_key_state(state, XK_Alt_L))		rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_LALT);	if (MASK_HAS_BITS(remote_modifier_state, MapRightAltMask) &&	    !get_key_state(state, XK_Alt_R) && !get_key_state(state, XK_Mode_switch)	    && !get_key_state(state, XK_ISO_Level3_Shift))		rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_RALT);	reset_winkey(ev_time);	if (g_numlock_sync)		rdp_send_input(ev_time, RDP_INPUT_SYNCHRONIZE, 0, ui_get_numlock_state(state), 0);}static voidupdate_modifier_state(uint8 scancode, RD_BOOL pressed){#ifdef WITH_DEBUG_KBD	uint16 old_modifier_state;	old_modifier_state = remote_modifier_state;#endif	switch (scancode)	{		case SCANCODE_CHAR_LSHIFT:			MASK_CHANGE_BIT(remote_modifier_state, MapLeftShiftMask, pressed);			break;		case SCANCODE_CHAR_RSHIFT:			MASK_CHANGE_BIT(remote_modifier_state, MapRightShiftMask, pressed);			break;		case SCANCODE_CHAR_LCTRL:			MASK_CHANGE_BIT(remote_modifier_state, MapLeftCtrlMask, pressed);			break;		case SCANCODE_CHAR_RCTRL:			MASK_CHANGE_BIT(remote_modifier_state, MapRightCtrlMask, pressed);			break;		case SCANCODE_CHAR_LALT:			MASK_CHANGE_BIT(remote_modifier_state, MapLeftAltMask, pressed);			break;		case SCANCODE_CHAR_RALT:			MASK_CHANGE_BIT(remote_modifier_state, MapRightAltMask, pressed);			break;		case SCANCODE_CHAR_LWIN:			MASK_CHANGE_BIT(remote_modifier_state, MapLeftWinMask, pressed);			break;		case SCANCODE_CHAR_RWIN:			MASK_CHANGE_BIT(remote_modifier_state, MapRightWinMask, pressed);			break;		case SCANCODE_CHAR_NUMLOCK:			/* KeyReleases for NumLocks are sent immediately. Toggle the			   modifier state only on Keypress */			if (pressed && !g_numlock_sync)			{				RD_BOOL newNumLockState;				newNumLockState =					(MASK_HAS_BITS					 (remote_modifier_state, MapNumLockMask) == False);				MASK_CHANGE_BIT(remote_modifier_state,						MapNumLockMask, newNumLockState);			}	}#ifdef WITH_DEBUG_KBD	if (old_modifier_state != remote_modifier_state)	{		DEBUG_KBD(("Before updating modifier_state:0x%x, pressed=0x%x\n",			   old_modifier_state, pressed));		DEBUG_KBD(("After updating modifier_state:0x%x\n", remote_modifier_state));	}#endif}/* Send keyboard input */voidrdp_send_scancode(uint32 time, uint16 flags, uint8 scancode){	update_modifier_state(scancode, !(flags & RDP_KEYRELEASE));	if (scancode & SCANCODE_EXTENDED)	{		DEBUG_KBD(("Sending extended scancode=0x%x, flags=0x%x\n",			   scancode & ~SCANCODE_EXTENDED, flags));		rdp_send_input(time, RDP_INPUT_SCANCODE, flags | KBD_FLAG_EXT,			       scancode & ~SCANCODE_EXTENDED, 0);	}	else	{		DEBUG_KBD(("Sending scancode=0x%x, flags=0x%x\n", scancode, flags));		rdp_send_input(time, RDP_INPUT_SCANCODE, flags, scancode, 0);	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品乱码人人做人人爱| 久久成人免费网| 蜜桃视频一区二区三区| 成人激情动漫在线观看| 91精品国产黑色紧身裤美女| 亚洲免费观看在线观看| 激情综合色丁香一区二区| 在线看国产一区二区| 国产亚洲欧美激情| 美女被吸乳得到大胸91| 欧美性感一区二区三区| 国产日韩视频一区二区三区| 免费观看91视频大全| 欧美日韩国产中文| 国产精品超碰97尤物18| 国产成人福利片| 久久免费看少妇高潮| 久久国产精品区| 日韩一卡二卡三卡| 琪琪久久久久日韩精品| 欧美伊人久久大香线蕉综合69 | 狠狠色丁香婷婷综合久久片| 欧美性大战久久久久久久蜜臀 | 99国产精品久久久久久久久久久| 精品国产一区二区三区久久久蜜月| 亚洲成人免费视| 在线精品视频一区二区| 成人免费一区二区三区视频| 波多野结衣在线aⅴ中文字幕不卡| 26uuu久久综合| 精品伊人久久久久7777人| 这里只有精品免费| 日韩中文字幕区一区有砖一区 | 日本不卡一二三| 色狠狠av一区二区三区| 一区二区三区在线不卡| 在线一区二区三区四区五区| 亚洲另类色综合网站| 色婷婷久久99综合精品jk白丝| 亚洲人成7777| 欧美综合天天夜夜久久| 亚洲高清不卡在线观看| 91精品在线观看入口| 美女视频免费一区| 久久九九影视网| av动漫一区二区| 亚洲韩国一区二区三区| 欧美一级在线视频| 国产精品一区二区三区乱码| 亚洲国产精品激情在线观看| 成a人片亚洲日本久久| 一区二区三区在线免费视频 | 奇米一区二区三区av| 欧美一区二区三区视频在线| 国产精品亚洲综合一区在线观看| 国产精品丝袜在线| 欧美专区在线观看一区| 日韩激情在线观看| 国产亚洲欧美一区在线观看| 一本大道综合伊人精品热热| 日韩激情一二三区| 国产精品天干天干在线综合| 欧美色窝79yyyycom| 久久成人免费网| 中文字幕综合网| 日韩一区二区电影| 97超碰欧美中文字幕| 日韩成人一级大片| 国产精品国产三级国产普通话99 | 欧美日韩免费观看一区二区三区 | 亚洲一级在线观看| 精品欧美一区二区在线观看| 成人av在线资源网| 五月婷婷欧美视频| 一区在线观看视频| 精品国产成人系列| 欧美日韩欧美一区二区| 成人妖精视频yjsp地址| 美女被吸乳得到大胸91| 亚洲精品美腿丝袜| 久久久不卡网国产精品二区| 欧美性受xxxx| 成人av网站大全| 奇米影视一区二区三区| 亚洲色图制服诱惑| 久久伊人蜜桃av一区二区| 欧洲中文字幕精品| 成人一区在线观看| 美女视频黄 久久| 亚洲午夜电影在线| 最好看的中文字幕久久| 久久精品一区二区| 精品国精品自拍自在线| 欧美另类变人与禽xxxxx| eeuss影院一区二区三区| 久久er精品视频| 日韩av电影一区| 亚洲国产综合在线| 亚洲精品伦理在线| 国产精品网站导航| 欧美国产日韩亚洲一区| 久久久久久久久久久久久夜| 日韩欧美国产精品| 在线综合亚洲欧美在线视频| 精品视频全国免费看| 色婷婷av一区| 91福利资源站| 色婷婷亚洲综合| 91社区在线播放| 91丝袜高跟美女视频| 99久久精品情趣| 成人av网址在线| 国产精品一区二区三区四区| 国产精品一区二区无线| 国产在线看一区| 国产一区二区按摩在线观看| 国内外成人在线| 国产成人在线视频免费播放| 国产在线观看免费一区| 国产美女在线观看一区| 国产成人精品免费视频网站| 大尺度一区二区| 色综合色综合色综合| 欧美午夜精品一区二区三区| 欧美色手机在线观看| 欧美撒尿777hd撒尿| 欧美日本在线看| 在线电影院国产精品| 日韩午夜在线观看视频| 久久蜜桃av一区精品变态类天堂 | 成人黄色大片在线观看| 成a人片国产精品| 欧美午夜不卡视频| 日韩欧美的一区二区| 国产亚洲欧美在线| 亚洲免费电影在线| 日韩成人一级片| 国产一区 二区| 91免费视频网| 7777精品伊人久久久大香线蕉超级流畅 | 91精品久久久久久久91蜜桃| 日韩欧美一区二区视频| 国产人伦精品一区二区| 亚洲综合在线五月| 久久精品国产99久久6| 成人av电影在线网| 欧美日韩一区二区三区免费看| 日韩一区二区三区四区| 欧美激情一区三区| 天天色图综合网| 高潮精品一区videoshd| 在线观看亚洲精品| 精品毛片乱码1区2区3区| 国产精品久久福利| 日本视频中文字幕一区二区三区| 国产不卡视频在线播放| 欧美三级三级三级| 中文字幕免费不卡在线| 奇米一区二区三区| 91在线精品秘密一区二区| 91.com视频| 亚洲品质自拍视频网站| 国内精品久久久久影院色| 欧美影院一区二区三区| 国产精品私人影院| 九色porny丨国产精品| 欧洲中文字幕精品| 国产精品久久毛片a| 国产一区二区在线免费观看| 欧美午夜片在线看| 亚洲婷婷综合久久一本伊一区| 激情五月激情综合网| 欧美精品亚洲一区二区在线播放| 欧美国产精品v| 久久66热偷产精品| 欧美狂野另类xxxxoooo| 亚洲日本在线a| 国产电影一区在线| 日韩欧美久久久| 亚洲va欧美va天堂v国产综合| 成人性生交大片免费看中文 | 欧美一区二区在线观看| 亚洲欧美一区二区三区极速播放 | 国内精品免费在线观看| 欧美一区二区三区在线观看| 亚洲黄色录像片| 成人高清视频免费观看| 久久九九99视频| 国产一区不卡视频| 精品日本一线二线三线不卡| 亚洲成人激情综合网| 日本高清不卡视频| 亚洲精品视频在线| 99国产欧美另类久久久精品| 国产欧美日韩视频一区二区| 狠狠狠色丁香婷婷综合激情| 精品国产欧美一区二区| 裸体健美xxxx欧美裸体表演| 日韩无一区二区| 美国欧美日韩国产在线播放|