rjo*_*don 5 windows com vba ole powerpoint-2013
我创建 PowerPoint 的 OLE 实例并向其发送命令:
程序ExportSlide(const SlideIndex : Integer);
无功
ppt:变体;
开始
ppt := GetActiveOleObject('Powerpoint.Application');
ppt.ActivePresentation.Slides.Item(SlideIndex).Export('c:\test.png', 'PNG', 640, 480);
ppt := 未分配;
结尾;
此代码适用于所有 PowerPoint 版本(2000、2002、2003、2007、2010)。
但是 PowerPoint 2013 有时会失去焦点。我们无法再使用键盘更改幻灯片。我们必须点击全屏幻灯片才能恢复焦点。
评论:这是 PowerPoint 2013 中的官方错误吗?
答案:任何修复或解决方法?
作为解决方法,请尝试使用ActivateonApplication和SlideShowWindow:
procedure ExportSlide(const SlideIndex : Integer);
var
ppt : Variant;
begin
ppt = GetActiveOleObject('Powerpoint.Application');
ppt.Activate();
ppt.ActivePresentation.Slides.Item(SlideIndex).Export('c:\test.png', 'PNG', 640, 480);
ppt.ActivePresentation.SlideShowWindow.Activate();
ppt := Unassigned;
end;
Run Code Online (Sandbox Code Playgroud)
如果这没有帮助,您应该能够采用ppt.HWNDor (这是原始 Windows 句柄)并通过/ppt.ActivePresentation.SlideShowWindow.HWND强制将焦点移至它,如我在此处所述。AttachThreadInputSetForegroundWindow
根据评论更新Activate,该方法没有解决问题,但AttachThreadInput/SetForegroundWindow显然可以解决问题。链接答案中的代码会覆盖 Windows 策略,防止当前本身不具有焦点的进程进行焦点操作。这是通过将调用进程(正在执行自动化的进程)、正在自动化的进程 (PowerPoint) 和当前具有焦点的进程(可能与其他两个进程不同)的线程输入队列附加在一起来实现的。
| 归档时间: |
|
| 查看次数: |
647 次 |
| 最近记录: |