这是利用AHK实现一键调整Word中所有图片的大小,方便批量打印图片。
;-----------------------------------------
; 一键调整Word中所有图片的大小 By FeiYue
;
; 用法:为了方便图片打印,可以先统一调整大小,再手动微调旋转
;-----------------------------------------
; 热键左Win键启动,第一次按热键需先激活Word或者WPS
LWin::
SetBatchLines, -1
; 获取COM对象,图片类型为InlineShapes,1cm等于28.35px
doc:=Word_Get("").ActiveDocument, cm:=28.35
Loop % doc.InlineShapes.Count
{
r:=doc.InlineShapes(A_Index), r.LockAspectRatio:=0
; 每一页放两张图片,左右边距最大3cm,上下边距最大2cm
r.Width := 15 * cm, r.Height := 10 * cm
}
MsgBox, 4096,, 执行完毕!, 1
return
;======== 下面是函数 ========
;-- 获取Word窗口的COM对象
Word_Get(WinTitle="Microsoft Word")
{
static obj
Try
if (obj.Version)
return obj
return obj:=Office_Get(WinTitle)
}
;-- 获取Excel窗口的COM对象
Excel_Get(WinTitle="Microsoft Excel")
{
static obj
Try
if (obj.Version)
return obj
return obj:=Office_Get(WinTitle)
}
;-- 获取PowerPoint窗口的COM对象
PowerPoint_Get(WinTitle="Microsoft PowerPoint")
{
static obj
Try
if (obj.Version)
return obj
return obj:=Office_Get(WinTitle)
}
;-- 获取所有Office窗口的COM对象 By FeiYue
Office_Get(WinTitle="")
{
static h:=DllCall("LoadLibrary", "Str","oleacc", "Ptr")
SetTitleMatchMode, 2
WinGet, idlist, List, % WinTitle ? WinTitle : "A"
Loop, % idlist
{
id:=idlist%A_Index%
WinGet, ControlList, ControlListHwnd, ahk_id %id%
For i,hwnd in StrSplit(ControlList, "`n")
{
ControlGetPos, x, y, w, h,, ahk_id %hwnd%
if (w>=100 and h>=100)
and DllCall("oleacc\AccessibleObjectFromWindow", "Ptr", hwnd
, "UInt", 0xFFFFFFF0, "Ptr", 0*(VarSetCapacity(IID,16)
+NumPut(0x0000000000020400,IID,"Int64")
+NumPut(0x46000000000000C0,IID,8,"Int64"))+&IID, "Ptr*", pacc)=0
{
Acc:=ComObject(9, pacc, 1)
Try
if (Acc.Application.Version)
return Acc.Application
}
}
}
MsgBox, 4096,, Error: Can't Get Object From ACC !
Exit
}