我有一项服务需要运行一个应用程序(我们称之为 X),该应用程序实际上使用 Excel 自动化。
自动化 Excel 时,应用程序 X 通常会让 Excel 显示一个对话框。对话框显示的内容和原因并不重要,不幸的是,这超出了我的控制范围。
我只是希望能够在 Excel 中关闭该对话框。
当代码不作为服务运行时,这当然很容易完成。问题是在枚举窗口以确定对话框是否启动时,任何 win32 窗口调用都会返回 0 作为句柄。我理解为什么会这样,因为服务是独立运行的,并且预期结果为 0。
该服务也不可能在启用了交互式桌面的本地系统下运行。
我希望在 Excel 进程的线程上使用 GetThreadDesktop,然后打开该桌面以枚举这些窗口,但是从服务运行时该 api 也返回 0。
有很多关于此的问题,但大多数是关于希望显示来自服务的对话框以供用户交互。我不想那样做。只需找到并关闭一个对话框。
是否有人发现了一个聪明的解决方法来枚举窗口并返回标题?
笔记:
- 应用程序 X 不在我的控制范围内。
- 我知道在非交互式环境中不支持办公自动化。
- 无论如何,我都不想与登录用户的桌面进行交互。