| name | wails-runtime-features |
| description | 剪贴板、通知、屏幕、自启动、平台 API(dock)、键盘快捷键、文件/HTML 拖放、浏览器集成、环境信息、前端 @wailsio/runtime。当用户问到「app.Clipboard / Notifications / app.Screen / Autostart / Dock / KeyBinding / EnableFileDrop / OpenURL / app.Env / @wailsio/runtime / Application Window WML Events Browser Dialogs Flags Screens System」等运行时功能时使用。 |
Wails v3 - Runtime 功能合集
10 类运行时功能(除窗口/菜单外)+ 前端 @wailsio/runtime SDK。
何时使用本 SKILL
- 调用系统剪贴板(复制/粘贴)
- 发送桌面通知(含交互按钮 / 文本输入)
- 多显示器、DPI 缩放查询
- 注册开机自启动
- macOS Dock badge / progress / 弹跳
- 全局键盘快捷键
- OS 文件拖放到应用、HTML 元素拖放
- 默认浏览器打开 URL / 文件
- 系统环境信息(OS / Arch / Theme)
- 前端 JS SDK(Application/Window/Events/Browser/Dialogs/Flags/Screens/System/WML/Clipboard)
关键摘要
剪贴板(app.Clipboard)
ok := app.Clipboard.SetText("Hello!")
text, ok := app.Clipboard.Text()
通知(pkg/services/notifications)
import "github.com/wailsapp/wails/v3/pkg/services/notifications"
notifier := notifications.New()
app := application.New(application.Options{
Services: []application.Service{application.NewService(notifier)},
})
authorized, err := notifier.CheckNotificationAuthorization()
if !authorized {
authorized, _ = notifier.RequestNotificationAuthorization()
}
notifier.SendNotification(notifications.NotificationOptions{
ID: "msg-1", Title: "新消息", Subtitle: "From Alice", Body: "点击查看",
})
notifier.RegisterNotificationCategory(notifications.NotificationCategory{
ID: "MESSAGE_CATEGORY",
Actions: []notifications.NotificationAction{
{ID: "REPLY", Title: "回复"},
{ID: "MARK_READ", Title: "已读"},
},
})
屏幕(app.Screen)
all := app.Screen.GetAll()
primary := app.Screen.GetPrimary()
current := app.Screen.GetCurrent()
for _, s := range all {
fmt.Printf("%s %dx%d scale=%.2f primary=%v\n",
s.Name, s.Size.Width, s.Size.Height, s.ScaleFactor, s.IsPrimary)
}
自启动(app.Autostart)
err := app.Autostart.Enable()
app.Autostart.EnableWithOptions(application.AutostartOptions{
Identifier: "com.example.myapp",
Arguments: []string{"--hidden"},
})
app.Autostart.Disable()
enabled, err := app.Autostart.IsEnabled()
status, err := app.Autostart.Status()
macOS Dock(app.Dock,仅 macOS)
app.Dock.SetBadge("3")
app.Dock.SetBadge("")
app.Dock.SetProgress(0.5)
app.Dock.HideProgress()
app.Dock.RequestUserAttention(application.AttentionTypeCritical)
全局键盘快捷键(app.KeyBinding)
app.KeyBinding.Add("Ctrl+S", func(window application.Window) {
window.EmitEvent("file:save", nil)
})
app.KeyBinding.Add("CmdOrCtrl+N", func(w application.Window) { })
app.KeyBinding.Add("CmdOrCtrl+Shift+P", func(w application.Window) { })
app.KeyBinding.Remove("Ctrl+S")
app.KeyBinding.RemoveAll()
文件拖放(系统级)
window := app.Window.NewWithOptions(application.WebviewWindowOptions{
EnableFileDrop: true,
})
<div id="upload" data-file-drop-target>Drop files here</div>
.drop-zone.file-drop-target-active { border-color: blue }
window.OnWindowEvent(events.Common.WindowFilesDropped, func(e *application.WindowEvent) {
files := e.Context().DroppedFiles()
targetID := e.Context().TargetID()
targetClass := e.Context().TargetClass()
})
HTML 拖放(webview 内)
标准 HTML5 drag-and-drop(不接收 OS 文件)。
浏览器集成(app.Browser)
app.Browser.OpenURL("https://wails.io")
app.Browser.OpenURL("http://localhost:3000")
app.Browser.OpenFile("/path/to/file.pdf")
环境信息(app.Env)
info := app.Env.Info()
isDark := app.Env.IsDarkMode()
app.Env.ShowInFileManager("/path/to/file")
app.Env.OpenWithDefaultApplication("/path/to/file.pdf")
前端 Runtime SDK (@wailsio/runtime)
import {
Application, Window, Events, Browser, Dialogs,
Flags, Screens, System, Clipboard, WML
} from '@wailsio/runtime'
Application.Quit()
Application.Hide()
Application.Show()
Application.OpenContextMenu('menu-id', {x, y, data})
Window.Center()
Window.SetTitle("New")
Window.Minimise()
Window.Maximise()
Window.Restore()
Window.Show()
Window.Hide()
Window.Close()
Window.Focus()
Window.Reload()
Window.SetSize(800, 600)
Window.SetPosition(100, 100)
const sz = await Window.Size()
const pos = await Window.Position()
Events.On(name, handler)
Events.Once(name, handler)
Events.Off(name)
Events.Emit(name, data)
Browser.OpenURL(url)
const path = await Dialogs.OpenFile({title: "Select", filters: [...]})
const choice = await Dialogs.Question({title, message, buttons: [...]})
const screens = await Screens.GetAll()
const info = await System.Environment()
const isDark = await System.IsDarkMode()
await Clipboard.SetText("hello")
const text = await Clipboard.Text()
Flags.Get("name")
References 索引
链接到其他 SKILL
- 应用入口注册 Service →
wails-application
- 窗口选项 EnableFileDrop →
wails-window
- KeyBinding 触发的菜单/对话框 →
wails-menus-dialogs
- 自定义事件、应用事件 →
wails-events