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

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

?? activex.cpp

?? ReactOS是一些高手根據Windows XP的內核編寫出的類XP。內核實現機理和API函數調用幾乎相同。甚至可以兼容XP的程序。喜歡研究系統內核的人可以看一看。
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
					text = &(text[i]);
					i = 0;
					break;

				default:
					Display_DoGlyph(font, flags, mixmode, x, y, bgcolour, fgcolour, text, i);
					i++;
					break;
			}
		}
	}

	void Display_SaveDesktop(uint32 offset, int x, int y, int cx, int cy)
	{
		GdiFlush();

		uint8 * data =
			(uint8 *)m_displayBufferRaw +
			x * m_displayBufferByteDepth +
			(m_displayBufferHeight - y - cy) * m_displayBufferStride;

		cache_put_desktop
		(
			/*This*/NULL,
			offset * m_displayBufferByteDepth,
			cx,
			cy,
			m_displayBufferStride,
			m_displayBufferByteDepth,
			data
		);
	}

	void Display_RestoreDesktop(uint32 offset, int x, int y, int cx, int cy)
	{
		int fromstride = cx * m_displayBufferByteDepth;

		const uint8 * src = cache_get_desktop(/*This*/NULL, offset, cx, cy, m_displayBufferByteDepth);
		
		uint8 * dst =
			(uint8 *)m_displayBufferRaw +
			x * m_displayBufferByteDepth +
			(m_displayBufferHeight - y - cy) * m_displayBufferStride;

		GdiFlush();

		for(int i = 0; i < cy; ++ i)
		{
			memcpy(dst, src, fromstride);
			src += fromstride;
			dst += m_displayBufferStride;
		}

		Display_RepaintArea(x, y, cx, cy);
	}


	void Display_BeginUpdate()
	{
		EnterCriticalSection(&m_displayBufferMutex);
		m_displayBufferSave = SaveDC(m_displayBuffer);
	}

	void Display_EndUpdate()
	{
		RestoreDC(m_displayBuffer, m_displayBufferSave);
		LeaveCriticalSection(&m_displayBufferMutex);
	}

	/*
		This is the input window. It receives the keyboard and mouse input from
		the user, and it's the only window that can receive the keyboard focus.
		It completely fills its parent, the console window, and it runs in its
		own thread for performance reasons and because of technical reasons
		involving keyboard hooks in full-screen mode
	*/
	HWND m_inputWindow;
	HCURSOR m_inputCursor;

	LRESULT InputWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
	{
		switch(uMsg)
		{
		case WM_DESTROY:
			PostQuitMessage(0);
			return 0;

			/* Keyboard stuff */
			// TODO: we need a good way to post output cross-thread
		case WM_SYSKEYDOWN:
		case WM_KEYDOWN:		
			//rdp_send_input(This, GetMessageTime(), RDP_INPUT_SCANCODE, RDP_KEYPRESS | (lparam & 0x1000000 ? KBD_FLAG_EXT : 0), LOBYTE(HIWORD(lparam)), 0);
			break;

		case WM_SYSKEYUP:
		case WM_KEYUP:
			//rdp_send_input(This, GetMessageTime(), RDP_INPUT_SCANCODE, RDP_KEYRELEASE | (lparam & 0x1000000 ? KBD_FLAG_EXT : 0), LOBYTE(HIWORD(lparam)), 0);
			break;

			/* Mouse stuff */
			// Cursor shape
		case WM_SETCURSOR:
			if(LOWORD(lParam) == HTCLIENT)
			{
				SetCursor(m_inputCursor);
				return TRUE;
			}

			break;

			// Movement
		case WM_MOUSEMOVE:
			//rdp_send_input(This, GetMessageTime(), RDP_INPUT_MOUSE, MOUSE_FLAG_MOVE, LOWORD(lparam), HIWORD(lparam));
			break;

			// Buttons
			// TODO: X buttons
		case WM_LBUTTONDOWN:
			//rdp_send_input(This, GetMessageTime(), RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON1 | MOUSE_FLAG_DOWN, LOWORD(lparam), HIWORD(lparam));
			break;

		case WM_RBUTTONDOWN:
			//rdp_send_input(This, GetMessageTime(), RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON2 | MOUSE_FLAG_DOWN, LOWORD(lparam), HIWORD(lparam));
			break;

		case WM_MBUTTONDOWN:
			//rdp_send_input(This, GetMessageTime(), RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON3 | MOUSE_FLAG_DOWN, LOWORD(lparam), HIWORD(lparam));
			break;

		case WM_LBUTTONUP:
			//rdp_send_input(This, GetMessageTime(), RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON1, LOWORD(lparam), HIWORD(lparam));
			break;

		case WM_RBUTTONUP:
			//rdp_send_input(This, GetMessageTime(), RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON2, LOWORD(lparam), HIWORD(lparam));
			break;

		case WM_MBUTTONUP:
			//rdp_send_input(This, GetMessageTime(), RDP_INPUT_MOUSE, MOUSE_FLAG_BUTTON3, LOWORD(lparam), HIWORD(lparam));
			break;

			// Wheel
		case WM_MOUSEWHEEL:
			//mstsc_mousewheel(This, (SHORT)HIWORD(wparam), lparam);
			break;
		}

		return DefWindowProc(m_inputWindow, uMsg, wParam, lParam);
	}

public:
};

#pragma warning(push)
#pragma warning(disable: 4584)

/* The ActiveX control */
class RdpClient SEALED_:
	/* COM basics */
	public IUnknown,
	public IDispatch,

	/* ActiveX stuff */
	public IConnectionPointContainer,
	public IDataObject,
	public IObjectSafety,
	public IOleControl,
	public IOleInPlaceActiveObject,
	public IOleInPlaceObject,
	public IOleObject,
	public IOleWindow,
	public IPersist,
	public IPersistPropertyBag,
	public IPersistStorage,
	public IPersistStreamInit,
	public IProvideClassInfo,
	public IProvideClassInfo2,
	public IQuickActivate,
	public IViewObject,
	public IViewObject2,

	// NOTE: the original has a vestigial, non-functional implementation of this, which we omit
	// ISpecifyPropertyPages

	// Hidden interfaces, not available through QueryInterface
	public IConnectionPoint,

	/* RDP client interface */
	public MSTSCLib::IMsRdpClient4,
	public MSTSCLib::IMsRdpClientNonScriptable2

	// NOTE: implemented by inner classes due to requiring distinct IDispatch implementations
	// IMsRdpClientAdvancedSettings4
	// IMsRdpClientSecuredSettings
{
private:
	/* An endless amount of COM glue */
	// Reference counting
	LONG m_refCount;

#ifdef _DEBUG
	DWORD m_apartmentThreadId;

	bool InsideApartment() const
	{
		return GetCurrentThreadId() == m_apartmentThreadId;
	}
#endif

	// Aggregation support
	IUnknown * m_punkOuter;

	class RdpClientInner: public IUnknown
	{
	private:
		RdpClient * Outer()
		{
			return InnerToOuter(this);
		}

	public:
		virtual STDMETHODIMP IUnknown::QueryInterface(REFIID riid, void ** ppvObject)
		{
			return Outer()->queryInterface(riid, ppvObject);
		}

		virtual STDMETHODIMP_(ULONG) IUnknown::AddRef()
		{
			return Outer()->addRef();
		}

		virtual STDMETHODIMP_(ULONG) IUnknown::Release()
		{
			return Outer()->release();
		}

	}
	m_inner;

	// Persistence support
	CLSID m_classId;

	// Late binding support
	unsigned m_typeLibIndex;
	ITypeLib * m_typeLib;
	ITypeInfo * m_dispTypeInfo;

	// Event sinks
	size_t m_EventSinksCount;

	union
	{
		MSTSCLib::IMsTscAxEvents * m_EventSinksStatic[1];
		MSTSCLib::IMsTscAxEvents ** m_EventSinks;
	};

	// OLE control glue
	HWND m_controlWindow;
	IOleClientSite * m_clientSite;
	IOleInPlaceSite * m_inPlaceSite;
	IOleAdviseHolder * m_adviseHolder;
	LONG m_freezeEvents;
	bool m_uiActive;

	// UrlMon security
	DWORD m_SafetyOptions;

	bool IsSafeForScripting() const
	{
		return m_SafetyOptions & INTERFACESAFE_FOR_UNTRUSTED_CALLER;
	}

	/* Glue to interface to rdesktop-core */
	RdpClientUI * m_clientUI;
	RDPCLIENT m_protocolState;
	HANDLE m_protocolThread;
	HANDLE m_protocolThreadWaitingReconnection;
	bool m_reconnectAborted;
	bool m_actuallyConnected;
	bool m_loggedIn;

	/* Properties */
	// Storage fields
	// NOTE: keep sorted by alignment (pointers and handles, integers, enumerations, booleans)
	BSTR m_Domain;
	BSTR m_UserName;
	BSTR m_DisconnectedText;
	BSTR m_ConnectingText;
	BSTR m_FullScreenTitle;
	BSTR m_StartProgram;
	BSTR m_WorkDir;
	BSTR m_ConnectedStatusText;
	BSTR m_ClearTextPassword; // FIXME! dangerous, shouldn't store in cleartext!
	BSTR m_RdpdrLocalPrintingDocName;
	BSTR m_RdpdrClipCleanTempDirString;
	BSTR m_RdpdrClipPasteInfoString;
	BSTR m_KeyboardLayoutString;
	LPSTR m_Server;
	LPSTR m_LoadBalanceInfo;
	// TODO: plugin DLLs
	HWND m_UIParentWindowHandle;
	long m_DesktopWidth;
	long m_DesktopHeight;
	long m_StartConnected;
	long m_ColorDepth;
	long m_KeyboardHookMode;
	long m_AudioRedirectionMode;
	long m_TransportType;
	long m_SasSequence;
	long m_RDPPort;
	long m_HotKeyFullScreen;
	long m_HotKeyAltEsc;
	long m_HotKeyAltShiftTab;
	long m_HotKeyAltSpace;
	long m_HotKeyAltTab;
	long m_HotKeyCtrlAltDel;
	long m_HotKeyCtrlEsc;
	long m_orderDrawThresold;
	long m_BitmapCacheSize;
	long m_BitmapVirtualCacheSize;
	long m_NumBitmapCaches;
	long m_brushSupportLevel;
	long m_minInputSendInterval;
	long m_InputEventsAtOnce;
	long m_maxEventCount;
	long m_keepAliveInternal;
	long m_shutdownTimeout;
	long m_overallConnectionTimeout;
	long m_singleConnectionTimeout;
	long m_MinutesToIdleTimeout;
	long m_BitmapVirtualCache16BppSize;
	long m_BitmapVirtualCache24BppSize;
	long m_PerformanceFlags;
	long m_MaxReconnectAttempts;
	unsigned int m_AuthenticationLevel;

	MSTSCLib::ExtendedDisconnectReasonCode m_ExtendedDisconnectReason;

	bool m_Connected;
	bool m_Compress;
	bool m_BitmapPersistence;
	bool m_allowBackgroundInput;
	bool m_ContainerHandledFullScreen;
	bool m_DisableRdpdr;
	bool m_SecuredSettingsEnabled;
	bool m_FullScreen;
	bool m_AcceleratorPassthrough;
	bool m_ShadowBitmap;
	bool m_EncryptionEnabled;
	bool m_DedicatedTerminal;
	bool m_DisableCtrlAltDel;
	bool m_EnableWindowsKey;
	bool m_DoubleClickDetect;
	bool m_MaximizeShell;
	bool m_ScaleBitmapCachesByBpp;
	bool m_CachePersistenceActive;
	bool m_ConnectToServerConsole;
	bool m_SmartSizing; // FIXME: this can be set while the control is connected
	bool m_DisplayConnectionBar;
	bool m_PinConnectionBar;
	bool m_GrabFocusOnConnect;
	bool m_RedirectDrives;
	bool m_RedirectPrinters;
	bool m_RedirectPorts;
	bool m_RedirectSmartCards;
	bool m_NotifyTSPublicKey;
	bool m_CanAutoReconnect;
	bool m_EnableAutoReconnect;
	bool m_ConnectionBarShowMinimizeButton;
	bool m_ConnectionBarShowRestoreButton;

	// Generic getters/setters
	HRESULT GetProperty(BSTR& prop, BSTR * retVal) const
	{
		assert(InsideApartment());

		if(retVal == NULL)
			return E_POINTER;

		*retVal = SysAllocStringLen(prop, SysStringLen(prop));

		if(*retVal == NULL)
			return E_OUTOFMEMORY;

		return S_OK;
	}

	HRESULT GetProperty(LPSTR& prop, BSTR * retVal) const
	{
		assert(InsideApartment());

		if(retVal == NULL)
			return E_POINTER;

		*retVal = LpszToBstr(prop);

		if(*retVal == NULL)
			return E_OUTOFMEMORY;

		return S_OK;
	}

	HRESULT SetProperty(BSTR& prop, BSTR newValue)
	{
		assert(InsideApartment());

		if(m_Connected)
			return E_FAIL;

		SysFreeString(prop);

		UINT len = SysStringLen(newValue);

		if(len)
		{
			// no embedded NULs, please
			if(len != lstrlenW(newValue))
				return E_INVALIDARG;

			prop = SysAllocStringLen(newValue, len);

			if(prop == NULL)
				return E_OUTOFMEMORY;
		}
		else
			prop = NULL;

		return S_OK;
	}

	HRESULT ReplaceProperty(BSTR& prop, BSTR newValue)
	{
		assert(InsideApartment());
		assert((prop == NULL && newValue == NULL) || prop != newValue);

		SysFreeString(prop);
		prop = newValue;
		return S_OK;
	}

	HRESULT SetProperty(LPSTR& prop, BSTR newValue)
	{
		assert(InsideApartment());

		if(m_Connected)
			return E_FAIL;

		delete[] prop;

		if(SysStringLen(newValue))
		{
			prop = BstrToLpsz(newValue);

			if(prop == NULL)
				return E_OUTOFMEMORY;
		}
		else
			prop = NULL;

		return S_OK;
	}

	HRESULT ReplaceProperty(LPSTR& prop, LPSTR newValue)
	{
		assert(InsideApartment());
		assert((prop == NULL && newValue == NULL) || prop != newValue);

		if(prop)
			delete[] prop;

		prop = newValue;
		return S_OK;
	}

	template<class Type> HRESULT SetProperty(bool& prop, const Type& newValue)
	{
		assert(InsideApartment());

		if(m_Connected)
			return E_FAIL;

		prop = !!newValue;
		return S_OK;
	}

	template<class Type> HRESULT SetProperty(Type& prop, const Type& newValue)
	{
		assert(InsideApartment());

		if(m_Connected)
			return E_FAIL;

		prop = newValue;
		return S_OK;
	}

	template<class Type> HRESULT GetProperty(const bool& prop, Type * retVal) const
	{
		assert(InsideApartment());

		if(retVal == NULL)
			return E_POINTER;

		*retVal = prop ? VARIANT_TRUE : VARIANT_FALSE;
		return S_OK;
	}

	template<class Type> HRESULT GetProperty(const Type& prop, Type * retVal) const
	{
		assert(InsideApartment());

		if(retVal == NULL)
			return E_POINTER;

		*retVal = prop;
		return S_OK;
	}

	/* Events */
	MSTSCLib::IMsTscAxEvents ** GetSinks() const
	{
		if(m_EventSinksCount > 1)
			return m_EventSinks;
		else
			return const_cast<MSTSCLib::IMsTscAxEvents **>(m_EventSinksStatic);
	}

	// Event freezing
	void UnfreezeEvents()
	{
		// Just in case
	}

	// Generic event riser & helpers
	void InvokeSinks(DISPID eventId, VARIANTARG rgvarg[], unsigned int cArgs, VARIANTARG * retval)
	{
		assert(InsideApartment());

		DISPPARAMS params;

		params.rgvarg = rgvarg;
		params.rgdispidNamedArgs = NULL;
		params.cArgs = cArgs;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产色一区| 国产盗摄一区二区| 97se亚洲国产综合自在线不卡| 日本一不卡视频| 成人欧美一区二区三区白人| 精品国产欧美一区二区| 日韩一区国产二区欧美三区| 99久久免费精品| 国产一级精品在线| 日韩国产一二三区| 久久综合综合久久综合| 日本一不卡视频| 丝袜美腿亚洲综合| 精品一区二区免费视频| www.性欧美| 日本精品一区二区三区高清| 国产精品原创巨作av| 成人性视频网站| 裸体一区二区三区| 狠狠网亚洲精品| 男人操女人的视频在线观看欧美 | 免费观看在线色综合| 男人的天堂久久精品| 国模一区二区三区白浆| 国产传媒日韩欧美成人| 91小宝寻花一区二区三区| 欧美日韩在线三区| 久久青草国产手机看片福利盒子| 久久久久国产免费免费| 亚洲国产欧美一区二区三区丁香婷| 免费在线看一区| 大美女一区二区三区| 欧美日韩一卡二卡| 一区二区免费在线播放| 国产伦精一区二区三区| 欧美日韩高清一区二区三区| 亚洲欧美日韩中文字幕一区二区三区 | 亚洲图片你懂的| 91久久奴性调教| 亚洲精品videosex极品| 一本大道久久a久久综合| 一区二区三区蜜桃| 欧美日韩一区国产| 日本亚洲一区二区| www激情久久| av在线不卡网| 亚洲国产成人精品视频| 欧美成人一区二区三区在线观看| 九色|91porny| 国产精品视频你懂的| 91久久精品网| 18成人在线观看| 欧美天堂亚洲电影院在线播放| 日韩国产精品91| 亚洲欧美日韩国产成人精品影院 | 亚洲午夜在线观看视频在线| 7777精品伊人久久久大香线蕉完整版 | 不卡在线视频中文字幕| 一区二区三区在线观看网站| 91精品国产综合久久蜜臀| 精品综合免费视频观看| 亚洲精品自拍动漫在线| 日韩亚洲欧美在线观看| 国产成人av网站| 日韩vs国产vs欧美| 中文字幕在线不卡一区| 欧美日韩一区国产| 国产精品12区| 日韩国产精品久久久久久亚洲| 国产日韩精品视频一区| 91麻豆精品国产| 色综合久久久久久久久| 久久se精品一区精品二区| 亚洲一区二区三区四区在线| wwwwxxxxx欧美| 日韩一级片在线播放| 欧美美女网站色| av不卡免费在线观看| 成人丝袜高跟foot| 国产.精品.日韩.另类.中文.在线.播放 | 亚洲午夜免费电影| 一区在线观看视频| 亚洲欧美自拍偷拍| 国产精品美女久久久久av爽李琼| 91精品国产综合久久久蜜臀粉嫩| 色老综合老女人久久久| 丰满亚洲少妇av| 国产精品911| 99国产麻豆精品| 91黄色免费版| 欧美美女直播网站| 欧美一区二区三区免费视频| 欧美性大战久久| 欧美一区二区三区免费观看视频| 91麻豆精品国产91久久久| 日韩午夜小视频| 国产农村妇女毛片精品久久麻豆| 国产网红主播福利一区二区| 精品国产乱码91久久久久久网站| 国产日韩av一区| 亚洲国产视频一区| 蜜臀av性久久久久蜜臀aⅴ| 高清成人在线观看| 制服视频三区第一页精品| 91精品国产综合久久精品app| 国产欧美日韩综合| 日韩激情一二三区| 97成人超碰视| 欧美激情一区二区三区四区| 视频一区二区三区中文字幕| www..com久久爱| 精品免费国产二区三区| 亚洲一区在线观看免费观看电影高清| 美女一区二区久久| 色爱区综合激月婷婷| 国产精品萝li| 久久99日本精品| 在线视频国产一区| 国产精品美女久久久久av爽李琼| 美女一区二区久久| 欧美精品第1页| 亚洲成a人片综合在线| youjizz久久| 亚洲激情综合网| 欧洲生活片亚洲生活在线观看| 日韩欧美国产三级电影视频| 日韩国产精品久久久久久亚洲| 欧美午夜精品一区| 中文字幕日本不卡| av动漫一区二区| 一区二区日韩av| 欧美剧情片在线观看| 午夜视频久久久久久| 欧美色偷偷大香| 亚洲va中文字幕| 日韩一区二区免费高清| 极品少妇xxxx精品少妇| 久久精品人人做人人爽97| 国产一区不卡在线| 亚洲男同性恋视频| 欧美一区二区三区在线电影| 日本在线不卡视频一二三区| 国产欧美一区二区精品婷婷| 色狠狠一区二区| 亚洲超碰97人人做人人爱| 欧美一区二区三区四区高清| 久久电影网站中文字幕| 国产精品理伦片| 欧美一区二区免费| 99视频精品全部免费在线| 亚洲国产日韩在线一区模特| 亚洲精品在线一区二区| 在线观看91精品国产入口| 国产一区二区三区av电影| 亚洲成人激情av| 亚洲人成在线观看一区二区| 欧美一区二区三区系列电影| 欧美中文字幕久久| 国产成人免费网站| 国产在线精品一区二区| 日本欧美一区二区| 亚洲一卡二卡三卡四卡无卡久久 | 国产麻豆精品久久一二三| 一区二区三区在线观看动漫| 亚洲欧洲在线观看av| 久久久久久久电影| 亚洲精品一区二区三区在线观看 | 亚州成人在线电影| 亚洲欧洲三级电影| 国产欧美日韩视频在线观看| 精品国产青草久久久久福利| 91高清视频在线| 91一区二区在线| 99久久免费精品高清特色大片| 不卡av在线网| 欧美羞羞免费网站| 在线播放一区二区三区| 在线播放欧美女士性生活| 欧美伊人久久大香线蕉综合69 | 亚洲已满18点击进入久久| 国产精品萝li| 亚洲一区二区视频在线观看| 日日夜夜一区二区| 精品一区二区av| 国产真实精品久久二三区| 不卡的av在线播放| 717成人午夜免费福利电影| 日韩欧美综合在线| 中文字幕一区日韩精品欧美| 亚洲成a人在线观看| 国产一区二区三区不卡在线观看| www..com久久爱| 精品美女被调教视频大全网站| 久久色在线视频| 亚洲精选视频免费看| 日产欧产美韩系列久久99| 成人v精品蜜桃久久一区| 7777精品伊人久久久大香线蕉的| 久久女同精品一区二区| 亚洲欧洲制服丝袜|