提交 80e63b6b 编写于 作者: yanghye's avatar yanghye

增加屏幕截取简单示例

上级 26cf1667
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>screenshot</title>
</head>
<body>
<button onclick="screenshot()">截屏</button>
<script>
function screenshot() {
ipc.emit("screenshot");
}
</script>
</body>
</html>
package main
import (
"embed"
"github.com/energye/energy/v2/cef"
"github.com/energye/energy/v2/cef/ipc"
"github.com/energye/energy/v2/consts"
"github.com/energye/golcl/lcl"
"github.com/energye/golcl/lcl/rtl"
"github.com/energye/golcl/lcl/types"
"path/filepath"
)
//go:embed resources
var resources embed.FS
func main() {
//Global initialization must be called
cef.GlobalInit(nil, &resources)
//Create an application
app := cef.NewApplication()
//Local load resources
cef.BrowserWindow.Config.LocalResource(cef.LocalLoadConfig{
ResRootDir: "resources",
FS: &resources,
}.Build())
cef.BrowserWindow.Config.Width = 600
cef.BrowserWindow.Config.Height = 400
// run main process and main thread
cef.BrowserWindow.SetBrowserInit(browserInit)
//run app
cef.Run(app)
}
// run main process and main thread
func browserInit(event *cef.BrowserEvent, window cef.IBrowserWindow) {
var (
schotForm *lcl.TForm
image *lcl.TImage
)
if window.IsLCL() {
// 创建一个窗口显示截屏图片
schotForm = lcl.NewForm(window.AsLCLBrowserWindow().BrowserWindow())
// 窗口透明
schotForm.SetAlphaBlend(true)
// 无边框窗口
//schotForm.SetBorderStyle(types.BsNone)
// 窗口透明度
//schotForm.SetAlphaBlendValue(155)
// 窗口大小是整个显示器大小
//schotForm.SetBoundsRect(window.AsLCLBrowserWindow().BrowserWindow().Monitor().BoundsRect())
// 显示截屏图片
image = lcl.NewImage(schotForm)
image.SetParent(schotForm)
image.SetAlign(types.AlClient)
// 可以使用一些事件来处理截图.
image.SetOnMouseMove(func(sender lcl.IObject, shift types.TShiftState, x, y int32) {
})
image.SetOnMouseDown(func(sender lcl.IObject, button types.TMouseButton, shift types.TShiftState, x, y int32) {
})
image.SetOnMouseUp(func(sender lcl.IObject, button types.TMouseButton, shift types.TShiftState, x, y int32) {
})
}
// 屏幕截图
ipc.On("screenshot", func() {
println("screenshot")
window.RunOnMainThread(func() {
dc := rtl.GetDC(0)
// 一定要释放
defer rtl.ReleaseDC(0, dc)
// 位图
bmp := lcl.NewBitmap()
defer bmp.Free()
bmp.LoadFromDevice(dc)
// 可以 保存到本地 bmp
wd := consts.CurrentExecuteDir
bmp.SaveToFile(filepath.Join(wd, "sc.bmp"))
// 可以 显示截屏图片窗口
if schotForm != nil {
schotForm.Show()
image.Picture().Assign(bmp)
}
})
})
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册