如何解决如何检查 PowerPoint 中的对话框是否打开?
我有一个使用 Microsoft.Office.Interop.PowerPoint
用 C# 编写的应用程序。此应用程序向用户打开 PowerPoint 演示文稿文件。用户与文件交互。应用一些修改后,用户通过应用提交按钮提交文件。
问题: 当用户修改演示文稿的内容时,例如将文本的字体颜色更改为红色,通过使用对话框并保持对话框打开而不单击“应用”或“确定”按钮,从而通过单击应用程序提交来提交文件按钮,这些对话框完成的更改不会反映在提交的文件中,因此无法跟踪此类更改。
我想提醒用户在点击提交按钮之前关闭任何打开的对话框。
通过检查保存此类文件时的异常,我可以轻松地在 Word 和 excel 文件上执行此操作,因为如果打开任何对话框,Word 和 Excel 会在使用保存方法时抛出异常,如下所示:
try{
document.Save();
}
catch (Exception e){
//Alert user here here
}
但这不适用于 PowerPoint 文件。我尝试了以下方法:
PowerPointApplication application = new Microsoft.Office.Interop.PowerPoint.Application();
Microsoft.Office.Interop.PowerPoint.Presentations presentations = application.Presentations;
Microsoft.Office.Interop.PowerPoint.Presentation presentation =
presentations
.Open(file,WithWindow: Microsoft.Office.Core.MsoTriState.msoTrue,ReadOnly:Microsoft.Office.Core.MsoTriState.msoFalse,Untitled:Microsoft.Office.Core.MsoTriState.msoFalse);
以下是在提交按钮点击事件时触发的:
try
{
presentation.Save();
}
catch (Exception e)
{
//alert user here
}
有没有办法追踪是否有打开的对话框?
解决方法
通常,如果向用户显示任何对话窗口,代码将被阻止,因为对话窗口使用主线程运行。你在代码中使用了多个线程吗?
无论如何,您可以使用 Windows API 函数来检测活动窗口,参见 GetActiveWindow,它检索连接到调用线程的消息队列的活动窗口的窗口句柄。要获得前景窗口的句柄,您可以使用 GetForegroundWindow。要为另一个线程获取消息队列中活动窗口的窗口句柄,请使用 GetGUIThreadInfo。
在检索窗口句柄后,您可以使用 GetWindowText 函数将指定窗口标题栏(如果有的话)的文本复制到缓冲区中。如果指定的窗口是控件,则复制控件的文本。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。