在QT应用程序中使用Windows 10屏幕键盘

7
我正在尝试为使用QT/C++开发的应用程序打开Windows屏幕键盘。我目前有一个自定义的屏幕键盘,但在所有屏幕尺寸下都不太好看,因此我想使用Windows本机的键盘。我希望在文本框上有输入焦点时自动弹出键盘。我对C++很熟悉,但是对QT还不太了解。我查看了一些类似的问题,但似乎这些解决方案并没有多大帮助。
编辑:以下解决方案无法打开键盘。它们编译没有错误,但实际上并没有打开osk。
void MainWindow::on_Button_released()
{
    ui->Button->setChecked(true);

    //Attempt 1
    //ShellExecute( NULL, NULL, L"osk.exe", NULL, NULL, SW_SHOW );

    //Attempt 2
    /* QObject *parent;
         QString program = "./osk.exe";
         QStringList arguments;
         //arguments << "-b" << "-t" << "input.txt";

         QProcess *myProcess = new QProcess(parent);
         myProcess->start(program);//, arguments);
    */

    //Attempt 3
    /* QProcess *process = new QProcess(this);
    QString file = QDir::homepath + "/tabtip.exe";
    process->start(file);
    */

    //Attempt 4
    /* 
    QProcess::execute ("start C:\\Windows\\System32\\osk.exe");
    */


    //Attempt 5
    system ("start C:\\Windows\\System32\\osk.exe");

}

第五次尝试出现了一个错误,详细说明文件找不到,并建议检查是否已正确指定路径。我已经验证了路径,osk.exe可以很好地运行,但无法从我的应用程序中执行。


我真的很惊讶这个问题被搁置了。除了需要一些小的澄清,它在我看来似乎完全没问题。 - Paul Sanders
1
我并不感到惊讶……这里很多人倾向于尽可能地摆脱问题而不是回答它们。正因为这个原因,我只在万不得已的情况下使用这个网站。 - Kristina Gauthier
编辑您的问题(只需进行微小的编辑即可)。这将引起那些有权重新打开它的人的注意。我的编辑(作为第三方)没有这种效果。顺便说一下,我已经点赞了。我相信您不是唯一想要这样做的人。 - Paul Sanders
已解决您启动“osk”的问题 - 请参见下文。 - Paul Sanders
1个回答

5

要显示它,只需启动osk.exe

要摆脱它(*)(警告 - 不受文档支持的行为):

HANDLE hWnd = FindWindowW (L"OSKMainClass", NULL);
if (hWnd)
{
     PostMessage (hWnd, WM_SYSCOMMAND, SC_CLOSE);
  // Or if you prefer:
  // PostMessage (hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);
}

我知道这个在Windows 10上可以运行,可能可以追溯到Windows 7。
(*) 我感谢@zett42提供的信息(但我要拿到这份荣誉:)
编辑:我注意到启动OSK需要一些技巧。您可以按照以下方式操作:
#include <shellapi.h>

void *was;
Wow64DisableWow64FsRedirection (&was);
ShellExecuteA (NULL, "open", "osk.exe", NULL, NULL, SW_SHOWNORMAL);
Wow64RevertWow64FsRedirection (was);
Wow64... 调用仅在32位应用程序中需要,并且您需要链接 shell32.lib

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接