AHK Powerpoint通过快捷方式合并形状



我正在尝试创建AHK脚本,用于在PowerPoint 中合并形状

这个VBA宏运行良好,它采用选定的形状并将它们组合在一起:

Sub mergeShapes()
ActiveWindow.Selection.ShapeRange.mergeShapes msoMergeCombine
End Sub

但当我将脚本放入AHK时,调用会引发类型不匹配错误:

^!m::
WinActivate, ahk_class screenClass ahk_exe POWERPNT.EXE
msoMergeCombine:=2
ppt := ComObjActive("PowerPoint.Application")
ppt.ActiveWindow.Selection.ShapeRange.MergeShapes(msoMergeCombine)
Return
Error:  0x80020005 - Type mismatch.
Specifically: MergeShapes

我将代码放入PowerShell中,以确定可能出现的问题,并发现它也不起作用:

$app = New-Object -ComObject powerpoint.application
$sr = $application.ActiveWindow.Selection.ShapeRange 
$sr.MergeShapes(2)

并得到错误消息:

Exception setting "MergeShapes": Cannot convert the "2" value of type "int" to type "Object".
At line:1 char:1
+ $sr.MergeShapes(2)
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : RuntimeException

好吧,似乎第一个参数必须是Object类型,所以我创建了一个对象并将其传递给方法,看看会发生什么。情况变得更糟:

$obj = New-Object Object
$sr.MergeShapes($obj)
Exception setting "MergeShapes": Cannot convert the "System.Object" value of type "Object" to type "Object".

MergeShapes方法似乎是以某种方式声明的,但当我调用时,我在方法列表中看不到它

$sr | Get-Member -MemberType Method

请建议我如何解决此问题。

以不同的方式调用它可以达到目的:

^!m::
WinActivate, ahk_class screenClass ahk_exe POWERPNT.EXE
ppt := ComObjActive("PowerPoint.Application")
ppt.CommandBars.ExecuteMso("ShapesUnion")
Return
^!f::
WinActivate, ahk_class screenClass ahk_exe POWERPNT.EXE
ppt := ComObjActive("PowerPoint.Application")
ppt.CommandBars.ExecuteMso("ShapesSubtract")
Return

最新更新