我正在尝试为使用QT / C ++开发的应用程序启动Windows屏幕键盘。我目前有一个自定义的屏幕键盘,但它在所有屏幕尺寸上看起来都不是很好,所以我想使用Windows原生屏幕。我想在输入焦点位于文本框时自动启动键盘。我是QT的新手,但不是C ++。我已经检查了一些其他类似的问题,但似乎这些解决方案没有太大帮助。
编辑:以下解决方案无法启动键盘。他们编译时没有错误,但他们实际上没有提出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");
}
**尝试5特意给出一个错误,详细说明找不到该文件,并建议检查是否指定了正确的路径。我已经验证了路径,并且osk.exe运行得很好 - 不是来自我的应用程序。
答案 0 :(得分:3)
要显示它,只需启动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);
只有32位应用才需要Wow64...
次来电,您需要与shell32.lib
进行关联。