控制的window8, window8.1,window10系统中的虚拟键盘。通过分析虚拟键盘,发现TabTip.exe就是虚拟键盘服务,所以只要启动这个程序,就实现了键盘的显示。该功能中也实现了通过active插件来控制键盘,但在实际测试中发现,该控制不是很精准。

待改进,通过active插件控制键盘,如果你有好的方法,欢迎拍砖!

头文件 VirtualKeyboard.h:

#ifndef VIRTUALKEYBOARD_H
#define VIRTUALKEYBOARD_H#include <QAxObject>class VirtualKeyboard
{
public:/// Shows on-screen keyboard. Implementation is different for each platform./// @warning Currently works only in windows 8,win8.1 win10static void show();static void close();private:static void showWindowsKeyboard();static void showTapTip();static void showByCom();static bool isVisible(int style);static bool isOpened();static bool closeWindowKeyboard();static QAxObject *kbaxObject();//    static const int GWL_STYLE = -16;//    static const int WM_SYSCOMMAND = 0x0112;//    static const int SC_CLOSE = 0xF060;//    static const int WS_DISABLED = 0x08000000;//    static const int WS_VISIBLE = 0x10000000;static QAxObject *axObject;class VkbAxGarbage{~VkbAxGarbage() {if (VirtualKeyboard::axObject != NULL) {delete VirtualKeyboard::axObject;}}};static VkbAxGarbage vkbAxGarbage;
};#endif // VIRTUALKEYBOARD_H

代码实现VirtualKeyboard.cpp

#include "virtualkeyboard.h"
#include <QtCore/QSysInfo>
#include <QtCore/QFileInfo>
#include <QtCore/QUrl>
#include <QDesktopServices>
#include <QMessageBox>
#include <QVariant>
#include <QDebug>
#include <QThread>
#include <QUuid>#ifdef Q_OS_WIN#include <qt_windows.h>struct ITipInvocation //: public IUnknown
{virtual HRESULT STDMETHODCALLTYPE Toggle(HWND hwnd) = 0;
};#endifQAxObject *VirtualKeyboard::axObject = NULL;//new QAxObject("{4ce576fa-83dc-4f88-951c-9d0782b4e376}");void VirtualKeyboard::show()
{
#ifdef Q_OS_WINswitch (QSysInfo::windowsVersion()) {case QSysInfo::WV_WINDOWS8:case QSysInfo::WV_WINDOWS8_1:case QSysInfo::WV_WINDOWS10:showWindowsKeyboard();break;default:break;}
#endif
}void VirtualKeyboard::close()
{
#ifdef Q_OS_WINswitch (QSysInfo::windowsVersion()) {case QSysInfo::WV_WINDOWS8:case QSysInfo::WV_WINDOWS8_1:case QSysInfo::WV_WINDOWS10:closeWindowKeyboard();break;default:break;}
#endif
}void VirtualKeyboard::showWindowsKeyboard()
{//if (isOpened()) {//  return;//}//  show every timeshowTapTip();//showByCom();return;//HWND handle = ::FindWindow("IPTIP_Main_Window", NULL);//if (handle > 0 && !kbaxObject()->isNull()) {//    LONG style = ::GetWindowLong(handle, GWL_STYLE);// if (!isVisible(style)) {//      showByCom();//  }//}//else {//  showTapTip();// if (!isOpened()) {//        showByCom();//  }//}
}void VirtualKeyboard::showTapTip()
{static const QString programFilesPath(qgetenv("PROGRAMFILES").replace("\\", "/"));static const QString tabTipPath = QString("%1/Common Files/microsoft shared/ink/TabTip.exe").arg(programFilesPath);if (QFileInfo(tabTipPath).exists()) {QDesktopServices::openUrl(QUrl("file:///" + tabTipPath));}else {const QString windowsDirectoryPath(qgetenv("WINDIR").replace("\\", "/"));const QString oskPath = QString("%1/system32/osk.exe").arg(windowsDirectoryPath);if (QFileInfo(oskPath).exists()) {QDesktopServices::openUrl(QUrl("file:///" + oskPath));}}HWND handle = 0;while ((handle = ::FindWindow("IPTIP_Main_Window", NULL)) <= 0) {QThread::msleep(500);}
}void VirtualKeyboard::showByCom()
{ITipInvocation *tipInvocation = NULL;kbaxObject()->queryInterface(QUuid("37c994e7-432b-4834-a2f7-dce1f13b834b"), (void **)&tipInvocation);if (NULL != tipInvocation) {tipInvocation->Toggle(GetDesktopWindow());}
}bool VirtualKeyboard::isVisible(int style)
{if ((style & WS_DISABLED) != 0) {return false;}if ((style & WS_VISIBLE) != 0) {return true;}return false;
}bool VirtualKeyboard::isOpened()
{HWND handle = ::FindWindow("IPTIP_Main_Window", NULL);if (handle <= 0) {return false;}LONG style = ::GetWindowLong(handle, GWL_STYLE);return isVisible(style);
}bool VirtualKeyboard::closeWindowKeyboard()
{HWND handle = ::FindWindow("IPTIP_Main_Window", NULL);bool active = handle > 0;if (active){// don't check style - just close::SendMessage(handle, WM_SYSCOMMAND, SC_CLOSE, 0);}return active;
}QAxObject *VirtualKeyboard::kbaxObject()
{if (NULL == axObject) {axObject = new QAxObject();if (!axObject->setControl("{4CE576FA-83DC-4f88-951C-9D0782B4E376}")) {QMessageBox::warning(NULL, "keyboard com error", QStringLiteral("虚拟键盘com加载失败"));}}return axObject;
}

控制windows 8,win8.1 win10 虚拟键盘相关推荐

  1. html win10虚拟键盘,五种打开win10虚拟键盘的方法 win10虚拟键盘快捷键

    电脑在使用的过程中,有时会遇到只有鼠标或实体键盘部分按键失灵,或为了体验系统自带的虚拟键盘等情况.此时就需要开启系统的屏幕键盘.屏幕键盘是一个模拟键盘的系统软件,必要的时候可以代替物理键盘Win10做 ...

  2. html win10虚拟键盘,Win10怎么调出虚拟键盘

    Win10怎么调出虚拟键盘,想必大家都遇到过键盘失灵的麻烦,一时之间没有备用键盘,陷入无法打字的困境,这时候win10纯净版系统自带的虚拟键盘就能起到救场或者应急的作用,但win10虚拟键盘如何调出来 ...

  3. html win10虚拟键盘,Win10系统中内置虚拟键盘过大应该如何解决?

    win10系统中虚拟键盘过大怎么办?用过Win10系统的用户都知道,在系统是有内置虚拟键盘的,用来应付简配设备突然坏了的情况.但有用户表示开启的虚拟键盘太大,占据了太多电脑屏幕,将其他应用程序给遮挡住 ...

  4. html win10虚拟键盘,笔记本电脑win10虚拟键盘打开的方法

    win10是微软推出的新一代云操作系统,为用户提供多平台体验!如今,您可以在您的电脑中开启虚拟键盘,使用虚拟键盘轻松实现各种输入. 日常工作生活中,使用电脑时,有时需要开启虚拟键盘,包括"屏 ...

  5. Unity开发win10软件系列问题6: unity调用 win10 虚拟键盘tabtip.exe

    ShowTouchKeyboard():打开 键盘 HideTouchKeyboard():关闭键盘 这个方式打开有个坑:打开虚拟键盘后,没法直接切换输入法,必须先输入一个字母才可以切换. ----- ...

  6. c# 弹出虚拟键盘关闭虚拟键盘(适用win10、win7)学习记录(转载)

    转载自 https://www.cnblogs.com/lizhijian/p/12725782.html c# 弹出虚拟键盘关闭虚拟键盘(适用win10.win7) using System; us ...

  7. windows虚拟键盘透明化小软件(AdjustTouchKeyboardOpacity)(无意发现的好东西)

    今天逛贴吧时发现一个很好用的小软件,名字 叫AdjustTouchKeyboardOpacity. 百度云连接 如果用windows平板的时候被虚拟键盘挡住输入框肯定很郁闷,这个软件可以将其透明化,下 ...

  8. 2021-04-18 c# 弹出虚拟键盘

    转载自 https://blog.csdn.net/qq_36051316/article/details/110951849 亲测可用,把变量TabTipWindowClassName的内容换成你的 ...

  9. WPF开发经验-实现Win10虚拟触摸键盘

    一 引入 项目有个需求,需要实现纯触控操作进行键盘输入.项目部署在Win10系统上,考虑有两种方案来实现. 通过调用Win10自带的触摸键盘来实现: 通过WPF实现一个触摸键盘来实现: 二 调用Win ...

最新文章

  1. Python 之 matplotlib (十四)图中图
  2. 3星|《财经》年刊:各行业专家学者的现状分析与短期预测
  3. The 2014 ACM-ICPC Asia Mudanjiang Regional First Round J
  4. 一、如何创建一个状态栏扩展(火狐插件扩展开发教程)
  5. XMLSpy编写DTD出错:Character 'D' is grammatically unexpected
  6. keepalived主要模块
  7. Tesseract 3 语言数据的训练方法【转】http://blog.csdn.net/dragoo1/article/details/8439373
  8. 开启chrome默认支持ipv6
  9. 批处理文件总结(三)
  10. Hadoop 2.0.0-alpha尝鲜安装和hello world
  11. 数据结构与算法——搜索
  12. java 按照笔画排序_oracle 按照拼音、部首、笔画排序
  13. postgresql linux rpm,postgresql 9.6 rpm包安装 CentOS 7.2 X64
  14. 从入门到入土:基于C语言采用UDP协议实现通信功能的程序
  15. HDU2187 老人是真饿了【贪心】
  16. 哨兵1号(Sentinel-1)与陆地探测1号(L-SAR)对比
  17. 74AHC1G32GW 74系列逻辑芯片
  18. 三阶魔方大中小魔公式_三阶魔方花样公式汇总
  19. JavaScript 数组(二)数组练习
  20. CCPC 合肥站 打铁记

热门文章

  1. 系统架构师论文-论软件架构的选择与应用
  2. 一看就会的Nginx学习教程(千万别告诉其他人),java视频百度云盘
  3. 计算机boot快捷键,求各种电脑进入boot 的方式,一般的电脑快捷键是什么?
  4. ubuntu安装zlib
  5. 使用cv2.imwrite保存的图像是全黑的
  6. python 选座位助手
  7. c++ const 全面总结!
  8. 线上应用遇到了oom killer
  9. 2023年安徽省职业院校技能大赛“网络空间安全” 比赛任务书
  10. 【已解决】Win10 更新失败的问题【错误代码为0x80070003】