gpt4 book ai didi

c++ - Win32 SetForegroundWindow 不可靠

转载 作者:IT老高 更新时间:2023-10-28 22:36:58 27 4
gpt4 key购买 nike

我有一系列相当复杂的应用程序,这些应用程序依赖于在前台切换应用程序的能力。

我的问题是,在前台切换应用程序每 5 或 6 次,它根本无法使应用程序前进。 GetLastError 不报告任何问题。我经常看到正确的应用程序在前台闪烁片刻,然后之前的应用程序就可见了。

我有一个我有源代码的管理器应用程序,它产生并控制了大约 4 个我没有源代码的应用程序。它产生/控制的应用程序之一也是产生/控制大约 5 个应用程序的管理器。

这是一种信息亭设计,因此用户甚至没有键盘或鼠标,只有一个触摸屏。

我已经尝试了 Win32 调用的每一种组合来控制它们,我只是没有想法。

我的第一次尝试是:

SetWindowPos(hApp, HWND_TOPMOST, NULL, NULL, NULL, NULL, SWP_NOMOVE | SWP_NOSIZE);
SetWindowPos(hApp, HWND_NOTOPMOST, NULL, NULL, NULL, NULL, SWP_NOMOVE | SWP_NOSIZE);

我的第二次尝试是:

SetForegroundWindow(hApp);
SetActiveWindow(hApp);
SetFocus(hApp);

我的第三次尝试: DWORD dwThreadID = GetWindowThreadProcessId(hApp, NULL); AttachThreadInput(dwThreadID, GetCurrentThreadId(), true);

SetForegroundWindow(hApp);
SetActiveWindow(hApp);
SetFocus(hApp);

AttachThreadInput( dwThreadID, GetCurrentThreadId(), false);

我的第四次尝试:

DWORD dwThreadID = GetWindowThreadProcessId(hApp, NULL);
AttachThreadInput( dwThreadID, GetCurrentThreadId(), true);

SetWindowPos(hApp, HWND_TOPMOST, NULL, NULL, NULL, NULL, SWP_NOMOVE | SWP_NOSIZE);
SetWindowPos(hApp, HWND_NOTOPMOST, NULL, NULL, NULL, NULL, SWP_NOMOVE | SWP_NOSIZE);

SetForegroundWindow(hApp);
SetActiveWindow(hApp);
SetFocus(hApp);

AttachThreadInput( dwThreadID, GetCurrentThreadId(), false);

在窗口切换方面,我觉得我错过了一个重要的陷阱。我知道只有前台进程可以切换窗口,但是当我的主管理器程序正在生成并启动我需要控制的所有其他进程时,我觉得它应该能够移动这些窗口。任何建议或意见表示赞赏。

最佳答案

我遇到了同样的问题,我不想弄乱线程。在实验中,我观察到一个简单的技巧,可以让 SetForegroundWindow() 以预期的方式工作。这是我所做的:

  1. 如果窗口尚未最小化,则将其最小化
  2. 恢复最小化的窗口
  3. 调用 SetForegroundWindow(),你的窗口会在顶部

关于c++ - Win32 SetForegroundWindow 不可靠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3772233/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com