Don't know how it works for scripts. I had that issue with Playtime (C++) and solved it by registering an accelerator_register_t. That makes REAPER call a function of your choice whenever the user presses a key (even if a docked window has focus). That function then calls kbd_translateAccelerator which forwards the key to REAPER main window:
Code:
int forwardKeyToReaper(MSG* msg, accelerator_register_t* ctx) {
if (msg->message == WM_KEYDOWN) {
// Actually don't know if this is necessary in your case
HWND reaperMainWindow = reaper::GetMainHwnd();
msg->hwnd = reaperMainWindow;
KbdSectionInfo* mainInfo = reaper::SectionFromUniqueID(0);
reaper::kbd_translateAccelerator(reaperMainWindow, msg, mainInfo);
}
else {
return 0;
}
}
// Register accelerator register in order to get place in keyboard processing queue
accelerator_register_t* acceleratorRegister = new accelerator_register_t();
acceleratorRegister->isLocal = true;
acceleratorRegister->translateAccel = forwardKeyToReaper;
reaper::plugin_register("accelerator", (void*)acceleratorRegister);
Does anybody know an easier way to achieve that?