如何使用Sikuli自动截取窗口截图?

1 投票
2 回答
10270 浏览
提问于 2025-04-17 17:14

这里有个简单的问题:我想用Sikuli在Mac上截取一个窗口的屏幕,这个操作是按下CMD+SHIFT+4,然后再按空格键,最后点击一个窗口。

不过,我在按CMD+SHIFT+4的时候遇到了一些麻烦。这个方法不行:

keyDown(KEY_META)
keyDown(Key.SHIFT)
wait(1)
type("4")
wait(1)
keyUp(Key.SHIFT)
keyUp(KEY_META)

有没有人有什么想法?我也愿意尝试其他的方法来按这个组合键,比如我知道复制这个方法效果很好:

type("c",KEY_META)

但是,它不接受三个参数。

2 个回答

1

我找到了一种更好的解决方案,确实有效:

screen = Screen()
scr_img = screen.capture(screen.getBounds())
scr_img.save("C:\Screenshots", "screenshot")

Screen.capture() 这个方法会返回一个叫做 ScreenImage 的类的实例,这个类里面有一些方法,比如:'save'、'saveInBundle'、'getFile' 和 'getFilename'。其中,save() 方法会在你提供的前缀参数后面加上一个唯一的数字。

9
type("4", KeyModifier.CMD+KeyModifier.SHIFT)

或者,更好的是:

import shutil
import os
screenshotsDir = "absolute-path-to-a-folder"
img = capture(some_region)
shutil.move(img, os.path.join(screenshotsDir, "some-name.png"))

其中 some_region 是:

some_region = SCREEN # for whole screen

或者

someRegion = App.focusedWindow() # for the frontmost window

这样做的好处是,你可以控制截图的文件名。

撰写回答