gpt4 book ai didi

windows - PowerPoint 2013 在导出 OLE VBA 命令后失去焦点

转载 作者:可可西里 更新时间:2023-11-01 14:14:40 24 4
gpt4 key购买 nike

我创建了一个 PowerPoint 的 OLE 实例并向它发送命令:

procedure ExportSlide(const SlideIndex : Integer);var  ppt : Variant;begin  ppt := GetActiveOleObject('Powerpoint.Application');    ppt.ActivePresentation.Slides.Item(SlideIndex).Export('c:\test.png', 'PNG', 640, 480);  ppt := Unassigned;end;

此代码适用于所有 PowerPoint 版本(2000、2002、2003、2007、2010)。

但是 PowerPoint 2013 有时会失去焦点。我们不能再使用键盘更改幻灯片。我们必须点击全屏幻灯片才能恢复焦点。

评论:这是PowerPoint 2013中的官方错误吗?
答案:任何修复或解决方法?

最佳答案

作为解决方法,尝试在 ApplicationSlideShowWindow 上使用 Activate:

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;

如果这没有帮助,您应该能够使用 ppt.HWNDppt.ActivePresentation.SlideShowWindow.HWND(这是原始 Windows 句柄)和如我所述 here 通过 AttachThreadInput/SetForegroundWindow 强制将焦点放在它上面.

更新 根据评论,Activate方法没有解决问题,但是AttachThreadInput/SetForegroundWindow 一个显然是。来自 linked answer 的代码覆盖了防止当前没有焦点的进程进行焦点操作的 Windows 策略。这是通过将调用进程(执行自动化的进程)、被自动化的进程 (PowerPoint) 和当前具有焦点的进程(可能与其他两个不同)的线程输入队列附加在一起来实现的。

关于windows - PowerPoint 2013 在导出 OLE VBA 命令后失去焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25837000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com