C++ Win32 侦听全局键绑定
C++ Win32 Listen for global keybinds
我正在尝试在我的C++/Qt应用程序中实现Windows上的全局热键。我使用了 RegisterHotKey,它出人意料地有效,我可以看到按下组合会触发我的事件,但由于我不知道任何其他方式,我只使用了一个循环,它现在阻止了我的窗口并阻止它出现。
你可以在下面找到我的代码。如何收听此组合?当然必须有另一种方式。
void set_win32_keys(MainWindow *mwin) {
HWND main_hwnd = (HWND)mwin->winId();
RegisterHotKey(main_hwnd, 2, MOD_CONTROL | MOD_SHIFT, 0x32 /*2 key*/);
MSG *msg;
msg = new MSG();
BOOL b_ret;
while ((b_ret = GetMessage(msg, main_hwnd, 0, 0)) != 0) {
if (b_ret == -1) {
qDebug() << "Error";
} else {
if (msg->message == WM_HOTKEY) {
mwin->new_screenshot();
qDebug() << msg;
}
}
}
}
无耻的插件:我为Qt编写了一个库,它以跨平台的方式提供全局热键 - 并允许使用例如QKeySequence
来创建热键。它允许您使用QKeySequenceEdit
让用户输入自己的快捷方式:
https://github.com/Skycoder42/QHotkey
例:
//MainWindow constructor:
QHotkey *hotkey = new QHotkey(Qt::Key_2, Qt::ControlModifier | Qt::ShiftModifier, true, this);
connect(hotkey, &QHotkey::activated, this, &MainWindow::new_screenshot);
就是这样!希望对你有帮助
如何收听绑定到应用程序主窗口的系统热键?
许多系统事件可以在主窗口本机事件处理程序中捕获。原作者帖子实际上绑定到主窗口。下面应处理请求的消息:
class MainWindow : public QMainWindow
{
// ... snip ...
bool nativeEvent(const QByteArray& eventType, void* message, long* result) override;
// ... snip ...
};
bool MainWindow::nativeEvent(const QByteArray& eventType, void* message, long* result)
{
MSG* pMsg = reinterpret_cast<MSG*>(message);
if (pMsg->message == WM_HOTKEY)
{
// process pMsg->wParam / lParam etc.
// the intended action
this->new_screenshot();
}
// call the parent, could be QWidget::nativeEvent
return QMainWidow::nativeEvent(eventType, message, result);
}
因为假设mwin
有QMainWindow*
:
HWND main_hwnd = (HWND)mwin->winId();
RegisterHotKey(main_hwnd, 2, MOD_CONTROL | MOD_SHIFT, 0x32 /*2 key*/);
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 在基于范围的for循环中使用结构化绑定声明
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 视觉studo 2019中的漫画和静态/动态绑定
- 将自由函数绑定为类成员函数
- 将常量指针引用绑定到非常量指针
- 在派生类中绑定非静态模板化成员函数
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 在 openGL 中多次绑定缓冲区
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 使用结构化绑定'Reflection'
- 为什么 std::绑定错误参数可以成功?
- 如何绑定 C++ gRPC 客户端的网络接口
- 在 openmp 中,omp_get_thread_num是否绑定到物理线程?
- C++绑定(已弃用)
- 如何使用OpenCL C 绑定来获得最大的全局工作大小
- C ++实现全局开关/标志以控制程序行为的最佳方法,而无需将类绑定到公共点
- C++ Win32 侦听全局键绑定