您的位置:首页 > 编程语言 > Qt开发

Qt使用Windows Api模拟键盘事件,附Qt::key转windows键值

2017-11-24 14:02 1566 查看
        具体参数说明,参考msdn。

        函数原型

VOID WINAPI keybd_event(
_In_ BYTE      bVk,
_In_ BYTE      bScan,
_In_ DWORD     dwFlags,
_In_ ULONG_PTR dwExtraInfo
);
         使用方法

keybd_event(key, 0x45, KEYEVENTF_EXTENDEDKEY, 0);//按键按下
keybd_event(key, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);//按键松开


        将Qt::key的值转为windows bVk的值,即调用keybd_event需要的键盘值

int translateKeyCode(int key)
{
int k = key;
bool legal = true;
if(k >= Qt::Key_0 && k <= Qt::Key_9)
{
}
else if(k >= Qt::Key_A && k <= Qt::Key_Z)
{
}
else if(k >= Qt::Key_F1 && k <= Qt::Key_F24)
{
k &= 0x000000ff;
k += 0x40;
}
else if(k == Qt::Key_Tab)
{
k = 0x09;
}
else if(k == Qt::Key_Backspace)
{
k = 0x08;
}
else if(k == Qt::Key_Return)
{
k = 0x0d;
}
else if(k <= Qt::Key_Down && k >= Qt::Key_Left)
{
int off = k - Qt::Key_Left;
k = 0x25 + off;
}
else if(k == Qt::Key_Shift)
{
k = 0x10;
}
else if(k == Qt::Key_Control)
{
k = 0x11;
}
else if(k == Qt::Key_Alt)
{
k = 0x12;
}
else if(k == Qt::Key_Meta)
{
k = 0x5b;
}
else if(k == Qt::Key_Insert)
{
k = 0x2d;
}
else if(k == Qt::Key_Delete)
{
k = 0x2e;
}
else if(k == Qt::Key_Home)
{
k = 0x24;
}
else if(k == Qt::Key_End)
{
k = 0x23;
}
else if(k == Qt::Key_PageUp)
{
k = 0x21;
}
else if(k == Qt::Key_Down)
{
k = 0x22;
}
else if(k == Qt::Key_CapsLock)
{
k = 0x14;
}
else if(k == Qt::Key_NumLock)
{
k = 0x90;
}
else if(k == Qt::Key_Space)
{
k = 0x20;
}
else
legal = false;

if(!legal)
return 0;
return k;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: