From 463f2d47b2341b39f4a651178c7073e1e9f094c0 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 5 Jan 2019 11:44:45 +0100 Subject: [PATCH 1/7] Add html frame --- src/launcher/html/doc_host_ui_handler.cpp | 115 ++++++++++++++++++ src/launcher/html/doc_host_ui_handler.hpp | 47 +++++++ src/launcher/html/ole_client_site.cpp | 77 ++++++++++++ src/launcher/html/ole_client_site.hpp | 24 ++++ src/launcher/html/ole_in_place_frame.cpp | 82 +++++++++++++ src/launcher/html/ole_in_place_frame.hpp | 30 +++++ src/launcher/html/ole_in_place_site.cpp | 105 ++++++++++++++++ src/launcher/html/ole_in_place_site.hpp | 32 +++++ src/launcher/html_frame.cpp | 142 ++++++++++++++++++++++ src/launcher/html_frame.hpp | 40 ++++++ src/launcher/image.cpp | 75 ------------ src/launcher/image.hpp | 27 ---- src/launcher/launcher.cpp | 102 ++-------------- src/launcher/launcher.hpp | 13 +- src/launcher/window.cpp | 61 +++++----- src/launcher/window.hpp | 9 +- src/module/command.cpp | 5 +- src/std_include.cpp | 2 + src/std_include.hpp | 6 +- 19 files changed, 750 insertions(+), 244 deletions(-) create mode 100644 src/launcher/html/doc_host_ui_handler.cpp create mode 100644 src/launcher/html/doc_host_ui_handler.hpp create mode 100644 src/launcher/html/ole_client_site.cpp create mode 100644 src/launcher/html/ole_client_site.hpp create mode 100644 src/launcher/html/ole_in_place_frame.cpp create mode 100644 src/launcher/html/ole_in_place_frame.hpp create mode 100644 src/launcher/html/ole_in_place_site.cpp create mode 100644 src/launcher/html/ole_in_place_site.hpp create mode 100644 src/launcher/html_frame.cpp create mode 100644 src/launcher/html_frame.hpp delete mode 100644 src/launcher/image.cpp delete mode 100644 src/launcher/image.hpp diff --git a/src/launcher/html/doc_host_ui_handler.cpp b/src/launcher/html/doc_host_ui_handler.cpp new file mode 100644 index 0000000..ceab8d9 --- /dev/null +++ b/src/launcher/html/doc_host_ui_handler.cpp @@ -0,0 +1,115 @@ +#include +#include "../html_frame.hpp" + +doc_host_ui_handler::doc_host_ui_handler(html_frame* frame): frame_(frame) +{ +} + +HRESULT doc_host_ui_handler::QueryInterface(REFIID riid, LPVOID* ppvObj) +{ + auto client_site = this->frame_->get_client_site(); + if (client_site) + { + return client_site->QueryInterface(riid, ppvObj); + } + + return E_NOINTERFACE; +} + +ULONG doc_host_ui_handler::AddRef() +{ + return 1; +} + +ULONG doc_host_ui_handler::Release() +{ + return 1; +} + +HRESULT doc_host_ui_handler::ShowContextMenu(DWORD /*dwID*/, POINT* /*ppt*/, IUnknown* /*pcmdtReserved*/, + IDispatch* /*pdispReserved*/) +{ + return S_OK; +} + +HRESULT doc_host_ui_handler::ShowUI(DWORD /*dwID*/, IOleInPlaceActiveObject* /*pActiveObject*/, + IOleCommandTarget* /*pCommandTarget*/, + IOleInPlaceFrame* /*pFrame*/, IOleInPlaceUIWindow* /*pDoc*/) +{ + return S_OK; +} + +HRESULT doc_host_ui_handler::HideUI() +{ + return S_OK; +} + +HRESULT doc_host_ui_handler::UpdateUI() +{ + return S_OK; +} + +HRESULT doc_host_ui_handler::EnableModeless(BOOL /*fEnable*/) +{ + return S_OK; +} + +HRESULT doc_host_ui_handler::OnDocWindowActivate(BOOL /*fActivate*/) +{ + return S_OK; +} + +HRESULT doc_host_ui_handler::OnFrameWindowActivate(BOOL /*fActivate*/) +{ + return S_OK; +} + +HRESULT doc_host_ui_handler::ResizeBorder(LPCRECT /*prcBorder*/, IOleInPlaceUIWindow* /*pUIWindow*/, + BOOL /*fRameWindow*/) +{ + return S_OK; +} + +HRESULT doc_host_ui_handler::TranslateAcceleratorA(LPMSG /*lpMsg*/, const GUID* pguidCmdGroup, DWORD /*nCmdID*/) +{ + pguidCmdGroup = nullptr; + return S_FALSE; +} + +HRESULT doc_host_ui_handler::GetOptionKeyPath(LPOLESTR* /*pchKey*/, DWORD /*dw*/) +{ + return S_FALSE; +} + +HRESULT doc_host_ui_handler::GetDropTarget(IDropTarget* /*pDropTarget*/, IDropTarget** /*ppDropTarget*/) +{ + return S_FALSE; +} + +HRESULT doc_host_ui_handler::GetExternal(IDispatch** ppDispatch) +{ + *ppDispatch = nullptr; + return S_FALSE; +} + +HRESULT doc_host_ui_handler::FilterDataObject(IDataObject* /*pDO*/, IDataObject** ppDORet) +{ + *ppDORet = nullptr; + return S_FALSE; +} + +HRESULT STDMETHODCALLTYPE doc_host_ui_handler::TranslateUrl(DWORD /*dwTranslate*/, OLECHAR __RPC_FAR* /*pchURLIn*/, + OLECHAR __RPC_FAR* __RPC_FAR* ppchURLOut) +{ + *ppchURLOut = nullptr; + return S_FALSE; +} + +HRESULT doc_host_ui_handler::GetHostInfo(DOCHOSTUIINFO __RPC_FAR * pInfo) +{ + pInfo->cbSize = sizeof(DOCHOSTUIINFO); + pInfo->dwFlags = DOCHOSTUIFLAG_NO3DBORDER | DOCHOSTUIFLAG_DPI_AWARE | DOCHOSTUIFLAG_SCROLL_NO; + pInfo->dwDoubleClick = DOCHOSTUIDBLCLK_DEFAULT; + + return S_OK; +} diff --git a/src/launcher/html/doc_host_ui_handler.hpp b/src/launcher/html/doc_host_ui_handler.hpp new file mode 100644 index 0000000..0b538b4 --- /dev/null +++ b/src/launcher/html/doc_host_ui_handler.hpp @@ -0,0 +1,47 @@ +#pragma once + +class html_frame; + +class doc_host_ui_handler final : public IDocHostUIHandler +{ +public: + doc_host_ui_handler(html_frame* frame); + virtual ~doc_host_ui_handler() = default; + +private: + html_frame* frame_; + +public: // IDocHostUIHandler interface + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, LPVOID* ppvObj) override; + ULONG STDMETHODCALLTYPE AddRef() override; + ULONG STDMETHODCALLTYPE Release() override; + HRESULT STDMETHODCALLTYPE ShowContextMenu( + DWORD dwID, + POINT __RPC_FAR * ppt, + IUnknown __RPC_FAR * pcmdtReserved, + IDispatch __RPC_FAR * pdispReserved) override; + HRESULT STDMETHODCALLTYPE ShowUI( + DWORD dwID, + IOleInPlaceActiveObject __RPC_FAR * pActiveObject, + IOleCommandTarget __RPC_FAR * pCommandTarget, + IOleInPlaceFrame __RPC_FAR * pFrame, + IOleInPlaceUIWindow __RPC_FAR * pDoc) override; + HRESULT STDMETHODCALLTYPE GetHostInfo(DOCHOSTUIINFO __RPC_FAR * pInfo) override; + HRESULT STDMETHODCALLTYPE HideUI() override; + HRESULT STDMETHODCALLTYPE UpdateUI() override; + HRESULT STDMETHODCALLTYPE EnableModeless(BOOL fEnable) override; + HRESULT STDMETHODCALLTYPE OnDocWindowActivate(BOOL fActivate) override; + HRESULT STDMETHODCALLTYPE OnFrameWindowActivate(BOOL fActivate) override; + HRESULT STDMETHODCALLTYPE ResizeBorder(LPCRECT prcBorder, IOleInPlaceUIWindow __RPC_FAR * pUIWindow, + BOOL fRameWindow) override; + HRESULT STDMETHODCALLTYPE TranslateAccelerator(LPMSG lpMsg, const GUID __RPC_FAR * pguidCmdGroup, DWORD nCmdID) + override; + HRESULT STDMETHODCALLTYPE GetOptionKeyPath(LPOLESTR __RPC_FAR * pchKey, DWORD dw) override; + HRESULT STDMETHODCALLTYPE GetDropTarget(IDropTarget __RPC_FAR * pDropTarget, + IDropTarget __RPC_FAR *__RPC_FAR * ppDropTarget) override; + HRESULT STDMETHODCALLTYPE GetExternal(IDispatch __RPC_FAR *__RPC_FAR * ppDispatch) override; + HRESULT STDMETHODCALLTYPE TranslateUrl(DWORD dwTranslate, OLECHAR __RPC_FAR * pchURLIn, + OLECHAR __RPC_FAR *__RPC_FAR * ppchURLOut) override; + HRESULT STDMETHODCALLTYPE FilterDataObject(IDataObject __RPC_FAR * pDO, IDataObject __RPC_FAR *__RPC_FAR * ppDORet) + override; +}; diff --git a/src/launcher/html/ole_client_site.cpp b/src/launcher/html/ole_client_site.cpp new file mode 100644 index 0000000..2bc2b11 --- /dev/null +++ b/src/launcher/html/ole_client_site.cpp @@ -0,0 +1,77 @@ +#include +#include "../html_frame.hpp" + +ole_client_site::ole_client_site(html_frame* frame): frame_(frame) +{ +} + +HRESULT ole_client_site::QueryInterface(REFIID riid, LPVOID* ppvObject) +{ + if (!memcmp(&riid, &IID_IUnknown, sizeof(GUID)) || + !memcmp(&riid, &IID_IOleClientSite, sizeof(GUID))) + { + *ppvObject = this; + this->AddRef(); + return S_OK; + } + + if (!memcmp(&riid, &IID_IOleInPlaceSite, sizeof(GUID))) + { + auto in_place_site = this->frame_->get_in_place_site(); + in_place_site->AddRef(); + *ppvObject = in_place_site; + return S_OK; + } + + if (!memcmp(&riid, &IID_IDocHostUIHandler, sizeof(GUID))) + { + auto ui_handler = this->frame_->get_ui_handler(); + ui_handler->AddRef(); + *ppvObject = ui_handler; + return S_OK; + } + + *ppvObject = nullptr; + return E_NOINTERFACE; +} + +ULONG ole_client_site::AddRef() +{ + return 1; +} + +ULONG ole_client_site::Release() +{ + return 1; +} + +HRESULT ole_client_site::SaveObject() +{ + return E_NOTIMPL; +} + +HRESULT ole_client_site::GetMoniker(DWORD /*dwAssign*/, DWORD /*dwWhichMoniker*/, IMoniker** /*ppmk*/) +{ + return E_NOTIMPL; +} + +HRESULT ole_client_site::GetContainer(LPOLECONTAINER* ppContainer) +{ + *ppContainer = nullptr; + return E_NOINTERFACE; +} + +HRESULT ole_client_site::ShowObject() +{ + return NOERROR; +} + +HRESULT ole_client_site::OnShowWindow(BOOL /*fShow*/) +{ + return E_NOTIMPL; +} + +HRESULT ole_client_site::RequestNewObjectLayout() +{ + return E_NOTIMPL; +} diff --git a/src/launcher/html/ole_client_site.hpp b/src/launcher/html/ole_client_site.hpp new file mode 100644 index 0000000..d0adc80 --- /dev/null +++ b/src/launcher/html/ole_client_site.hpp @@ -0,0 +1,24 @@ +#pragma once + +class html_frame; + +class ole_client_site final : public IOleClientSite +{ +public: + ole_client_site(html_frame* frame); + virtual ~ole_client_site() = default; + +private: + html_frame* frame_; + +public: + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, LPVOID* ppvObject) override; + ULONG STDMETHODCALLTYPE AddRef() override; + ULONG STDMETHODCALLTYPE Release() override; + HRESULT STDMETHODCALLTYPE SaveObject() override; + HRESULT STDMETHODCALLTYPE GetMoniker(DWORD dwAssign, DWORD dwWhichMoniker, IMoniker** ppmk) override; + HRESULT STDMETHODCALLTYPE GetContainer(LPOLECONTAINER FAR* ppContainer) override; + HRESULT STDMETHODCALLTYPE ShowObject() override; + HRESULT STDMETHODCALLTYPE OnShowWindow(BOOL fShow) override; + HRESULT STDMETHODCALLTYPE RequestNewObjectLayout() override; +}; diff --git a/src/launcher/html/ole_in_place_frame.cpp b/src/launcher/html/ole_in_place_frame.cpp new file mode 100644 index 0000000..b9612d5 --- /dev/null +++ b/src/launcher/html/ole_in_place_frame.cpp @@ -0,0 +1,82 @@ +#include +#include "../html_frame.hpp" + +ole_in_place_frame::ole_in_place_frame(html_frame* frame): frame_(frame) +{ +} + +HRESULT ole_in_place_frame::QueryInterface(REFIID /*riid*/, LPVOID* /*ppvObj*/) +{ + return E_NOTIMPL; +} + +ULONG ole_in_place_frame::AddRef() +{ + return 1; +} + +ULONG ole_in_place_frame::Release() +{ + return 1; +} + +HRESULT ole_in_place_frame::GetWindow(HWND* lphwnd) +{ + *lphwnd = this->frame_->get_window(); + return S_OK; +} + +HRESULT ole_in_place_frame::ContextSensitiveHelp(BOOL /*fEnterMode*/) +{ + return E_NOTIMPL; +} + +HRESULT ole_in_place_frame::GetBorder(LPRECT /*lprectBorder*/) +{ + return E_NOTIMPL; +} + +HRESULT ole_in_place_frame::RequestBorderSpace(LPCBORDERWIDTHS /*pborderwidths*/) +{ + return E_NOTIMPL; +} + +HRESULT ole_in_place_frame::SetBorderSpace(LPCBORDERWIDTHS /*pborderwidths*/) +{ + return E_NOTIMPL; +} + +HRESULT ole_in_place_frame::SetActiveObject(IOleInPlaceActiveObject* /*pActiveObject*/, LPCOLESTR /*pszObjName*/) +{ + return S_OK; +} + +HRESULT ole_in_place_frame::InsertMenus(HMENU /*hmenuShared*/, LPOLEMENUGROUPWIDTHS /*lpMenuWidths*/) +{ + return E_NOTIMPL; +} + +HRESULT ole_in_place_frame::SetMenu(HMENU /*hmenuShared*/, HOLEMENU /*holemenu*/, HWND /*hwndActiveObject*/) +{ + return S_OK; +} + +HRESULT ole_in_place_frame::RemoveMenus(HMENU /*hmenuShared*/) +{ + return E_NOTIMPL; +} + +HRESULT ole_in_place_frame::SetStatusText(LPCOLESTR /*pszStatusText*/) +{ + return S_OK; +} + +HRESULT ole_in_place_frame::EnableModeless(BOOL /*fEnable*/) +{ + return S_OK; +} + +HRESULT ole_in_place_frame::TranslateAcceleratorA(LPMSG /*lpmsg*/, WORD /*wID*/) +{ + return E_NOTIMPL; +} diff --git a/src/launcher/html/ole_in_place_frame.hpp b/src/launcher/html/ole_in_place_frame.hpp new file mode 100644 index 0000000..4a39d7f --- /dev/null +++ b/src/launcher/html/ole_in_place_frame.hpp @@ -0,0 +1,30 @@ +#pragma once + +class html_frame; + +class ole_in_place_frame final : public IOleInPlaceFrame +{ +public: + ole_in_place_frame(html_frame* frame); + virtual ~ole_in_place_frame() = default; + +private: + html_frame* frame_; + +public: // IOleInPlaceFrame interface + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, LPVOID FAR* ppvObj) override; + ULONG STDMETHODCALLTYPE AddRef() override; + ULONG STDMETHODCALLTYPE Release() override; + HRESULT STDMETHODCALLTYPE GetWindow(HWND FAR* lphwnd) override; + HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode) override; + HRESULT STDMETHODCALLTYPE GetBorder(LPRECT lprectBorder) override; + HRESULT STDMETHODCALLTYPE RequestBorderSpace(LPCBORDERWIDTHS pborderwidths) override; + HRESULT STDMETHODCALLTYPE SetBorderSpace(LPCBORDERWIDTHS pborderwidths) override; + HRESULT STDMETHODCALLTYPE SetActiveObject(IOleInPlaceActiveObject* pActiveObject, LPCOLESTR pszObjName) override; + HRESULT STDMETHODCALLTYPE InsertMenus(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths) override; + HRESULT STDMETHODCALLTYPE SetMenu(HMENU hmenuShared, HOLEMENU holemenu, HWND hwndActiveObject) override; + HRESULT STDMETHODCALLTYPE RemoveMenus(HMENU hmenuShared) override; + HRESULT STDMETHODCALLTYPE SetStatusText(LPCOLESTR pszStatusText) override; + HRESULT STDMETHODCALLTYPE EnableModeless(BOOL fEnable) override; + HRESULT STDMETHODCALLTYPE TranslateAccelerator(LPMSG lpmsg, WORD wID) override; +}; diff --git a/src/launcher/html/ole_in_place_site.cpp b/src/launcher/html/ole_in_place_site.cpp new file mode 100644 index 0000000..0623eb2 --- /dev/null +++ b/src/launcher/html/ole_in_place_site.cpp @@ -0,0 +1,105 @@ +#include +#include "../html_frame.hpp" + +ole_in_place_site::ole_in_place_site(html_frame* frame) : frame_(frame) +{ +} + +HRESULT ole_in_place_site::QueryInterface(REFIID riid, LPVOID FAR* ppvObj) +{ + auto client_site = this->frame_->get_client_site(); + if (client_site) + { + return client_site->QueryInterface(riid, ppvObj); + } + + return E_NOINTERFACE; +} + +ULONG ole_in_place_site::AddRef() +{ + return 1; +} + +ULONG ole_in_place_site::Release() +{ + return 1; +} + +HRESULT ole_in_place_site::GetWindow(HWND* lphwnd) +{ + *lphwnd = this->frame_->get_window(); + return S_OK; +} + +HRESULT ole_in_place_site::ContextSensitiveHelp(BOOL /*fEnterMode*/) +{ + return E_NOTIMPL; +} + +HRESULT ole_in_place_site::CanInPlaceActivate() +{ + return S_OK; +} + +HRESULT ole_in_place_site::OnInPlaceActivate() +{ + return S_OK; +} + +HRESULT ole_in_place_site::OnUIActivate() +{ + return S_OK; +} + +HRESULT ole_in_place_site::GetWindowContext(LPOLEINPLACEFRAME* lplpFrame, LPOLEINPLACEUIWINDOW* lplpDoc, + LPRECT /*lprcPosRect*/, LPRECT /*lprcClipRect*/, + LPOLEINPLACEFRAMEINFO lpFrameInfo) +{ + *lplpFrame = this->frame_->get_in_place_frame(); + *lplpDoc = nullptr; + + lpFrameInfo->fMDIApp = FALSE; + lpFrameInfo->hwndFrame = this->frame_->get_window(); + lpFrameInfo->haccel = nullptr; + lpFrameInfo->cAccelEntries = 0; + + return S_OK; +} + +HRESULT ole_in_place_site::Scroll(SIZE /*scrollExtent*/) +{ + return E_NOTIMPL; +} + +HRESULT ole_in_place_site::OnUIDeactivate(BOOL /*fUndoable*/) +{ + return S_OK; +} + +HRESULT ole_in_place_site::OnInPlaceDeactivate() +{ + return S_OK; +} + +HRESULT ole_in_place_site::DiscardUndoState() +{ + return E_NOTIMPL; +} + +HRESULT ole_in_place_site::DeactivateAndUndo() +{ + return E_NOTIMPL; +} + +HRESULT ole_in_place_site::OnPosRectChange(LPCRECT lprcPosRect) +{ + IOleInPlaceObject* in_place = nullptr; + if (!this->frame_->get_browser_object()->QueryInterface(IID_IOleInPlaceObject, reinterpret_cast(&in_place))) + { + in_place->SetObjectRects(lprcPosRect, lprcPosRect); + in_place->Release(); + } + + return S_OK; +} diff --git a/src/launcher/html/ole_in_place_site.hpp b/src/launcher/html/ole_in_place_site.hpp new file mode 100644 index 0000000..3dad18c --- /dev/null +++ b/src/launcher/html/ole_in_place_site.hpp @@ -0,0 +1,32 @@ +#pragma once + +class html_frame; + +class ole_in_place_site final : public IOleInPlaceSite +{ +public: + ole_in_place_site(html_frame* frame); + virtual ~ole_in_place_site() = default; + +private: + html_frame* frame_; + +public: // IOleInPlaceSite interface + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, LPVOID FAR* ppvObj) override; + ULONG STDMETHODCALLTYPE AddRef() override; + ULONG STDMETHODCALLTYPE Release() override; + HRESULT STDMETHODCALLTYPE GetWindow(HWND FAR* lphwnd) override; + HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode) override; + HRESULT STDMETHODCALLTYPE CanInPlaceActivate() override; + HRESULT STDMETHODCALLTYPE OnInPlaceActivate() override; + HRESULT STDMETHODCALLTYPE OnUIActivate() override; + HRESULT STDMETHODCALLTYPE GetWindowContext(LPOLEINPLACEFRAME FAR* lplpFrame, LPOLEINPLACEUIWINDOW FAR* lplpDoc, + LPRECT lprcPosRect, LPRECT lprcClipRect, + LPOLEINPLACEFRAMEINFO lpFrameInfo) override; + HRESULT STDMETHODCALLTYPE Scroll(SIZE scrollExtent) override; + HRESULT STDMETHODCALLTYPE OnUIDeactivate(BOOL fUndoable) override; + HRESULT STDMETHODCALLTYPE OnInPlaceDeactivate() override; + HRESULT STDMETHODCALLTYPE DiscardUndoState() override; + HRESULT STDMETHODCALLTYPE DeactivateAndUndo() override; + HRESULT STDMETHODCALLTYPE OnPosRectChange(LPCRECT lprcPosRect) override; +}; diff --git a/src/launcher/html_frame.cpp b/src/launcher/html_frame.cpp new file mode 100644 index 0000000..a35e42d --- /dev/null +++ b/src/launcher/html_frame.cpp @@ -0,0 +1,142 @@ +#include +#include "html_frame.hpp" + +html_frame::html_frame() : in_place_frame_(this), in_place_site_(this), ui_handler_(this), client_site_(this) +{ + if (OleInitialize(nullptr) != S_OK) + { + throw std::runtime_error("Unable to initialize the OLE library"); + } +} + +html_frame::~html_frame() +{ + OleUninitialize(); +} + +HWND html_frame::get_window() const +{ + return this->window_; +} + +std::shared_ptr html_frame::get_browser_object() const +{ + return this->browser_object_; +} + +ole_in_place_frame* html_frame::get_in_place_frame() +{ + return &this->in_place_frame_; +} + +ole_in_place_site* html_frame::get_in_place_site() +{ + return &this->in_place_site_; +} + +doc_host_ui_handler* html_frame::get_ui_handler() +{ + return &this->ui_handler_; +} + +ole_client_site* html_frame::get_client_site() +{ + return &this->client_site_; +} + +std::shared_ptr html_frame::get_web_browser() const +{ + IWebBrowser2* web_browser; + if (!this->browser_object_->QueryInterface(IID_IWebBrowser2, reinterpret_cast(&web_browser))) + { + return std::shared_ptr(web_browser, [](IWebBrowser2* web_browser) + { + if (web_browser) + { + web_browser->Release(); + } + }); + } + + return {}; +} + +void html_frame::initialize(const HWND window) +{ + if (this->window_) return; + this->window_ = window; + + this->create_browser(); + this->initialize_browser(); +} + +void html_frame::create_browser() +{ + LPCLASSFACTORY class_factory = nullptr; + if (CoGetClassObject(CLSID_WebBrowser, CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER, nullptr, IID_IClassFactory, + reinterpret_cast(&class_factory)) || !class_factory) + { + throw std::runtime_error("Unable to get the class factory"); + } + + IOleObject* browser_object = nullptr; + class_factory->CreateInstance(nullptr, IID_IOleObject, reinterpret_cast(&browser_object)); + class_factory->Release(); + + if (!browser_object) + { + throw std::runtime_error("Unable to create browser object"); + } + + this->browser_object_ = std::shared_ptr(browser_object, [](IOleObject* browser_object) + { + if (browser_object) + { + browser_object->Close(OLECLOSE_NOSAVE); + browser_object->Release(); + } + }); +} + +void html_frame::initialize_browser() +{ + this->browser_object_->SetClientSite(this->get_client_site()); + this->browser_object_->SetHostNames(L"Hostname", nullptr); + + RECT rect; + GetClientRect(this->get_window(), &rect); + OleSetContainedObject(this->browser_object_.get(), TRUE); + + this->browser_object_->DoVerb(OLEIVERB_SHOW, nullptr, this->get_client_site(), -1, this->get_window(), &rect); + this->resize(rect.right, rect.bottom); +} + +void html_frame::resize(const DWORD width, const DWORD height) const +{ + auto web_browser = this->get_web_browser(); + if (web_browser) + { + web_browser->put_Left(0); + web_browser->put_Top(0); + web_browser->put_Width(width); + web_browser->put_Height(height); + } +} + +void html_frame::load_url(std::string url) const +{ + auto web_browser = this->get_web_browser(); + if (web_browser) + { + std::wstring wide_url(url.begin(), url.end()); + + VARIANT my_url; + VariantInit(&my_url); + my_url.vt = VT_BSTR; + my_url.bstrVal = SysAllocString(wide_url.data()); + + web_browser->Navigate2(&my_url, nullptr, nullptr, nullptr, nullptr); + + VariantClear(&my_url); + } +} diff --git a/src/launcher/html_frame.hpp b/src/launcher/html_frame.hpp new file mode 100644 index 0000000..aaee1b7 --- /dev/null +++ b/src/launcher/html_frame.hpp @@ -0,0 +1,40 @@ +#pragma once +#include "window.hpp" +#include "html/ole_in_place_frame.hpp" +#include "html/ole_in_place_site.hpp" +#include "html/doc_host_ui_handler.hpp" +#include "html/ole_client_site.hpp" + +class html_frame final +{ +public: + html_frame(); + ~html_frame(); + + void initialize(const HWND window); + + void resize(DWORD width, DWORD height) const; + void load_url(std::string url) const; + + HWND get_window() const; + + std::shared_ptr get_browser_object() const; + std::shared_ptr get_web_browser() const; + + ole_in_place_frame* get_in_place_frame(); + ole_in_place_site* get_in_place_site(); + doc_host_ui_handler* get_ui_handler(); + ole_client_site* get_client_site(); + +private: + HWND window_ = nullptr; + std::shared_ptr browser_object_; + + ole_in_place_frame in_place_frame_; + ole_in_place_site in_place_site_; + doc_host_ui_handler ui_handler_; + ole_client_site client_site_; + + void create_browser(); + void initialize_browser(); +}; diff --git a/src/launcher/image.cpp b/src/launcher/image.cpp deleted file mode 100644 index afcf3c3..0000000 --- a/src/launcher/image.cpp +++ /dev/null @@ -1,75 +0,0 @@ -#include -#include "image.hpp" - -image::image(const size_t resource) -{ - this->bitmap_ = LoadBitmapA(GetModuleHandleA(nullptr), MAKEINTRESOURCEA(resource)); -} - -image::~image() -{ - DeleteBitmap(this->bitmap_); -} - -void image::set_position(const POINT& position) -{ - this->position_ = position; -} - -void image::set_size(const POINT& size) -{ - this->size_ = size; -} - -bool image::is_hovered(const POINT& mouse) const -{ - return mouse.x >= this->position_.x && mouse.x < (this->position_.x + this->size_.x) - && mouse.y >= this->position_.y && mouse.y < (this->position_.y + this->size_.y); -} - -void image::paint(const HDC hdc, const POINT& mouse) const -{ - BITMAP bitmap; - GetObject(this->bitmap_, sizeof(bitmap), &bitmap); - - const auto dc = CreateCompatibleDC(hdc); - SelectObject(dc, this->bitmap_); - - const LONG modifier = 2; - LONG size_offset = 0; - LONG position_offset = 0; - if (this->is_hovered(mouse)) - { - size_offset = modifier * 2; - position_offset = -modifier; - } - - SetStretchBltMode(hdc, HALFTONE); - StretchBlt(hdc, this->position_.x + position_offset, this->position_.y + position_offset, - this->size_.x + size_offset, this->size_.y + size_offset, dc, 0, 0, bitmap.bmWidth, - bitmap.bmHeight, SRCCOPY); - - DeleteDC(dc); -} - -void image::set_click_listener(std::function callback) -{ - this->callback_ = callback; -} - -void image::click(const POINT& mouse, const bool down) -{ - if (down) - { - this->down_handled_ = this->is_hovered(mouse); - } - else - { - if (this->down_handled_ && this->is_hovered(mouse) && this->callback_) - { - this->callback_(); - } - - this->down_handled_ = false; - } -} diff --git a/src/launcher/image.hpp b/src/launcher/image.hpp deleted file mode 100644 index ff54759..0000000 --- a/src/launcher/image.hpp +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -class image final -{ -public: - image(size_t resource); - ~image(); - - void set_position(const POINT& position); - void set_size(const POINT& size); - - bool is_hovered(const POINT& mouse) const; - - void paint(HDC hdc, const POINT& mouse) const; - - void set_click_listener(std::function callback); - - void click(const POINT& mouse, bool down); - -private: - POINT size_{}; - POINT position_{}; - HBITMAP bitmap_; - - bool down_handled_ = false; - std::function callback_; -}; diff --git a/src/launcher/launcher.cpp b/src/launcher/launcher.cpp index ea66228..34b402f 100644 --- a/src/launcher/launcher.cpp +++ b/src/launcher/launcher.cpp @@ -1,19 +1,14 @@ #include #include "launcher.hpp" +#include "html_frame.hpp" -launcher::launcher() : window_("Open-IW5", 615, 300), image_sp_(IMAGE_SP), image_mp_(IMAGE_MP) +launcher::launcher() { - this->image_sp_.set_position({100, 90}); - this->image_mp_.set_position({401, 90}); - - this->image_sp_.set_size({100, 100}); - this->image_mp_.set_size({100, 100}); - - this->image_sp_.set_click_listener(std::bind(&launcher::select_mode, this, mode::singleplayer)); - this->image_mp_.set_click_listener(std::bind(&launcher::select_mode, this, mode::multiplayer)); - this->window_.set_callback(std::bind(&launcher::handler, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); + + this->window_.create("Open-IW5", 615, 300); + this->html_frame_.load_url("https://google.com"); } launcher::mode launcher::run() const @@ -25,27 +20,16 @@ launcher::mode launcher::run() const LRESULT launcher::handler(const UINT message, const WPARAM w_param, const LPARAM l_param) { - if (message == WM_PAINT) + if (message == WM_SIZE) { - this->paint(); + this->html_frame_.resize(LOWORD(l_param), HIWORD(l_param)); + return 0; } - else if (message == WM_MOUSEMOVE) + + if (message == WM_CREATE) { - this->mouse_move(l_param); - } - else if (message == WM_LBUTTONDOWN) - { - this->image_sp_.click(this->mouse_, true); - this->image_mp_.click(this->mouse_, true); - } - else if (message == WM_LBUTTONUP) - { - this->image_sp_.click(this->mouse_, false); - this->image_mp_.click(this->mouse_, false); - } - else if (message == WM_ERASEBKGND) - { - return TRUE; + this->html_frame_.initialize(this->window_); + return 0; } return DefWindowProc(this->window_, message, w_param, l_param); @@ -56,65 +40,3 @@ void launcher::select_mode(const mode mode) this->mode_ = mode; this->window_.close(); } - -void launcher::draw_text(const HDC hdc) -{ - Gdiplus::Graphics graphics(hdc); - Gdiplus::SolidBrush color(Gdiplus::Color(255, 150, 150, 150)); - Gdiplus::FontFamily font_family(L"Segoe UI"); - Gdiplus::Font font(&font_family, 20, Gdiplus::FontStyleRegular, Gdiplus::UnitPixel); - const auto stringformat = Gdiplus::StringFormat::GenericTypographic(); - - std::wstring sp(L"Singleplayer"); - std::wstring mp(L"Multiplayer"); - - Gdiplus::RectF rect{}; - graphics.MeasureString(sp.data(), -1, &font, rect, stringformat, &rect); - - const Gdiplus::PointF pos{150 - (rect.Width / 2 + 2), 45}; - graphics.DrawString(sp.data(), -1, &font, pos, &color); - - rect = {}; - graphics.MeasureString(mp.data(), -1, &font, rect, stringformat, &rect); - graphics.DrawString(mp.data(), -1, &font, {451 - (rect.Width / 2 + 4), 45}, &color); - - Gdiplus::Pen pen(Gdiplus::Color(50, 255, 255, 255), 1); - graphics.DrawLine(&pen, 300, 0, 300, 600); -} - -void launcher::paint() const -{ - RECT rect; - GetClientRect(this->window_, &rect); - const int width = rect.right - rect.left; - const int height = rect.bottom + rect.left; - - PAINTSTRUCT ps; - const auto hdc = BeginPaint(this->window_, &ps); - - const auto hdc_copy = CreateCompatibleDC(hdc); - const auto bitmap = CreateCompatibleBitmap(hdc, width, height); - SelectObject(hdc_copy, bitmap); - - this->window_.clear(hdc_copy); - - this->draw_text(hdc_copy); - - this->image_sp_.paint(hdc_copy, this->mouse_); - this->image_mp_.paint(hdc_copy, this->mouse_); - - BitBlt(hdc, 0, 0, width, height, hdc_copy, 0, 0, SRCCOPY); - - DeleteObject(bitmap); - DeleteDC(hdc_copy); - - EndPaint(this->window_, &ps); -} - -void launcher::mouse_move(const LPARAM l_param) -{ - this->mouse_.x = GET_X_LPARAM(l_param); - this->mouse_.y = GET_Y_LPARAM(l_param); - - InvalidateRect(this->window_, nullptr, FALSE); -} diff --git a/src/launcher/launcher.hpp b/src/launcher/launcher.hpp index ff25d08..8b757fe 100644 --- a/src/launcher/launcher.hpp +++ b/src/launcher/launcher.hpp @@ -1,6 +1,6 @@ #pragma once #include "window.hpp" -#include "image.hpp" +#include "html_frame.hpp" class launcher final { @@ -21,17 +21,8 @@ private: mode mode_ = none; window window_; - - image image_sp_; - image image_mp_; - - POINT mouse_{}; + html_frame html_frame_; LRESULT handler(const UINT message, const WPARAM w_param, const LPARAM l_param); - void select_mode(mode mode); - - static void draw_text(const HDC hdc); - void paint() const; - void mouse_move(LPARAM l_param); }; diff --git a/src/launcher/window.cpp b/src/launcher/window.cpp index adfd7cf..f2c1224 100644 --- a/src/launcher/window.cpp +++ b/src/launcher/window.cpp @@ -1,36 +1,35 @@ #include #include "window.hpp" -window::window(const std::string& title, const int width, const int height) +window::window() { - Gdiplus::GdiplusStartupInput input; - GdiplusStartup(&this->token_, &input, nullptr); - - const auto handle = GetModuleHandle(nullptr); - ZeroMemory(&this->wc_, sizeof(this->wc_)); - this->classname = "window-base-" + std::to_string(time(nullptr)); + this->classname_ = "window-base-" + std::to_string(time(nullptr)); this->wc_.cbSize = sizeof(this->wc_); this->wc_.style = CS_HREDRAW | CS_VREDRAW; this->wc_.lpfnWndProc = static_processor; - this->wc_.hInstance = handle; + this->wc_.hInstance = GetModuleHandle(nullptr); this->wc_.hCursor = LoadCursor(nullptr, IDC_ARROW); - this->wc_.hIcon = LoadIcon(handle, MAKEINTRESOURCE(102)); + this->wc_.hIcon = LoadIcon(this->wc_.hInstance, MAKEINTRESOURCE(102)); this->wc_.hIconSm = this->wc_.hIcon; - this->wc_.hbrBackground = CreateSolidBrush(RGB(35, 35, 35)); - this->wc_.lpszClassName = this->classname.data(); + this->wc_.hbrBackground = HBRUSH(COLOR_WINDOW); + this->wc_.lpszClassName = this->classname_.data(); RegisterClassEx(&this->wc_); +} +void window::create(const std::string& title, const int width, const int height) +{ const auto x = (GetSystemMetrics(SM_CXSCREEN) - width) / 2; const auto y = (GetSystemMetrics(SM_CYSCREEN) - height) / 2; this->handle_ = CreateWindowExA(NULL, this->wc_.lpszClassName, title.data(), (WS_OVERLAPPEDWINDOW | WS_VISIBLE) & ~(WS_THICKFRAME | WS_MAXIMIZEBOX), x, y, width, - height, nullptr, nullptr, handle, nullptr); + height, nullptr, nullptr, this->wc_.hInstance, this); - SetWindowLongPtrA(*this, GWLP_USERDATA, LONG_PTR(this)); + ShowWindow(this->handle_, SW_SHOW); + UpdateWindow(this->handle_); } window::~window() @@ -38,8 +37,6 @@ window::~window() this->close(); UnregisterClass(this->wc_.lpszClassName, this->wc_.hInstance); DeleteObject(this->wc_.hbrBackground); - - Gdiplus::GdiplusShutdown(this->token_); } void window::close() @@ -53,27 +50,13 @@ void window::close() void window::run() const { MSG msg; - while (this->handle_ && IsWindow(*this)) + while (this->handle_ && IsWindow(*this) && GetMessage(&msg, nullptr, 0, 0)) { - if (PeekMessageA(&msg, nullptr, NULL, NULL, PM_REMOVE)) - { - TranslateMessage(&msg); - DispatchMessageA(&msg); - } - else - { - std::this_thread::sleep_for(1ms); - } + TranslateMessage(&msg); + DispatchMessage(&msg); } } -void window::clear(const HDC hdc) const -{ - RECT rc; - GetClientRect(*this, &rc); - FillRect(hdc, &rc, this->wc_.hbrBackground); -} - void window::set_callback(const std::function& callback) { this->callback_ = callback; @@ -81,6 +64,12 @@ void window::set_callback(const std::function& ca LRESULT CALLBACK window::processor(const UINT message, const WPARAM w_param, const LPARAM l_param) const { + if (message == WM_DESTROY) + { + PostQuitMessage(0); + return TRUE; + } + if (message == WM_KILL_WINDOW) { DestroyWindow(*this); @@ -97,6 +86,14 @@ LRESULT CALLBACK window::processor(const UINT message, const WPARAM w_param, con LRESULT CALLBACK window::static_processor(HWND hwnd, UINT message, WPARAM w_param, LPARAM l_param) { + if (message == WM_CREATE) + { + auto data = reinterpret_cast(l_param); + SetWindowLongPtrA(hwnd, GWLP_USERDATA, LONG_PTR(data->lpCreateParams)); + + reinterpret_cast(data->lpCreateParams)->handle_ = hwnd; + } + const auto self = reinterpret_cast(GetWindowLongPtr(hwnd, GWLP_USERDATA)); if (self) return self->processor(message, w_param, l_param); diff --git a/src/launcher/window.hpp b/src/launcher/window.hpp index ef6327a..3bbc1d2 100644 --- a/src/launcher/window.hpp +++ b/src/launcher/window.hpp @@ -5,23 +5,22 @@ class window final { public: - window(const std::string& title, int width, int height); + window(); ~window(); + void create(const std::string& title, int width, int height); + void close(); void run() const; - void clear(const HDC hdc) const; - void set_callback(const std::function& callback); operator HWND() const; private: - ULONG_PTR token_; WNDCLASSEX wc_{}; HWND handle_ = nullptr; - std::string classname; + std::string classname_; std::function callback_; LRESULT CALLBACK processor(UINT message, WPARAM w_param, LPARAM l_param) const; diff --git a/src/module/command.cpp b/src/module/command.cpp index c40447a..dc5f40d 100644 --- a/src/module/command.cpp +++ b/src/module/command.cpp @@ -23,7 +23,10 @@ void command::add(const std::string& name, const std::function -#include -#include -#include +#include +#include +#include #include #include #include From befafe7d291bc9ebb737ccf12809bb2653a664ce Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 5 Jan 2019 14:55:37 +0100 Subject: [PATCH 2/7] Add GSL dependency --- .gitmodules | 3 +++ deps/GSL | 1 + deps/premake/gsl.lua | 19 +++++++++++++++++++ src/std_include.hpp | 2 ++ 4 files changed, 25 insertions(+) create mode 160000 deps/GSL create mode 100644 deps/premake/gsl.lua diff --git a/.gitmodules b/.gitmodules index 760693b..4bf1865 100644 --- a/.gitmodules +++ b/.gitmodules @@ -14,3 +14,6 @@ path = deps/HDiffPatch url = https://github.com/sisong/HDiffPatch.git branch = master +[submodule "deps/GSL"] + path = deps/GSL + url = https://github.com/Microsoft/GSL.git diff --git a/deps/GSL b/deps/GSL new file mode 160000 index 0000000..0f68d13 --- /dev/null +++ b/deps/GSL @@ -0,0 +1 @@ +Subproject commit 0f68d133fa6fd2973951b8aaab481e34bbfd2cf4 diff --git a/deps/premake/gsl.lua b/deps/premake/gsl.lua new file mode 100644 index 0000000..7a2daf6 --- /dev/null +++ b/deps/premake/gsl.lua @@ -0,0 +1,19 @@ +gsl = { + source = path.join(dependencies.basePath, "GSL"), +} + +function gsl.import() + gsl.includes() +end + +function gsl.includes() + includedirs { + path.join(gsl.source, "include") + } +end + +function gsl.project() + +end + +table.insert(dependencies, gsl) diff --git a/src/std_include.hpp b/src/std_include.hpp index 3516d08..c2373fb 100644 --- a/src/std_include.hpp +++ b/src/std_include.hpp @@ -41,6 +41,8 @@ #include #include +#include + #pragma comment (lib, "gdiplus.lib") #pragma comment(lib, "ws2_32.lib") From 95972929f2f2ac60d8e61aec2e99d70b3f8c4e25 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 5 Jan 2019 15:04:34 +0100 Subject: [PATCH 3/7] Fix pre destruction calls --- src/main.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index afc91b9..1a94d49 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -55,7 +55,11 @@ int main() utils::nt::module self; const auto mode = launcher.run(); - if (mode == launcher::mode::none) return 0; + if (mode == launcher::mode::none) + { + module_loader::pre_destroy(); + return 0; + } loader loader(mode); loader.set_import_resolver([self](const std::string& module, const std::string& function) -> FARPROC @@ -81,6 +85,7 @@ int main() catch (std::exception& e) { MessageBoxA(nullptr, e.what(), "ERROR", MB_ICONERROR); + module_loader::pre_destroy(); return 1; } From a3a04079e447e249fd57d9c2884c3b0a6e472f23 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 5 Jan 2019 17:32:34 +0100 Subject: [PATCH 4/7] Create basic html based launcher --- src/launcher/html/doc_host_ui_handler.cpp | 4 +- src/launcher/html/html_argument.cpp | 37 +++++ src/launcher/html/html_argument.hpp | 18 +++ src/launcher/html/html_dispatch.cpp | 61 +++++++++ src/launcher/html/html_dispatch.hpp | 24 ++++ src/launcher/html_frame.cpp | 160 ++++++++++++++++++---- src/launcher/html_frame.hpp | 29 +++- src/launcher/launcher.cpp | 28 +++- src/launcher/launcher.hpp | 2 + src/launcher/window.cpp | 7 +- src/resource.hpp | 23 ++-- src/resource.rc | 4 +- src/resources/main.html | 83 +++++++++++ src/resources/multiplayer.bmp | Bin 172854 -> 0 bytes src/resources/singleplayer.bmp | Bin 172854 -> 0 bytes 15 files changed, 433 insertions(+), 47 deletions(-) create mode 100644 src/launcher/html/html_argument.cpp create mode 100644 src/launcher/html/html_argument.hpp create mode 100644 src/launcher/html/html_dispatch.cpp create mode 100644 src/launcher/html/html_dispatch.hpp create mode 100644 src/resources/main.html delete mode 100644 src/resources/multiplayer.bmp delete mode 100644 src/resources/singleplayer.bmp diff --git a/src/launcher/html/doc_host_ui_handler.cpp b/src/launcher/html/doc_host_ui_handler.cpp index ceab8d9..6dbbce1 100644 --- a/src/launcher/html/doc_host_ui_handler.cpp +++ b/src/launcher/html/doc_host_ui_handler.cpp @@ -88,8 +88,8 @@ HRESULT doc_host_ui_handler::GetDropTarget(IDropTarget* /*pDropTarget*/, IDropTa HRESULT doc_host_ui_handler::GetExternal(IDispatch** ppDispatch) { - *ppDispatch = nullptr; - return S_FALSE; + *ppDispatch = this->frame_->get_html_dispatch(); + return (*ppDispatch) ? S_OK : S_FALSE; } HRESULT doc_host_ui_handler::FilterDataObject(IDataObject* /*pDO*/, IDataObject** ppDORet) diff --git a/src/launcher/html/html_argument.cpp b/src/launcher/html/html_argument.cpp new file mode 100644 index 0000000..2857583 --- /dev/null +++ b/src/launcher/html/html_argument.cpp @@ -0,0 +1,37 @@ +#include +#include "html_argument.hpp" + +html_argument::html_argument(VARIANT* val) : value_(val) +{ + +} + +bool html_argument::is_empty() const +{ + return this->value_ == nullptr || this->value_->vt == VT_EMPTY; +} + +bool html_argument::is_string() const +{ + if(this->is_empty()) return false; + return this->value_->vt == VT_BSTR; +} + +bool html_argument::is_number() const +{ + if(this->is_empty()) return false; + return this->value_->vt == VT_I4; +} + +std::string html_argument::get_string() const +{ + if(!this->is_string()) return {}; + std::wstring wide_string(this->value_->bstrVal); + return std::string(wide_string.begin(), wide_string.end()); +} + +int html_argument::get_number() const +{ + if(!this->is_number()) return 0; + return this->value_->intVal; +} diff --git a/src/launcher/html/html_argument.hpp b/src/launcher/html/html_argument.hpp new file mode 100644 index 0000000..6eff151 --- /dev/null +++ b/src/launcher/html/html_argument.hpp @@ -0,0 +1,18 @@ +#pragma once + + class html_argument final + { + public: + html_argument(VARIANT* val); + + bool is_empty() const; + + bool is_string() const; + bool is_number() const; + + std::string get_string() const; + int get_number() const; + + private: + VARIANT* value_; + }; \ No newline at end of file diff --git a/src/launcher/html/html_dispatch.cpp b/src/launcher/html/html_dispatch.cpp new file mode 100644 index 0000000..7ca438f --- /dev/null +++ b/src/launcher/html/html_dispatch.cpp @@ -0,0 +1,61 @@ +#include +#include "../html_frame.hpp" + +html_dispatch::html_dispatch(html_frame* frame) : frame_(frame) +{ +} + +HRESULT html_dispatch::QueryInterface(const IID& riid, LPVOID* ppvObj) +{ + if (!memcmp(&riid, &IID_IUnknown, sizeof(GUID)) || + !memcmp(&riid, &IID_IDispatch, sizeof(GUID))) + { + *ppvObj = this; + this->AddRef(); + return S_OK; + } + + *ppvObj = nullptr; + return E_NOINTERFACE; +} + +ULONG html_dispatch::AddRef() +{ + return 1; +} + +ULONG html_dispatch::Release() +{ + return 1; +} + +HRESULT html_dispatch::GetTypeInfoCount(UINT* pctinfo) +{ + return S_FALSE; +} + +HRESULT html_dispatch::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo) +{ + return S_FALSE; +} + +HRESULT html_dispatch::GetIDsOfNames(const IID& riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgDispId) +{ + for(unsigned int i = 0; i < cNames; ++i) + { + std::wstring wide_name(rgszNames[i]); + std::string name(wide_name.begin(), wide_name.end()); + + rgDispId[i] = this->frame_->get_callback_id(name); + } + + return S_OK; +} + +HRESULT html_dispatch::Invoke(DISPID dispIdMember, const IID& riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, + VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) +{ + html_frame::callback_params params(pDispParams, pVarResult); + this->frame_->invoke_callback(dispIdMember, ¶ms); + return S_OK; +} diff --git a/src/launcher/html/html_dispatch.hpp b/src/launcher/html/html_dispatch.hpp new file mode 100644 index 0000000..869af7a --- /dev/null +++ b/src/launcher/html/html_dispatch.hpp @@ -0,0 +1,24 @@ +#pragma once + +class html_frame; + +class html_dispatch final : public IDispatch +{ +public: + html_dispatch(html_frame* frame); + virtual ~html_dispatch() = default; + +private: + html_frame* frame_; + +public: // IDispatch interface + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, LPVOID FAR* ppvObj) override; + ULONG STDMETHODCALLTYPE AddRef() override; + ULONG STDMETHODCALLTYPE Release() override; + HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT* pctinfo) override; + HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo) override; + HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgDispId) + override; + HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pDispParams, + VARIANT* pVarResult, EXCEPINFO* pExcepInfo, UINT* puArgErr) override; +}; diff --git a/src/launcher/html_frame.cpp b/src/launcher/html_frame.cpp index a35e42d..db45462 100644 --- a/src/launcher/html_frame.cpp +++ b/src/launcher/html_frame.cpp @@ -1,12 +1,25 @@ #include #include "html_frame.hpp" +#include "utils/nt.hpp" -html_frame::html_frame() : in_place_frame_(this), in_place_site_(this), ui_handler_(this), client_site_(this) +html_frame::callback_params::callback_params(DISPPARAMS* params, VARIANT* res) : result(res) +{ + for (auto i = params->cArgs; i > 0; --i) + { + auto param = ¶ms->rgvarg[i - 1]; + this->arguments.emplace_back(param); + } +} + +html_frame::html_frame() : in_place_frame_(this), in_place_site_(this), ui_handler_(this), client_site_(this), + html_dispatch_(this) { if (OleInitialize(nullptr) != S_OK) { throw std::runtime_error("Unable to initialize the OLE library"); } + + this->emulate_browser(); } html_frame::~html_frame() @@ -14,6 +27,14 @@ html_frame::~html_frame() OleUninitialize(); } +void html_frame::object_deleter(IUnknown* object) +{ + if (object) + { + object->Release(); + } +} + HWND html_frame::get_window() const { return this->window_; @@ -44,21 +65,42 @@ ole_client_site* html_frame::get_client_site() return &this->client_site_; } +html_dispatch* html_frame::get_html_dispatch() +{ + return &this->html_dispatch_; +} + std::shared_ptr html_frame::get_web_browser() const { - IWebBrowser2* web_browser; - if (!this->browser_object_->QueryInterface(IID_IWebBrowser2, reinterpret_cast(&web_browser))) - { - return std::shared_ptr(web_browser, [](IWebBrowser2* web_browser) - { - if (web_browser) - { - web_browser->Release(); - } - }); - } + if (!this->browser_object_) return {}; - return {}; + IWebBrowser2* web_browser = nullptr; + if (this->browser_object_->QueryInterface(IID_IWebBrowser2, reinterpret_cast(&web_browser)) || !web_browser) + return {}; + + return std::shared_ptr(web_browser, object_deleter); +} + +std::shared_ptr html_frame::get_dispatch() const +{ + const auto web_browser = this->get_web_browser(); + if (!web_browser) return {}; + + IDispatch* dispatch = nullptr; + if (web_browser->get_Document(&dispatch) || !dispatch) return {}; + + return std::shared_ptr(dispatch, object_deleter); +} + +std::shared_ptr html_frame::get_document() const +{ + const auto dispatch = this->get_dispatch(); + if (!dispatch) return {}; + + IHTMLDocument2* document = nullptr; + if (dispatch->QueryInterface(IID_IHTMLDocument2, reinterpret_cast(&document)) || !document) return {}; + + return std::shared_ptr(document, object_deleter); } void html_frame::initialize(const HWND window) @@ -93,7 +135,7 @@ void html_frame::create_browser() if (browser_object) { browser_object->Close(OLECLOSE_NOSAVE); - browser_object->Release(); + object_deleter(browser_object); } }); } @@ -111,6 +153,22 @@ void html_frame::initialize_browser() this->resize(rect.right, rect.bottom); } +void html_frame::emulate_browser() +{ + utils::nt::module self; + + HKEY key = nullptr; + if (RegOpenKeyExA( + HKEY_CURRENT_USER, R"(SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION)", 0, + KEY_ALL_ACCESS, &key) != ERROR_SUCCESS) return; + + DWORD value = 11001; + const auto name = self.get_name(); + RegSetValueExA(key, name.data(), 0, REG_DWORD, reinterpret_cast(&value), sizeof(value)); + + RegCloseKey(key); +} + void html_frame::resize(const DWORD width, const DWORD height) const { auto web_browser = this->get_web_browser(); @@ -123,20 +181,74 @@ void html_frame::resize(const DWORD width, const DWORD height) const } } -void html_frame::load_url(std::string url) const +bool html_frame::load_url(const std::string& url) const { auto web_browser = this->get_web_browser(); - if (web_browser) + if (!web_browser) return false; + + std::wstring wide_url(url.begin(), url.end()); + + VARIANT my_url; + VariantInit(&my_url); + my_url.vt = VT_BSTR; + my_url.bstrVal = SysAllocString(wide_url.data()); + + const auto _ = gsl::finally([&my_url]() { VariantClear(&my_url); }); + if (!my_url.bstrVal) return false; + + return SUCCEEDED(web_browser->Navigate2(&my_url, nullptr, nullptr, nullptr, nullptr)); +} + +bool html_frame::load_html(const std::string& html) const +{ + if (!this->load_url("about:blank")) return false; + + const auto document = this->get_document(); + if (!document) return false; + + SAFEARRAYBOUND safe_array_bound = {1, 0}; + auto safe_array = SafeArrayCreate(VT_VARIANT, 1, &safe_array_bound); + if (!safe_array) return false; + + const auto _ = gsl::finally([safe_array]() { SafeArrayDestroy(safe_array); }); + + VARIANT* variant = nullptr; + if (SafeArrayAccessData(safe_array, reinterpret_cast(&variant)) || !variant) return false; + + std::wstring wide_html(html.begin(), html.end()); + + variant->vt = VT_BSTR; + variant->bstrVal = SysAllocString(wide_html.data()); + if (!variant->bstrVal) return false; + + document->write(safe_array); + document->close(); + + return true; +} + +int html_frame::get_callback_id(const std::string& name) +{ + for (auto i = 0u; i < this->callbacks_.size(); ++i) { - std::wstring wide_url(url.begin(), url.end()); + if (this->callbacks_[i].first == name) + { + return i; + } + } - VARIANT my_url; - VariantInit(&my_url); - my_url.vt = VT_BSTR; - my_url.bstrVal = SysAllocString(wide_url.data()); + return -1; +} - web_browser->Navigate2(&my_url, nullptr, nullptr, nullptr, nullptr); - - VariantClear(&my_url); +void html_frame::invoke_callback(const int id, callback_params* params) +{ + if (id >= 0 && static_cast(id) < this->callbacks_.size()) + { + this->callbacks_[id].second(params); } } + +void html_frame::register_callback(const std::string& name, const std::function& callback) +{ + this->callbacks_.emplace_back(name, callback); +} diff --git a/src/launcher/html_frame.hpp b/src/launcher/html_frame.hpp index aaee1b7..6ca3a18 100644 --- a/src/launcher/html_frame.hpp +++ b/src/launcher/html_frame.hpp @@ -1,30 +1,49 @@ #pragma once -#include "window.hpp" #include "html/ole_in_place_frame.hpp" #include "html/ole_in_place_site.hpp" #include "html/doc_host_ui_handler.hpp" #include "html/ole_client_site.hpp" +#include "html/html_dispatch.hpp" +#include "html/html_argument.hpp" class html_frame final { public: + class callback_params final + { + public: + callback_params(DISPPARAMS* params, VARIANT* res); + + std::vector arguments; + html_argument result; + }; + html_frame(); ~html_frame(); void initialize(const HWND window); void resize(DWORD width, DWORD height) const; - void load_url(std::string url) const; + bool load_url(const std::string& url) const; + bool load_html(const std::string& html) const; HWND get_window() const; std::shared_ptr get_browser_object() const; std::shared_ptr get_web_browser() const; + std::shared_ptr get_dispatch() const; + std::shared_ptr get_document() const; ole_in_place_frame* get_in_place_frame(); ole_in_place_site* get_in_place_site(); doc_host_ui_handler* get_ui_handler(); ole_client_site* get_client_site(); + html_dispatch* get_html_dispatch(); + + int get_callback_id(const std::string& name); + void invoke_callback(int id, callback_params* params); + + void register_callback(const std::string& name, const std::function& callback); private: HWND window_ = nullptr; @@ -34,7 +53,13 @@ private: ole_in_place_site in_place_site_; doc_host_ui_handler ui_handler_; ole_client_site client_site_; + html_dispatch html_dispatch_; + + std::vector>> callbacks_; void create_browser(); void initialize_browser(); + static void emulate_browser(); + + static void object_deleter(IUnknown* object); }; diff --git a/src/launcher/launcher.cpp b/src/launcher/launcher.cpp index 34b402f..9338726 100644 --- a/src/launcher/launcher.cpp +++ b/src/launcher/launcher.cpp @@ -1,14 +1,29 @@ #include #include "launcher.hpp" #include "html_frame.hpp" +#include "utils/nt.hpp" launcher::launcher() { this->window_.set_callback(std::bind(&launcher::handler, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); + this->html_frame_.register_callback("selectMode", [this](html_frame::callback_params* params) + { + if(params->arguments.empty()) return; + + const auto param = params->arguments[0]; + if(!param.is_number()) return; + + const auto number = param.get_number(); + if(number == singleplayer || number == multiplayer) + { + this->select_mode(static_cast(number)); + } + }); + this->window_.create("Open-IW5", 615, 300); - this->html_frame_.load_url("https://google.com"); + this->html_frame_.load_html(load_content()); } launcher::mode launcher::run() const @@ -40,3 +55,14 @@ void launcher::select_mode(const mode mode) this->mode_ = mode; this->window_.close(); } + +std::string launcher::load_content() +{ + const auto res = FindResource(::utils::nt::module(), MAKEINTRESOURCE(MAIN_MENU), RT_RCDATA); + if (!res) return {}; + + const auto handle = LoadResource(nullptr, res); + if (!handle) return {}; + + return std::string(LPSTR(LockResource(handle)), SizeofResource(nullptr, res)); +} diff --git a/src/launcher/launcher.hpp b/src/launcher/launcher.hpp index 8b757fe..9f3e880 100644 --- a/src/launcher/launcher.hpp +++ b/src/launcher/launcher.hpp @@ -25,4 +25,6 @@ private: LRESULT handler(const UINT message, const WPARAM w_param, const LPARAM l_param); void select_mode(mode mode); + + static std::string load_content(); }; diff --git a/src/launcher/window.cpp b/src/launcher/window.cpp index f2c1224..06af416 100644 --- a/src/launcher/window.cpp +++ b/src/launcher/window.cpp @@ -27,9 +27,6 @@ void window::create(const std::string& title, const int width, const int height) this->handle_ = CreateWindowExA(NULL, this->wc_.lpszClassName, title.data(), (WS_OVERLAPPEDWINDOW | WS_VISIBLE) & ~(WS_THICKFRAME | WS_MAXIMIZEBOX), x, y, width, height, nullptr, nullptr, this->wc_.hInstance, this); - - ShowWindow(this->handle_, SW_SHOW); - UpdateWindow(this->handle_); } window::~window() @@ -50,10 +47,12 @@ void window::close() void window::run() const { MSG msg; - while (this->handle_ && IsWindow(*this) && GetMessage(&msg, nullptr, 0, 0)) + while (GetMessage(&msg, nullptr, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); + + //if(!this->handle_) break; } } diff --git a/src/resource.hpp b/src/resource.hpp index bbb6e8b..48a8b97 100644 --- a/src/resource.hpp +++ b/src/resource.hpp @@ -1,15 +1,14 @@ #pragma once -#define IMAGE_SP 300 -#define IMAGE_MP 301 -#define BINARY_SP 302 -#define BINARY_MP 303 +#define MAIN_MENU 300 +#define BINARY_SP 301 +#define BINARY_MP 302 -#define DW_HEATMAP 304 -#define DW_MOTD 305 -#define DW_IMG 306 -#define DW_WAD 307 -#define DW_PLAYLIST 308 -#define DW_CONFIG 309 -#define DW_IOTD_TXT 310 -#define DW_IOTD_IMG 311 +#define DW_HEATMAP 303 +#define DW_MOTD 304 +#define DW_IMG 305 +#define DW_WAD 306 +#define DW_PLAYLIST 307 +#define DW_CONFIG 308 +#define DW_IOTD_TXT 309 +#define DW_IOTD_IMG 310 diff --git a/src/resource.rc b/src/resource.rc index 3840c65..dd37b6c 100644 --- a/src/resource.rc +++ b/src/resource.rc @@ -83,8 +83,8 @@ END // 102 ICON "resources/icon.ico" -IMAGE_SP BITMAP "resources/singleplayer.bmp" -IMAGE_MP BITMAP "resources/multiplayer.bmp" + +MAIN_MENU RCDATA "resources/main.html" BINARY_SP RCDATA "resources/iw5sp.exe.diff" BINARY_MP RCDATA "resources/iw5mp.exe.diff" diff --git a/src/resources/main.html b/src/resources/main.html new file mode 100644 index 0000000..bd88f2f --- /dev/null +++ b/src/resources/main.html @@ -0,0 +1,83 @@ + + + + + + + + Open-IW5 + + + + + +
+
+ +
+ +
+ +
+
+ + + + + \ No newline at end of file diff --git a/src/resources/multiplayer.bmp b/src/resources/multiplayer.bmp deleted file mode 100644 index 63a99d37028f3609b822e07c5e27ae7197f07922..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172854 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%0DZHKUkm1%W0{MYu7N$zq@|@+I1R& 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 diff --git a/src/resources/singleplayer.bmp b/src/resources/singleplayer.bmp deleted file mode 100644 index 440e3b8f988f62a8f3172786f90370d7ffd82f1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172854 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 S(!j7$VLUf$*Qjv6z4~9;gm9Vw From d8d87d3f1046cf7f4d7fd6f8540251513f57c7c2 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sat, 5 Jan 2019 18:58:29 +0100 Subject: [PATCH 5/7] Update launcher --- src/launcher/html_frame.cpp | 12 +++++---- src/launcher/html_frame.hpp | 2 +- src/resources/main.html | 54 +++++++++++++++++++++++++------------ 3 files changed, 45 insertions(+), 23 deletions(-) diff --git a/src/launcher/html_frame.cpp b/src/launcher/html_frame.cpp index db45462..f64ce90 100644 --- a/src/launcher/html_frame.cpp +++ b/src/launcher/html_frame.cpp @@ -19,7 +19,8 @@ html_frame::html_frame() : in_place_frame_(this), in_place_site_(this), ui_handl throw std::runtime_error("Unable to initialize the OLE library"); } - this->emulate_browser(); + set_browser_feature("FEATURE_BROWSER_EMULATION", 11000); + set_browser_feature("FEATURE_GPU_RENDERING", 1); } html_frame::~html_frame() @@ -153,16 +154,17 @@ void html_frame::initialize_browser() this->resize(rect.right, rect.bottom); } -void html_frame::emulate_browser() +void html_frame::set_browser_feature(const std::string& feature, DWORD value) { utils::nt::module self; + std::string registry_path = R"(SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\)" + feature; HKEY key = nullptr; if (RegOpenKeyExA( - HKEY_CURRENT_USER, R"(SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION)", 0, - KEY_ALL_ACCESS, &key) != ERROR_SUCCESS) return; + HKEY_CURRENT_USER, registry_path.data(), 0, + KEY_ALL_ACCESS, &key) != ERROR_SUCCESS) + return; - DWORD value = 11001; const auto name = self.get_name(); RegSetValueExA(key, name.data(), 0, REG_DWORD, reinterpret_cast(&value), sizeof(value)); diff --git a/src/launcher/html_frame.hpp b/src/launcher/html_frame.hpp index 6ca3a18..fcb2cc8 100644 --- a/src/launcher/html_frame.hpp +++ b/src/launcher/html_frame.hpp @@ -59,7 +59,7 @@ private: void create_browser(); void initialize_browser(); - static void emulate_browser(); + static void set_browser_feature(const std::string& feature, DWORD value); static void object_deleter(IUnknown* object); }; diff --git a/src/resources/main.html b/src/resources/main.html index bd88f2f..873ce6e 100644 --- a/src/resources/main.html +++ b/src/resources/main.html @@ -3,11 +3,16 @@ - Open-IW5
-
- + Singleplayer +
-
- + Multiplayer +