首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从excel启动WPF应用程序,如何将焦点返回到excel

问从excel启动WPF应用程序,如何将焦点返回到excel
EN

Stack Overflow用户
提问于 2016-11-04 16:44:47
回答 1查看 191关注 0票数 0

我在vba中使用Shell命令来启动一个应用程序。然后,我使用WIN32 API挂接应用程序,这样我就可以控制它了。

这一切都很好,但有一个小细节:我想返回焦点到excel仪表板,在那里我有按钮来控制应用程序,在应用程序启动后,我需要点击电子表格,然后才能点击任何按钮。

我尝试过通过AppActivate Application.ActiveWindow.Caption和SetForegroundWindow、SetFocus和WM_IME_SETCONTEXT与WM_IME_NOTIFY一起使用SendMessage,但似乎没有什么效果。我还尝试了worksheet Activate方法和Range Activate方法,但是,在单击按钮之前,我仍然必须单击工作表。

我会认为这是可能的,因为我从excel进程发送消息,我如何激活电子表格?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-05 08:18:14

控制哪些对象可以设置前台窗口的规则没有得到满足,这就是为什么我不能让它开始工作。

系统限制哪些进程可以设置前台窗口。只有当下列条件之一为真时,进程才能设置前台窗口:

  • 这个过程就是前景进程。
  • 进程由前台进程启动。
  • 进程接收到最后一个输入事件。
  • 没有前台进程。
  • 正在调试该进程。
  • 前台进程不是现代应用程序或启动屏幕。
  • 前景未被锁定(请参见LockSetForegroundWindow)。
  • 前台锁定超时已过期(请参阅SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo)。
  • 菜单没有活动。

当用户使用另一个窗口时,应用程序无法将窗口强制到前台。相反,Windows会闪烁窗口的任务栏按钮以通知用户。

在我的例子中,我试图让excel激活它自己的一个窗口,但是,这个衍生的应用程序已经接管了前景焦点,因此excel无法影响前景焦点。解决方案是使用excel hWnd作为参数,从VBA向应用程序发送自定义消息,请求前台焦点。然后,该应用程序可以调用SetForegroundWindow,因为它满足上述第一个条件,所以excel确实是前台焦点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40427837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档