struct
_cef_client_t* cef_client = NULL;
PVOID
o_cef_browser_host_create_browser = NULL;
PVOID
o_cef_get_keyboard_handler = NULL;
PVOID
o_cef_on_key_event = NULL;
int
CEF_CALLBACK hook_cef_on_key_event(
struct
_cef_keyboard_handler_t* self,
struct
_cef_browser_t* browser,
const
struct
_cef_key_event_t* event,
cef_event_handle_t os_event) {
if
(event->type == KEYEVENT_KEYUP && event->windows_key_code == 123) {
DbgLog::Log(TEXT(
"[CEF] press: F12"
));
auto
cef_browser_host = browser->get_host(browser);
CefWindowInfo windowInfo{};
CefBrowserSettings settings{};
CefPoint point{};
windowInfo.SetAsPopup(NULL,
"DevTools"
);
cef_browser_host->show_dev_tools(cef_browser_host, &windowInfo, cef_client, &settings, &point);
}
return
reinterpret_cast
<
decltype
(&hook_cef_on_key_event)>(o_cef_on_key_event)
(self, browser, event, os_event);
}
struct
_cef_keyboard_handler_t* CEF_CALLBACK hook_cef_get_keyboard_handler(
struct
_cef_client_t* self) {
auto
keyboard_handler =
reinterpret_cast
<
decltype
(&hook_cef_get_keyboard_handler)>(o_cef_get_keyboard_handler)(self);
if
(keyboard_handler) {
cef_client = self;
o_cef_on_key_event = keyboard_handler->on_key_event;
keyboard_handler->on_key_event = hook_cef_on_key_event;
}
return
keyboard_handler;
}
int
hook_cef_browser_host_create_browser(
const
cef_window_info_t* windowInfo,
struct
_cef_client_t* client,
const
cef_string_t* url,
const
struct
_cef_browser_settings_t* settings,
struct
_cef_request_context_t* request_context){
DbgLog::Log(TEXT(
"[CEF] cef_browser_host_create_browser -- hwnd: %d \r\n"
), windowInfo->window);
o_cef_get_keyboard_handler = client->get_keyboard_handler;
client->get_keyboard_handler = hook_cef_get_keyboard_handler;
DbgLog::Log(TEXT(
"[CEF] hook -> cef_get_keyboard_handler 0x%p -> 0x%p\r\n"
), o_cef_get_keyboard_handler, hook_cef_get_keyboard_handler);
return
reinterpret_cast
<
decltype
(&hook_cef_browser_host_create_browser)>(o_cef_browser_host_create_browser)
(windowInfo, client, url, settings, request_context);
}