# Sending hotkeys to browser dock



## alorimer (Aug 23, 2021)

Hi all,

I'm looking for a method to send keypresses to a browser dock when it's not focused. I have an HTTP interface in a browser dock which I would like to control with keyboard shortcuts even when the dock isn't focused. Ideally this would all be done from a Python script, but it looks like that will need work on the API to make it possible.

Some context: I have written a Python program to control a PowerPoint slideshow with an HTTP/WebSocket interface. The intention is that I can add a browser dock in OBS to show the locally-hosted HTTP interface and control the slideshow from within OBS. This works fine, and in fact I've been using this system for about 6 months. However, the keyboard shortcuts I implemented in the interface only work when the browser dock is focused in OBS, and as soon as I click out of the dock the keyboard shortcuts don't work (see Shortcuts / hotkeys for online web docks).

To get around this, I have been using a separate Python script in OBS which takes in hotkey events and sends commands to the backend directly over WebSocket. This works alright, but I'd like the hotkeys to be able to control over HTTP interface directly, rather than running both the HTTP client and the OBS script in parallel. 

The simplest way to fix this seems to be a script which registers hotkeys with OBS as usual, and when a certain key is pressed, it calls a method on the browser dock to send a key, like these snippets for browser sources which use `send_hotkey_to_browser()`: [1] [2]. However, no such API has been written for browser docks as far as I can tell, and I'm having trouble working out exactly how I would add this to the source.

Another option I thought of is somehow using the CEF devtools (activated by the `--remote-debugging-port=...` argument) to send input, since this could easily be manipulated with something like selenium. But I can't see any easy way to enable the devtools at runtime.

Any ideas?


----------



## lucaw83 (Oct 9, 2021)

Hey @alorimer
Did you find a solution for this?
I added a teleprompter remote control as a browser dock that already has some keyboard shortcuts (https://github.com/manifestinteractive/teleprompter/tree/v1.2.0), but they don't work in the browser dock. It would be great if I could set hotkeys in OBS.
Thank you!


----------



## alorimer (Oct 10, 2021)

lucaw83 said:


> Did you find a solution for this?


No, not yet. Here is the Python script I've been using in case you're interested - https://git.lorimer.id.au/ppt-control.git/blob/HEAD:/ppt_control/ppt_control_obs.py. This could easily be adapted to send GET requests or something else. However, it looks like the teleprompter you're using is pure JS with no server-side component so that probably won't be much help to you.

I've just had another look at the OBS browser dock implementation and it actually should be pretty easy to add a `BrowserDock::SendKeyClick` function into browser-panel.cpp. The function for browser sources in obs-browser-source.cpp can probably be copied almost verbatim, since both use the underlying `CefBrowser` which has a convenient `SendKeyEvent` method (actually it's the cef host that has this method, but I think that's abstracted away).

When I've got more time I'll try and implement that function and the corresponding API in libobs, and hopefully make a pull request. The next step might be to add a feature which redirects keypresses from the interface to browser docks, although I'm not quite sure how the logic of that would work. At least once there's a function and API for it we can use a Python/Lua script to take in hotkeys from OBS and send them to the browser dock.


----------



## lucaw83 (Oct 11, 2021)

Thank you @alorimer!
I just found this plugin that is using a lua script to handover hotkeys to a javascript: https://obsproject.com/forum/resources/animated-lower-thirds-with-dockable-control-panel.1057/
Unfortunaltey I'm not an engineer, but maybe I can reproduce it... I'll keep you posted :-)


----------



## alorimer (Oct 11, 2021)

lucaw83 said:


> Free - Animated Lower Thirds with Dockable Control Panel
> 
> 
> Animated Lower Thirds Animated Lower Thirds with dockable Control Panel - OBS Tool  Description With this tool you can use a control panel to add and change your own lower thirds on the fly. Feel free to customize. Basic knowledge of HTML...
> ...


I just had a look... that is some of the most hacky and inefficient code I have ever seen. It's literally writing to disk every time you press a hotkey, and the file is reloaded by the main JS every 200 ms. At least load the file as a text file and parse it yourself rather than interpreting a whole JS file 5 times a second!

Feel free to have a go, but personally I wouldn't even try. It's impossible to make this approach ever work efficiently and reliably.


----------

