首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

Qt怎么实现热键呼叫功能

2012-05-21 
Qt如何实现热键呼叫功能我见过一些软件,按一个快捷键可以隐藏这个应用程序,包括系统托盘图标和进程管理器

Qt如何实现热键呼叫功能
我见过一些软件,按一个快捷键可以隐藏这个应用程序,包括系统托盘图标和进程管理器里都看不见它,其实这个时候该应用程序已经在后台运行了。然后按一个快捷键又可以把它重新呼叫出来,让它完全显示。请问这个在Qt中该如何实现呢?请各位高手帮忙解答下。谢谢!

[解决办法]
你可以查看 系统托盘,然后在实现快捷键!!
[解决办法]
请参考QxtGlobalShortcut源码
[解决办法]

探讨

引用:
请参考QxtGlobalShortcut源码

这是啥东西?能给个链接吗?谢谢了。

[解决办法]
#include "threadkey.h"

#include <QApplication>
#include <QDebug>
#include <QKeyEvent>

HHOOK keyHook = NULL;
HHOOK mouseHook = NULL;


LRESULT CALLBACK keyProc(int nCode, WPARAM wParam, LPARAM lParam )
{
//在WH_KEYBOARD_LL模式下lParam 是指向KBDLLHOOKSTRUCT类型地址
KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *)lParam;
if(pkbhs->vkCode == Qt::Key_F12)
{
void unHook();
qApp->quit();
}else if(pkbhs->vkCode == Qt::Key_A)
{
qDebug() << "A";
}
return 0;//返回1表示截取消息不再传递,返回0表示不作处理,消息继续传递
}

//鼠标钩子过程
LRESULT CALLBACK mouseProc(int nCode,WPARAM wParam,LPARAM lParam )
{
return 0;
}

//卸载钩子
void unHook()
{
UnhookWindowsHookEx(keyHook);
UnhookWindowsHookEx(mouseHook);

}

//安装钩子,调用该函数即安装钩子
void setHook()
{
//这两个底层钩子,不要DLL就可以全局
// 底层键盘钩子
keyHook =SetWindowsHookEx( WH_KEYBOARD_LL,keyProc,GetModuleHandle(NULL),0);
// 底层鼠标钩子
mouseHook =SetWindowsHookEx( WH_MOUSE_LL,mouseProc,GetModuleHandle(NULL),0);
}

ThreadKey::ThreadKey(QThread *parent) :
QThread(parent)
{

}

ThreadKey::~ThreadKey()
{

}

void ThreadKey::run()
{
setHook();

this->exec();
}
键盘钩子,可以时刻截取到按键信息。
[解决办法]
不过你用我上面发给你的那个是不能跨平台的,只能在windows上用用。
[解决办法]
然后您将花费一个星期的时间,试图去了解您的应用程序如何从这种新功能获益
[解决办法]
本来这种东西就不是跨平台的,你得针对各个平台分别写代码
正如QxtGlobalShortcut一样
[解决办法]
QT自己并没有这样的功能,这也不是VC的代码,是系统的API。MFC的代码QT是不能调用的。

热点排行