问题5.5-Windows API无法正常工作
Qt 5.5 - Windows API not Working as usual
我在Windows 10上使用Qt 5.5,我想在前景中打开一个QWidget
,并想聚焦LineEdit
,就像Windows上的RUN(WIN+R)一样。问题是应用程序在后台运行,我只有一个键盘记录程序来注册快捷方式(LCTRL+LWIN+T)来切换窗口(显示+焦点/隐藏)。
如果按下快捷键,我将执行以下代码:
if(this->isHidden()){
this->show();
//Windows API Methods:
SetActiveWindow((HWND) this->winId());
SetForegroundWindow((HWND) this->winId());
SetFocus((HWND) this->winId());
this->_edit->setFocus();
qDebug() << "[OUT][DONT WORKING] Window shoud be shown and focused";
}else{
this->hide();
qDebug() << "[OUT][WORKING] Window shoud be hidden";
}
如果我现在按LCTRL+LWIN+T,它会在后台打开窗口,而这不是我想要的。有人能解释为什么这不起作用吗?如果窗口在前台打开,并且文本框以为焦点,该怎么办?我不想设置标志StayAlwaysOnTop
,因为这样文本字段仍然没有聚焦。
我希望你能帮助我。非常非常感谢!
[已解决]
这是不可能的,因为要设置前景窗口,我必须获得当前的输入,我做了以下操作:
施工单位:
HWND wId = (HWND) winId();
DWORD pId = GetWindowThreadProcessId(wId, NULL);
AllowSetForegroundWindow(pId);
onShortcutPressed:
this->show();
HWND wId = (HWND) winId();
DWORD pId = GetWindowThreadProcessId(wId, NULL);
DWORD fpId = GetWindowThreadProcessId(GetForegroundWindow(), NULL);
//Attach Thread to get the Input - i am now allowed to set the Foreground window!
AttachThreadInput(fpId, pId, true);
SetActiveWindow(wId);
SetForegroundWindow(wId);
SetFocus(wId);
AttachThreadInput(fpId, pId, false);
现在开始工作了!
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 为什么STD ::计数将常数传递给Lambda,而不是在弦上工作时而不是字符
- C++程序已停止工作-求解常微分方程