小编mic*_*ing的帖子

Win32 SetForegroundWindow不可靠

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

我的问题是,每隔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);
Run Code Online (Sandbox Code Playgroud)

我的第二次尝试是:

SetForegroundWindow(hApp);
SetActiveWindow(hApp);
SetFocus(hApp);
Run Code Online (Sandbox Code Playgroud)

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

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

AttachThreadInput( dwThreadID, GetCurrentThreadId(), false);
Run Code Online (Sandbox Code Playgroud)

我的第四次尝试:

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);
Run Code Online (Sandbox Code Playgroud)

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

c++ winapi

14
推荐指数
2
解决办法
2万
查看次数

标签 统计

c++ ×1

winapi ×1