我在vba中使用Shell命令来启动一个应用程序。然后,我使用WIN32 API挂接应用程序,这样我就可以控制它了。
这一切都很好,但有一个小细节:我想返回焦点到excel仪表板,在那里我有按钮来控制应用程序,在应用程序启动后,我需要点击电子表格,然后才能点击任何按钮。
我尝试过通过AppActivate Application.ActiveWindow.Caption和SetForegroundWindow、SetFocus和WM_IME_SETCONTEXT与WM_IME_NOTIFY一起使用SendMessage,但似乎没有什么效果。我还尝试了worksheet Activate方法和Range Activate方法,但是,在单击按钮之前,我仍然必须单击工作表。
我会认为这是可能的,因为我从excel进程发送消息,我如何激活电子表格?
发布于 2016-11-05 08:18:14
控制哪些对象可以设置前台窗口的规则没有得到满足,这就是为什么我不能让它开始工作。
系统限制哪些进程可以设置前台窗口。只有当下列条件之一为真时,进程才能设置前台窗口:
当用户使用另一个窗口时,应用程序无法将窗口强制到前台。相反,Windows会闪烁窗口的任务栏按钮以通知用户。
在我的例子中,我试图让excel激活它自己的一个窗口,但是,这个衍生的应用程序已经接管了前景焦点,因此excel无法影响前景焦点。解决方案是使用excel hWnd作为参数,从VBA向应用程序发送自定义消息,请求前台焦点。然后,该应用程序可以调用SetForegroundWindow,因为它满足上述第一个条件,所以excel确实是前台焦点。
https://stackoverflow.com/questions/40427837
复制相似问题