跳到正文

Window 窗口 ​

window.toggleMaximize ​

最大化调用方窗口,已最大化时还原。全屏的窗口改为退出全屏。面板模式下失败;没有窗口时失败并带 maximized: false。

无参数。

返回值

字段类型说明
maximizedboolean投递的请求生效后窗口是否最大化。若是退出全屏,则是窗口回到的状态。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

javascript
const result = await fb2k.invoke('window.toggleMaximize');
if (result.success === false) throw new Error(result.error);
console.log(result.maximized ? '已最大化' : '已还原');

window.getState ​

报告调用方窗口的状态标志与矩形。每个标志都发两遍,一遍不带前缀、一遍带 is 前缀。没有窗口时标志全为 false,矩形全为 0。

无参数。

返回值

字段类型说明
maximizedboolean窗口是否最大化。
minimizedboolean窗口是否最小化。
fullscreenboolean窗口是否全屏。
alwaysOnTopboolean窗口是否保持在其他窗口之上。
focusedboolean窗口是否为前台窗口。
isMaximizedboolean与 maximized 相同。
isMinimizedboolean与 minimized 相同。
isFullscreenboolean与 fullscreen 相同。
isAlwaysOnTopboolean与 alwaysOnTop 相同。
isFocusedboolean与 focused 相同。
widthinteger宽度,物理像素,含边框。
heightinteger高度,物理像素,含边框。
xinteger左边缘的屏幕坐标。
yinteger上边缘的屏幕坐标。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

javascript
const state = await fb2k.invoke('window.getState');
if (state.success === false) throw new Error(state.error);
if (state.isMaximized) {
    console.log(`窗口已最大化,尺寸: ${state.width}x${state.height}`);
}

window.isMaximized ​

报告调用方窗口是否最大化;没有窗口时为 false。

无参数。

返回值

字段类型说明
maximizedboolean窗口是否最大化。
isMaximizedboolean与 maximized 相同。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

window.isMinimized ​

报告调用方窗口是否最小化;没有窗口时为 false。

无参数。

返回值

字段类型说明
minimizedboolean窗口是否最小化。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

window.isFullscreen ​

报告窗口是否全屏。

参数类型必填说明
windowIdstring否目标窗口:main 或 popup 的 id;省略或为空串时为调用方窗口。不会回退到主窗口:调用方不是插件的窗口时以 NOT_FOUND 失败,DUI/CUI 面板以 PANEL_MODE_UNSUPPORTED 失败。

返回值

字段类型说明
fullscreenboolean窗口是否全屏。
isFullscreenboolean与 fullscreen 相同。
windowIdstring调用实际作用的窗口的 id。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

window.setFullscreen ​

进入或退出全屏。设为窗口已有的状态照常成功。退出全屏时恢复进入前的矩形、最大化状态与置顶状态。面板模式下失败。

参数类型必填说明
windowIdstring否目标窗口:main 或 popup 的 id;省略或为空串时为调用方窗口。不会回退到主窗口:调用方不是插件的窗口时以 NOT_FOUND 失败,DUI/CUI 面板以 PANEL_MODE_UNSUPPORTED 失败。
enabledboolean否true 进入全屏,false 退出全屏。默认 true。

返回值

字段类型说明
fullscreenboolean窗口现在是否全屏。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

主窗口与 popup 进入/退出 fullscreen 后,都会重新通过统一的 window chrome resolver/applier 应用当前 backdropPolicy / frameless / darkMode 状态。

javascript
await fb2k.invoke('window.setFullscreen', { enabled: true });
// 退出全屏
await fb2k.invoke('window.setFullscreen', { enabled: false });

window.setBounds ​

一次移动或缩放调用方窗口;省略的键保持当前值,小数部分舍去。面板模式与没有窗口时失败。

参数类型必填说明
xnumber否新的左边缘屏幕坐标。
ynumber否新的上边缘屏幕坐标。
widthnumber否新的宽度,物理像素,含边框。
heightnumber否新的高度,物理像素,含边框。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

javascript
// 只改大小不改位置
await fb2k.invoke('window.setBounds', { width: 1920, height: 1080 });
// 只改位置不改大小
await fb2k.invoke('window.setBounds', { x: 0, y: 0 });

window.hasSavedBounds ​

报告此前的会话是否保存过主窗口的位置,页面可据此决定首次启动时是否设置默认大小。

无参数。

返回值

字段类型说明
hasSavedBoundsboolean是否保存有此前会话的位置。
descriptionstring复述 hasSavedBounds 的一句英文,供日志使用。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

window.getDpiScale ​

报告调用方窗口设备上下文的 DPI 及其与 96 的比值;没有窗口时为 96。

无参数。

返回值

字段类型说明
dpiintegerDPI;96 即 100 %。
scalenumberdpi / 96。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

javascript
const dpi = await fb2k.invoke('window.getDpiScale');
if (dpi.success === false) throw new Error(dpi.error);
console.log(`DPI: ${dpi.dpi}, 缩放: ${dpi.scale}x`);

window.focus ​

把窗口带到前台:最小化的先还原,隐藏的先显示。显式 ID 只定位指定窗口;省略时定位调用方顶层窗口,含面板所在宿主。目标不存在时以 NOT_FOUND 失败。该请求使旧弹窗焦点归还动作失效,不永久改变弹窗的禁止激活策略。成功表示已请求,Windows 仍可能拒绝前台激活。

参数类型必填说明
windowIdstring否main 或 popup 的 id;省略或为空串时聚焦调用方顶级窗口,包括 DUI/CUI 面板所在的 foobar2000 宿主窗口。显式指定的 id 不存在时以 NOT_FOUND 失败。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

javascript
// 聚焦调用者自身窗口
await fb2k.invoke('window.focus');

// 从弹窗聚焦主窗口
await fb2k.invoke('window.focus', { windowId: 'main' });

// 从主窗口聚焦指定弹窗
await fb2k.invoke('window.focus', { windowId: 'my-popup-id' });

window.blur ​

把前台交给 Z 序里位于调用方窗口之下的那个窗口。没有窗口时失败。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

window.getTitle ​

报告调用方窗口的标题,最多 255 个字符;没有窗口时为空串。

无参数。

返回值

字段类型说明
titlestring窗口标题。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

javascript
const result = await fb2k.invoke('window.getTitle');
if (result.success === false) throw new Error(result.error);
console.log('窗口标题:', result.title);

window.showSystemMenu ​

打开调用方窗口的系统菜单(还原、移动、大小、最小化、最大化、关闭)并执行选中的命令。坐标是屏幕像素,小数部分舍去。w 与 h 都为正时菜单在矩形 x、y、w、h 下方弹出并避开它,否则在 x、y 处弹出。面板模式、没有窗口时失败;窗口没有系统菜单时以 OPERATION_FAILED 失败。

参数类型必填说明
xnumber否要避开的矩形的左边缘;w 或 h 不为正时是菜单的位置。默认 0。
ynumber否要避开的矩形的上边缘;w 或 h 不为正时是菜单的位置。默认 0。
wnumber否要避开的矩形的宽度。默认 0。
hnumber否要避开的矩形的高度。默认 0。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

javascript
// 在自定义标题栏按钮旁显示系统菜单,避免遮挡按钮
const btn = document.querySelector('.title-bar-icon');
const rect = btn.getBoundingClientRect();
await fb2k.invoke('window.showSystemMenu', {
    x: rect.left, y: rect.top,
    w: rect.width, h: rect.height
});

window.startDrag ​

开始用鼠标拖动调用方窗口,效果与按住标题栏相同。在 mousedown 处理函数里、按键仍按着时调用。面板模式与没有窗口时失败。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

javascript
titlebar.addEventListener('mousedown', async () => {
    await fb2k.invoke('window.startDrag');
});

window.setTitlebarHeight ​

设置调用方窗口(主窗口或 popup)的标题栏高度;popup 的高度不影响主窗口。高度须在 24 到 100 之间,否则以 INVALID_PARAMS 失败。面板模式下失败;调用方既不是主窗口也不是 popup 时以 NOT_FOUND 失败。

参数类型必填说明
heightnumber否标题栏高度,物理像素,24 到 100;小数部分舍去。默认 32。

返回值

字段类型说明
heightinteger设置后的高度。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

window.getTitlebarInfo ​

一并报告主窗口的标题栏高度、标题栏按钮宽度与最大化状态,物理像素。只看主窗口;没有主窗口时报 32、138、46 与 false。

无参数。

返回值

字段类型说明
heightinteger标题栏高度,物理像素。
captionButtonsWidthinteger三个标题栏按钮的总宽度。
captionButtonWidthinteger单个标题栏按钮的宽度。
isMaximizedboolean主窗口是否最大化。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

window.getCaptionButtonsWidth ​

报告主窗口标题栏按钮(最小化、最大化、关闭)的宽度,按其 DPI 换算的物理像素。只看主窗口;没有主窗口时报 138 与 46,不失败。

无参数。

返回值

字段类型说明
widthinteger三个按钮的总宽度。
buttonWidthinteger单个按钮的宽度。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

window.setDragRegions ​

设置调用方窗口(主窗口或 popup)的可拖动矩形,替换已有区域。矩形使用页面 CSS 像素,由宿主按 devicePixelRatio(综合窗口 DPI、文本缩放与页面缩放)换算为物理像素。devicePixelRatio 变化时须重新设置。忽略宽高不为正的矩形。在面板模式下失败;调用方非主窗口且非 popup 时以 NOT_FOUND 失败。

参数类型必填说明
regionsWindowRegion[]否拖动矩形;省略时为空。
regions[].xnumber否左边缘。默认 0。
regions[].ynumber否上边缘。默认 0。
regions[].widthnumber否宽度。默认 0。
regions[].heightnumber否高度。默认 0。

返回值

字段类型说明
countinteger保留下来的矩形个数。
dpiScalenumber窗口 DPI 除以 96。
scalenumber矩形所乘的缩放比例,即页面的 devicePixelRatio。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

javascript
await fb2k.invoke('window.setDragRegions', {
    regions: [
        { x: 0, y: 0, width: 800, height: 32 }
    ]
});

window.clearDragRegions ​

清除调用方窗口的拖动矩形。面板模式下失败;调用方既不是主窗口也不是 popup 时以 NOT_FOUND 失败。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

window.getPopupBehavior ​

报告 popup 的行为预设、在它上面设置的覆盖项与实际生效的行为。只适用于 popup:传 main 以 NOT_SUPPORTED 失败;不传 windowId 时取调用方 popup,调用方不是 popup 时以 NOT_FOUND 失败。

参数类型必填说明
windowIdstring否popup 的 id;省略或为空串时为调用方 popup。

返回值

字段类型说明
windowIdstringpopup 的 id。
profile"legacy" | "standard" | "miniPlayer" | "desktopLyrics"行为预设;创建时没给预设为 legacy。
behaviorRecord<string, any>在 popup 上设置的行为覆盖。
resolvedBehaviorWindowPopupBehaviorState实际生效的行为。
resolvedBehavior.showInTaskbarboolean是否出现在任务栏上。
resolvedBehavior.showInAltTabboolean是否出现在 Alt+Tab 里。
resolvedBehavior.keepVisibleOnShowDesktopboolean显示桌面时是否仍然可见。
resolvedBehavior.allowMinimizeboolean能否最小化。
resolvedBehavior.owner"none" | "main"main 让 popup 位于主窗口之上并随主窗口最小化;none 让它独立。
resolvedBehavior.noActivateboolean显示或点击 popup 时是否不抢焦点。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

javascript
const info = await fb2k.invoke('window.getPopupBehavior');
if (info.success === false) throw new Error(info.error);
console.log(info.resolvedBehavior.showInTaskbar);

window.setPopupBehavior ​

运行时修改 popup 的行为预设或逐字段覆盖,然后以 window:behaviorChanged 通告结果。profile 与 behavior 互相独立:只传一个不影响另一个。目标的选取同 window.getPopupBehavior;认不出的预设以 INVALID_PARAMS 失败。

参数类型必填说明
windowIdstring否popup 的 id;省略或为空串时为调用方 popup。
profilestring否新的预设:standard、miniPlayer 或 desktopLyrics,不区分大小写,可写 - 或 _(mini-player)。
behaviorRecord<string, any>否合并进现有覆盖的新覆盖;值为 null 的键删除该覆盖。

返回值

字段类型说明
windowIdstringpopup 的 id。
profile"legacy" | "standard" | "miniPlayer" | "desktopLyrics"行为预设。
behaviorRecord<string, any>合并之后的行为覆盖。
resolvedBehaviorWindowPopupBehaviorState实际生效的行为。
resolvedBehavior.showInTaskbarboolean是否出现在任务栏上。
resolvedBehavior.showInAltTabboolean是否出现在 Alt+Tab 里。
resolvedBehavior.keepVisibleOnShowDesktopboolean显示桌面时是否仍然可见。
resolvedBehavior.allowMinimizeboolean能否最小化。
resolvedBehavior.owner"none" | "main"main 让 popup 位于主窗口之上并随主窗口最小化;none 让它独立。
resolvedBehavior.noActivateboolean显示或点击 popup 时是否不抢焦点。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

字段优先级:behavior.* 字段覆盖 > profile 默认。

javascript
// 仅切换 profile
await fb2k.invoke('window.setPopupBehavior', { profile: 'miniPlayer' });

// 字段级覆盖(保留当前 profile)
await fb2k.invoke('window.setPopupBehavior', {
    behavior: { showInTaskbar: true, showInAltTab: true }
});

// 清空字段,恢复 profile 默认
await fb2k.invoke('window.setPopupBehavior', {
    behavior: { showInTaskbar: null }
});

window.getBackdropPolicy ​

报告窗口的背景策略:在它上面设置的覆盖项与实际生效的策略。

参数类型必填说明
windowIdstring否目标窗口:main 或 popup 的 id;省略或为空串时为调用方窗口。不会回退到主窗口:调用方不是插件的窗口时以 NOT_FOUND 失败,DUI/CUI 面板以 PANEL_MODE_UNSUPPORTED 失败。

返回值

字段类型说明
windowIdstring调用实际作用的窗口的 id。
backdropPolicyRecord<string, any>在窗口上设置的背景策略覆盖。
resolvedBackdropPolicyWindowBackdropPolicyState实际生效的背景策略。
resolvedBackdropPolicy.activeEffect"inherit" | "none" | "mica" | "mica-alt" | "acrylic"窗口激活时的背景;inherit 跟随 foobar2000 首选项。
resolvedBackdropPolicy.inactiveEffect"inherit" | "system" | "none" | "mica" | "mica-alt" | "acrylic"窗口失焦时的背景:inherit 沿用激活时的效果、由 Windows 调暗,system 交还平台背景。
resolvedBackdropPolicy.darkModeboolean背景是否用深色变体。
resolvedBackdropPolicy.reapplyOnActivateboolean每次激活时是否重新写入背景。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

javascript
const info = await fb2k.invoke('window.getBackdropPolicy');
if (info.success === false) throw new Error(info.error);
console.log(info.resolvedBackdropPolicy.activeEffect); // 'mica'

window.setBackdropPolicy ​

将逐字段覆盖合并至窗口的背景策略;设为 null 可清除该项覆盖。即使窗口未能即时呈现(如启动时处于隐藏状态),覆盖配置仍会保存;此时调用以 OPERATION_FAILED 失败。

参数类型必填说明
windowIdstring否目标窗口:main 或 popup 的 id;省略或为空串时为调用方窗口。不会回退到主窗口:调用方不是插件的窗口时以 NOT_FOUND 失败,DUI/CUI 面板以 PANEL_MODE_UNSUPPORTED 失败。
backdropPolicyRecord<string, any>是以 resolvedBackdropPolicy 的键为键的覆盖,合并进现有覆盖;值为 null 的键删除该覆盖。其他键照存照回显但不起作用,取值表之外的效果名不改变正在使用的效果。

返回值

字段类型说明
windowIdstring调用实际作用的窗口的 id。
backdropPolicyRecord<string, any>合并之后的背景策略覆盖。
resolvedBackdropPolicyWindowBackdropPolicyState实际生效的背景策略。
resolvedBackdropPolicy.activeEffect"inherit" | "none" | "mica" | "mica-alt" | "acrylic"窗口激活时的背景;inherit 跟随 foobar2000 首选项。
resolvedBackdropPolicy.inactiveEffect"inherit" | "system" | "none" | "mica" | "mica-alt" | "acrylic"窗口失焦时的背景:inherit 沿用激活时的效果、由 Windows 调暗,system 交还平台背景。
resolvedBackdropPolicy.darkModeboolean背景是否用深色变体。
resolvedBackdropPolicy.reapplyOnActivateboolean每次激活时是否重新写入背景。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

javascript
// 切换主窗口为 acrylic
await fb2k.invoke('window.setBackdropPolicy', {
    backdropPolicy: { activeEffect: 'acrylic' }
});

// 同时改 active 与 inactive
await fb2k.invoke('window.setBackdropPolicy', {
    backdropPolicy: {
        activeEffect: 'mica',
        inactiveEffect: 'system'
    }
});

// 失焦沿用已解析的 activeEffect,由 DWM 做失焦变暗
await fb2k.invoke('window.setBackdropPolicy', {
    backdropPolicy: {
        activeEffect: 'mica',
        inactiveEffect: 'inherit'
    }
});

// 清空 activeEffect 恢复默认
await fb2k.invoke('window.setBackdropPolicy', {
    backdropPolicy: { activeEffect: null }
});

相关类型定义见 SDK:WindowBackdropPolicyPatch / WindowPopupBehaviorPatch。

其他公开 API ​

window.broadcast ​

给除调用方以外的每个窗口发消息,以 window:message({ sourceWindowId, message })送达。

参数类型必填说明
messageany是消息正文,作为事件的 message 送达;传入 null 视同未指定。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('window.broadcast', { message: { type: 'themeChanged', theme: 'dark' } });

window.cancelClose ​

收到 window:beforeClose 后阻止调用方 popup 关闭;无待定关闭操作时静默忽略。调用方不是 popup 时以 NOT_FOUND 失败。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.cancelClose');

window.center ​

把调用方窗口移到所在显示器工作区的中央,大小不变。面板模式与没有窗口时失败。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.center');

window.clearClickThroughExcludeRegions ​

清除 popup 的鼠标穿透排除矩形。目标的选取同 window.setClickThrough。

参数类型必填说明
windowIdstring否popup 的 id;省略或为空串时为调用方窗口。

返回值

字段类型说明
windowIdstringpopup 的 id。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
// 仅作用于 popup;只有从该 popup 自身调用时才可省略 windowId
await fb2k.invoke('window.clearClickThroughExcludeRegions', { windowId: 'popup-1' });

window.clearNoDragRegions ​

清除调用方窗口的不可拖动矩形。面板模式下失败;调用方既不是主窗口也不是 popup 时以 NOT_FOUND 失败。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.clearNoDragRegions');

window.close ​

触发窗口关闭操作(等同于系统关闭指令)。无窗口时静默成功。面板模式下失败。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.close');

window.closeAllPopups ​

像点各自的关闭按钮那样关闭所有 popup。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.closeAllPopups');

window.closePopup ​

像点关闭按钮那样关闭一个 popup,所以以 beforeClose 创建的 popup 会先收到 window:beforeClose。传 main 以 INVALID_PARAMS 失败,没有 popup 是该 id 时以 NOT_FOUND 失败。

参数类型必填说明
windowIdstring是要关闭的 popup 的 id。不能为空。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
// 此处 windowId 为必填,不会回退到调用方窗口
await fb2k.invoke('window.closePopup', { windowId: 'popup-1' });

window.confirmClose ​

收到 window:beforeClose 后允许调用方 popup 关闭;无待定关闭操作时静默忽略。调用方不是 popup 时以 NOT_FOUND 失败。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.confirmClose');

window.createPopup ​

打开一个拥有独立 WebView 与桥的 popup 窗口;最多同时打开 8 个。从 DUI/CUI 面板也能调用。已有 8 个 popup 或窗口创建失败时以 OPERATION_FAILED 失败。

参数类型必填说明
urlstring否要加载的页面。http://、https://、file:/// 或 data: 地址原样加载;含 .html 的路径从主题(或开发服务器)加载;其他值(含空串)加载主题的 index.html,并把该值作为 route 查询参数。除 data: 外每个地址都会加上 windowId 查询参数。http:// 或 https:// 地址的页面只有在调用方页面已经信任该来源时才能使用桥,其他绝对地址加载的页面都不能。这样的页面照常显示,但调用以 ORIGIN_DENIED 失败,也收不到任何事件。默认 ""。
titlestring否窗口标题。默认 ""。
xnumber否左边缘的屏幕坐标;省略时由 Windows 决定位置。小数部分舍去。
ynumber否上边缘的屏幕坐标;省略时由 Windows 决定位置。小数部分舍去。
widthnumber否宽度,物理像素;小数部分舍去。默认 400。
heightnumber否高度,物理像素;小数部分舍去。默认 300。
minWidthnumber否调整大小时的最小宽度,物理像素。默认 200。
minHeightnumber否调整大小时的最小高度,物理像素。默认 150。
maxWidthnumber否调整大小时的最大宽度,物理像素;0 表示不设上限。默认 0。
maxHeightnumber否调整大小时的最大高度,物理像素;0 表示不设上限。默认 0。
resizableboolean否用户能否调整 popup 的大小。默认 true。
frameboolean否是否画原生边框与标题栏;false 创建无边框 popup。默认 true。
transparentboolean否背景是否透明。默认 false。
alwaysOnTopboolean否让 popup 保持在所有其他窗口之上。只想让它位于主窗口之上时,改用 standard 预设或 behavior.owner: "main"。默认 false。
showInTaskbarboolean否popup 是否出现在任务栏与 Alt+Tab 里;省略时由预设决定。
clickThroughboolean否让鼠标输入穿过 popup。默认 false。
beforeCloseboolean否关闭前先发 window:beforeClose,等待 window.confirmClose 或 window.cancelClose。默认 false。
profilestring否行为预设:standard、miniPlayer 或 desktopLyrics,不区分大小写,可写 - 或 _(mini-player);认不出的值按 standard。省略时不用预设。
behaviorRecord<string, any>否叠加在预设之上的行为覆盖,键同 window.getPopupBehavior 的 resolvedBehavior。
backdropPolicyRecord<string, any>否叠加在预设之上的背景策略覆盖,键同 window.getBackdropPolicy 的 resolvedBackdropPolicy。

返回值

字段类型说明
windowIdstring新 popup 的 id。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const res = await fb2k.invoke('window.createPopup', {
    url: 'popup.html',
    width: 480,
    height: 320,
    title: 'Now Playing',
});
if (res.success === false) throw new Error(res.error);
const { windowId } = res;

window.enterFullscreen ​

进入全屏。窗口已经全屏时以 OPERATION_FAILED 失败。面板模式下失败。

参数类型必填说明
windowIdstring否目标窗口:main 或 popup 的 id;省略或为空串时为调用方窗口。不会回退到主窗口:调用方不是插件的窗口时以 NOT_FOUND 失败,DUI/CUI 面板以 PANEL_MODE_UNSUPPORTED 失败。

返回值

字段类型说明
isFullscreenboolean恒为 true。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.enterFullscreen');

window.exitFullscreen ​

退出全屏并恢复进入前的状态。窗口不在全屏时以 OPERATION_FAILED 失败。面板模式下失败。

参数类型必填说明
windowIdstring否目标窗口:main 或 popup 的 id;省略或为空串时为调用方窗口。不会回退到主窗口:调用方不是插件的窗口时以 NOT_FOUND 失败,DUI/CUI 面板以 PANEL_MODE_UNSUPPORTED 失败。

返回值

字段类型说明
isFullscreenboolean恒为 false。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.exitFullscreen');

window.flash ​

闪烁调用方窗口的标题栏与任务栏按钮以吸引注意,或停止闪烁。面板模式与没有窗口时失败。

参数类型必填说明
enabledboolean否true 开始闪烁,false 停止。默认 true。
countinteger否闪烁次数。默认 3。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
// 省略 count 与 enabled 即闪烁 3 次
await fb2k.invoke('window.flash');

window.flashTaskbar ​

让调用方窗口的任务栏按钮与标题栏闪烁若干次。面板模式与没有窗口时失败。

参数类型必填说明
countinteger否闪烁次数。默认 3。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
// 省略 count 即闪烁 3 次
await fb2k.invoke('window.flashTaskbar');

window.getAllWindows ​

列出主窗口与每个 popup,连同它们的策略、能力与矩形。

无参数。

返回值

字段类型说明
itemsWindowInfo[]主窗口在前,其后是各 popup。
items[].windowIdstringmain 或 popup 的 id。
items[].isMainboolean是否为主窗口。
items[].titlestring窗口标题。
items[].urlstring仅适用于弹出窗口:创建时指定的初始 URL
items[].profile"legacy" | "standard" | "miniPlayer" | "desktopLyrics"仅适用于弹出窗口:行为预设;创建时未指定则为 legacy
items[].behaviorRecord<string, any>仅 popup:在 popup 上设置的行为覆盖。
items[].resolvedBehaviorWindowPopupBehaviorState仅 popup:实际生效的行为。
items[].resolvedBehavior.showInTaskbarboolean是否出现在任务栏上。
items[].resolvedBehavior.showInAltTabboolean是否出现在 Alt+Tab 里。
items[].resolvedBehavior.keepVisibleOnShowDesktopboolean显示桌面时是否仍然可见。
items[].resolvedBehavior.allowMinimizeboolean能否最小化。
items[].resolvedBehavior.owner"none" | "main"main 让 popup 位于主窗口之上并随主窗口最小化;none 让它独立。
items[].resolvedBehavior.noActivateboolean显示或点击 popup 时是否不抢焦点。
items[].backdropPolicyRecord<string, any>在窗口上设置的背景策略覆盖。
items[].resolvedBackdropPolicyWindowBackdropPolicyState实际生效的背景策略。
items[].resolvedBackdropPolicy.activeEffect"inherit" | "none" | "mica" | "mica-alt" | "acrylic"窗口激活时的背景;inherit 跟随 foobar2000 首选项。
items[].resolvedBackdropPolicy.inactiveEffect"inherit" | "system" | "none" | "mica" | "mica-alt" | "acrylic"窗口失焦时的背景:inherit 沿用激活时的效果、由 Windows 调暗,system 交还平台背景。
items[].resolvedBackdropPolicy.darkModeboolean背景是否用深色变体。
items[].resolvedBackdropPolicy.reapplyOnActivateboolean每次激活时是否重新写入背景。
items[].capabilitiesWindowObservationCapabilities窗口支持的功能。
items[].capabilities.supportsBackdropPolicybooleanwindow.setBackdropPolicy 是否生效。
items[].capabilities.supportsFramelessbooleanwindow.setFrameless 是否生效。
items[].capabilities.supportsCornerPreferencebooleanwindow.setCornerPreference 是否生效。
items[].capabilities.supportsPopupBehaviorbooleanwindow.setPopupBehavior 是否生效。
items[].capabilities.supportsMicaAltboolean能否画 Mica Alt 背景。
items[].capabilities.supportsFullscreenboolean能否进入全屏。
items[].capabilities.supportsOwnerPolicybooleanbehavior.owner 是否生效。
items[].capabilities.supportsNoActivatebooleanbehavior.noActivate 是否生效。
items[].capabilities.supportsBeforeClosebooleanbeforeClose 是否生效。
items[].boundsWindowBounds窗口矩形。
items[].bounds.xinteger左边缘。
items[].bounds.yinteger上边缘。
items[].bounds.widthinteger宽度。
items[].bounds.heightinteger高度。
items[].shellany窗口外壳的诊断快照(生命周期与启动状态);形状可能随版本变化。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.getAllWindows');

window.getBounds ​

报告调用方窗口的矩形:屏幕坐标,物理像素,含边框。最小化时报的是 Windows 停放窗口的位置,不是还原后的几何。没有窗口时矩形全为 0。

无参数。

返回值

字段类型说明
xinteger左边缘的屏幕坐标。
yinteger上边缘的屏幕坐标。
widthinteger宽度,物理像素,含边框。
heightinteger高度,物理像素,含边框。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.getBounds');

window.getCornerPreference ​

报告主窗口最后一次设置的圆角;没有主窗口时为 default。

无参数。

返回值

字段类型说明
modestring最后一次设置的圆角。
preferencestring与 mode 相同。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

无主窗口时返回 "default" 而非错误。

js
const result = await fb2k.invoke('window.getCornerPreference');

window.getCurrentWindowId ​

报告调用方窗口的 id:main、popup 的 id 或面板的 id。无法匹配的调用方得到 main。

无参数。

返回值

字段类型说明
windowIdstring调用方窗口的 id。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.getCurrentWindowId');

window.getDevServerConfig ​

报告页面是否从开发服务器而不是已安装的文件加载,以及开发服务器的地址。

无参数。

返回值

字段类型说明
useDevServerboolean页面是否从开发服务器加载。
devServerUrlstring开发服务器的地址。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.getDevServerConfig');

window.getMaxSize ​

报告窗口请求的最大尺寸;0 表示不设上限。

参数类型必填说明
windowIdstring否目标窗口:main 或 popup 的 id;省略或为空串时为调用方窗口。不会回退到主窗口:调用方不是插件的窗口时以 NOT_FOUND 失败,DUI/CUI 面板以 PANEL_MODE_UNSUPPORTED 失败。

返回值

字段类型说明
widthinteger最大宽度,按窗口当前 DPI 换算的物理像素;0 表示不设上限。
heightinteger最大高度,按窗口当前 DPI 换算的物理像素;0 表示不设上限。
windowIdstring调用实际作用的窗口的 id。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

数值单位为物理像素;宿主以 DIP 存储约束,并按目标窗口的 DPI 换算。0 表示无上限,且换算前后精确不变。

返回值为配置记录值,非当前窗口的实时尺寸。由于「物理像素 → DIP → 物理像素」往返换算时量化到整数 DIP,在非 100% 缩放比率下,查询值与设定值每轴可能存在至多 1px 的舍入偏差(例如 125% 缩放下 202px 读取回 203px)。设定为 0 时不受舍入影响。

js
const result = await fb2k.invoke('window.getMaxSize');

window.getMinSize ​

报告窗口请求的最小尺寸,即最后一次设置的值,而不是窗口实际的尺寸。

参数类型必填说明
windowIdstring否目标窗口:main 或 popup 的 id;省略或为空串时为调用方窗口。不会回退到主窗口:调用方不是插件的窗口时以 NOT_FOUND 失败,DUI/CUI 面板以 PANEL_MODE_UNSUPPORTED 失败。

返回值

字段类型说明
widthinteger最小宽度,按窗口当前 DPI 换算的物理像素。
heightinteger最小高度,按窗口当前 DPI 换算的物理像素。
windowIdstring调用实际作用的窗口的 id。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

数值单位为物理像素;宿主以 DIP 存储约束,并按目标窗口的 DPI 换算。

返回值为配置记录值,非当前窗口的实时尺寸。由于「物理像素 → DIP → 物理像素」往返换算时量化到整数 DIP,在非 100% 缩放比率下,查询值与设定值每轴可能存在至多 1px 的舍入偏差(例如 125% 缩放下 202px 读取回 203px)。

js
const result = await fb2k.invoke('window.getMinSize');

window.getMode ​

报告调用方页面的宿主模式和窗口 id。主窗口与 popup 都返回 standalone 和 panelMode: false,从面板打开的 popup 也如此。已注册且有 id 的窗口与 window.getCurrentWindowId 返回相同的 id。需要适配面板模式的页面在启动时读取它;DUI/CUI 面板还会以 panel:initialized 事件通告同样的字段。

无参数。

返回值

字段类型说明
mode"standalone" | "dui" | "cui" | "panel" | "unknown"standalone、dui 或 cui;页面在面板里但分辨不出类型时为 panel,面板类型未知时为 unknown。
panelModeboolean页面是否在 DUI 或 CUI 面板里;主窗口与 popup 为 false。
windowIdstring调用方窗口的 id:主窗口为 main,popup 为实际 popup id,面板为面板 id。面板没有 id 时为 panel;无法匹配的调用方为 main。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.getMode');

window.getTitlebarHeight ​

报告调用方窗口(主窗口或 popup)的标题栏高度,物理像素。两者都不是的调用方得到默认值 32。

无参数。

返回值

字段类型说明
heightinteger标题栏高度,物理像素。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.getTitlebarHeight');

window.getZoom ​

报告调用方窗口 WebView 的缩放倍数、窗口的 DPI 与 Windows 文本大小;页面的 devicePixelRatio 等于 dpiScale * textScaleFactor * zoom。调用方窗口自己没有 WebView 时报缩放 1,并省略 dpi 与 dpiScale。

无参数。

返回值

字段类型说明
zoomnumber缩放倍数;1 即 100 %。
dpiinteger窗口的 DPI;没有 WebView 时省略。
dpiScalenumberdpi / 96;没有 WebView 时省略。
textScaleFactornumberWindows 文本大小的倍数,1 到 2.25,宿主把它与 DPI 一起作用到自己的 WebView 上;Windows 不提供时为 1。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.getZoom');

window.isAlwaysOnTop ​

报告调用方窗口是否保持在其他窗口之上;没有窗口时为 false。

无参数。

返回值

字段类型说明
enabledboolean窗口是否保持在其他窗口之上。
isAlwaysOnTopboolean与 enabled 相同。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.isAlwaysOnTop');

window.isClickThrough ​

报告鼠标输入是否穿过 popup。目标的选取同 window.setClickThrough。

参数类型必填说明
windowIdstring否popup 的 id;省略或为空串时为调用方窗口。

返回值

字段类型说明
clickThroughboolean鼠标输入是否穿过。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const res = await fb2k.invoke('window.isClickThrough', { windowId: 'popup-1' });
if (res.success === false) throw new Error(res.error);
const { clickThrough } = res;

window.isResizable ​

报告用户能否拖动边框调整窗口大小。

参数类型必填说明
windowIdstring否目标窗口:main 或 popup 的 id;省略或为空串时为调用方窗口。不会回退到主窗口:调用方不是插件的窗口时以 NOT_FOUND 失败,DUI/CUI 面板以 PANEL_MODE_UNSUPPORTED 失败。

返回值

字段类型说明
resizableboolean用户能否拖动边框调整窗口大小。
windowIdstring调用实际作用的窗口的 id。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

所有窗口 shell(含完全无边框的 popup)都支持通过 window.setResizable 在运行时改变它。

js
const result = await fb2k.invoke('window.isResizable');

window.maximize ​

以系统动画最大化调用方窗口;窗口处于全屏时先退出全屏。请求是投递的。面板模式与没有窗口时失败。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.maximize');

window.minimize ​

以系统动画最小化调用方窗口。请求是投递的,窗口在调用返回之后才变状态。面板模式与没有窗口时失败。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.minimize');

window.refreshWebView ​

重绘调用方窗口的 WebView,清除背景效果变化后残留的画面。调用方窗口自己没有 WebView 时(例如 DUI/CUI 面板)以 NOT_FOUND 失败。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.refreshWebView');

window.reload ​

重新加载调用方窗口的页面。调用方窗口自己没有 WebView 时(例如 DUI/CUI 面板)以 NOT_FOUND 失败。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.reload');

window.resetZoom ​

把调用方窗口 WebView 的缩放倍数恢复为 1;与 window.setZoom 一样,此后首选项的默认缩放不再作用于它。调用方窗口自己没有 WebView 时以 NOT_FOUND 失败,WebView2 拒绝该倍数时以 OPERATION_FAILED 失败。

无参数。

返回值

字段类型说明
zoomnumber恒为 1。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.resetZoom');

window.restore ​

以系统动画把调用方窗口从最小化或最大化还原。全屏的窗口改为退出全屏,回到全屏前的状态。面板模式与没有窗口时失败。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.restore');

window.sendMessage ​

给一个窗口发消息,以 window:message({ sourceWindowId, message })送达。没有窗口是该 id 时以 NOT_FOUND 失败。

参数类型必填说明
targetWindowIdstring是接收窗口的 id。不能为空。
messageany是消息正文,作为事件的 message 送达;传入 null 视同未指定。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('window.sendMessage', {
    targetWindowId: 'popup-1',
    message: { type: 'seek', position: 42 },
});

window.setAcrylic ​

启用或禁用窗口的 Acrylic(亚克力)背景材质。若未能即时呈现,配置仍会保存;此时以 OPERATION_FAILED 失败并附带状态字段。面板模式下不支持。

参数类型必填说明
windowIdstring否目标窗口:main 或 popup 的 id;省略或为空串时为调用方窗口。不会回退到主窗口:调用方不是插件的窗口时以 NOT_FOUND 失败,DUI/CUI 面板以 PANEL_MODE_UNSUPPORTED 失败。
enabledboolean否true 显示亚克力;false 去掉经 setMica 或 setAcrylic 设置的背景。默认 true。
darkModeboolean否深色(true)或浅色(false)背景;省略时不变。

返回值

字段类型说明
enabledboolean回显 enabled。
darkModeboolean回显请求中的 darkMode;未指定该参数时不返回。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

success 反映材质是否真正应用成功——即使窗口有效,平台拒绝该效果时也可能为 false。

js
await fb2k.invoke('window.setAcrylic', { enabled: true, darkMode: true });

window.setAlwaysOnTop ​

让调用方窗口保持在其他窗口之上,或取消。面板模式与没有窗口时失败。

参数类型必填说明
enabledboolean否是否让窗口保持在其他窗口之上。默认 true。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('window.setAlwaysOnTop', { enabled: true });

window.setBackgroundTransparency ​

设置窗口 WebView 背景为透明(透出底层背景材质效果)或不透明。面板模式下不支持;若窗口与 WebView 均未能应用变更,以 OPERATION_FAILED 失败(窗口有 WebView 时附带状态字段)。

参数类型必填说明
windowIdstring否目标窗口:main 或 popup 的 id;省略或为空串时为调用方窗口。不会回退到主窗口:调用方不是插件的窗口时以 NOT_FOUND 失败,DUI/CUI 面板以 PANEL_MODE_UNSUPPORTED 失败。
transparentboolean否true 为透明背景,false 为不透明。默认 true。

返回值

字段类型说明
transparentboolean回显 transparent。
descriptionstring描述新状态的一句英文,供日志使用。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('window.setBackgroundTransparency', { transparent: true });

window.setBlur ​

启用或禁用窗口的背景模糊效果。若未能即时呈现,配置仍会保存;此时以 OPERATION_FAILED 失败并附带 enabled 状态。面板模式下不支持。

参数类型必填说明
windowIdstring否目标窗口:main 或 popup 的 id;省略或为空串时为调用方窗口。不会回退到主窗口:调用方不是插件的窗口时以 NOT_FOUND 失败,DUI/CUI 面板以 PANEL_MODE_UNSUPPORTED 失败。
enabledboolean否是否模糊窗口后面的内容。默认 true。

返回值

字段类型说明
enabledboolean回显 enabled。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('window.setBlur', { enabled: true });

window.setClickThrough ​

让鼠标输入穿过 popup 落到下面的窗口,经 window.setClickThroughExcludeRegions 设置的矩形除外。只适用于 popup:不传 windowId 时取调用方窗口,它不是 popup 时以 NOT_FOUND 失败。

参数类型必填说明
windowIdstring否popup 的 id;省略或为空串时为调用方窗口。
enabledboolean否鼠标输入是否穿过。默认 true。

返回值

字段类型说明
clickThroughboolean现在鼠标输入是否穿过。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('window.setClickThrough', { enabled: true });

window.setClickThroughExcludeRegions ​

设置 popup 在鼠标穿透时仍接收鼠标输入的矩形,替换之前的设置。矩形是 popup 页面的 CSS 像素,按该页面的 devicePixelRatio 换算,即 popup 的 DPI、Windows 文本大小与页面缩放;devicePixelRatio 变化后要重新设置。宽或高不为正的矩形被跳过,最多保留 32 个。目标的选取同 window.setClickThrough。

参数类型必填说明
windowIdstring否popup 的 id;省略或为空串时为调用方窗口。
regionsWindowRegion[]否矩形;省略时为空。
regions[].xnumber否左边缘。默认 0。
regions[].ynumber否上边缘。默认 0。
regions[].widthnumber否宽度。默认 0。
regions[].heightnumber否高度。默认 0。

返回值

字段类型说明
windowIdstringpopup 的 id。
countinteger保留下来的矩形个数。
dpiScalenumberpopup 的 DPI 除以 96。
scalenumber矩形所乘的缩放比例,即 popup 页面的 devicePixelRatio。
warningstring给出的矩形超过 32 个时为 regions truncated to 32。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('window.setClickThroughExcludeRegions', {
    regions: [{ x: 12, y: 12, width: 160, height: 40 }],
});

window.setCornerPreference ​

设置主窗口的 Windows 11 圆角。不论哪个窗口调用都只作用于主窗口;popup 自行管理圆角。面板模式与没有主窗口时失败。

参数类型必填说明
modestring否default 或 round 为圆角,small 为小圆角,none 为直角。其他值按圆角处理,并原样报回。默认 "default"。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

"default" 映射为圆角,因为无边框窗口没有标准非客户区框架可供系统默认值生效。

js
await fb2k.invoke('window.setCornerPreference', { mode: 'round' });

window.setDarkMode ​

切换窗口背景的深色与浅色主题变体。若未能即时呈现,配置仍会保存;此时以 OPERATION_FAILED 失败并附带 enabled 状态。面板模式下不支持。

参数类型必填说明
windowIdstring否目标窗口:main 或 popup 的 id;省略或为空串时为调用方窗口。不会回退到主窗口:调用方不是插件的窗口时以 NOT_FOUND 失败,DUI/CUI 面板以 PANEL_MODE_UNSUPPORTED 失败。
enabledboolean否true 为深色,false 为浅色。默认 true。

返回值

字段类型说明
enabledboolean回显 enabled。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('window.setDarkMode', { enabled: true });

window.setDevServerConfig ​

修改开发服务器设置;省略的键保持原值。下次加载页面时生效。响应报告两项设置保存后的值。

参数类型必填说明
useDevServerboolean否页面是否从开发服务器加载。
devServerUrlstring否开发服务器的地址,例如 http://localhost:5173;原样保存。

返回值

字段类型说明
useDevServerboolean保存后的「页面是否从开发服务器加载」。
devServerUrlstring保存后的开发服务器地址。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('window.setDevServerConfig', {
    useDevServer: true,
    devServerUrl: 'http://localhost:5173',
});

window.setFrameless ​

去掉或恢复窗口的原生边框与标题栏。面板模式下失败。

参数类型必填说明
windowIdstring否目标窗口:main 或 popup 的 id;省略或为空串时为调用方窗口。不会回退到主窗口:调用方不是插件的窗口时以 NOT_FOUND 失败,DUI/CUI 面板以 PANEL_MODE_UNSUPPORTED 失败。
framelessboolean否true 去掉边框,false 恢复。默认 true。

返回值

字段类型说明
framelessboolean窗口现在是否无边框。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('window.setFrameless', { frameless: true });

window.setMaximizeButtonRegion ​

注册主窗口的自定义最大化按钮矩形,以支持 Windows 11 贴靠布局(Snap layouts)。矩形使用页面 CSS 像素并按 devicePixelRatio 换算,替换此前设置;省略 region 或宽高非正时清除注册。当主窗口为无边框、可调整大小且非全屏时,宿主将该区域响应为系统最大化按钮,同时向页面转发鼠标事件以保留 CSS 悬停与点击处理;在 Windows 10 或其他状态下作为普通页面内容。当按钮布局移动或 devicePixelRatio 改变时须重新注册;页面导航或刷新后注册自动清除。仅限主窗口:在 popup 中以 NOT_SUPPORTED 失败,面板模式下失败,无窗口时以 NOT_FOUND 失败。

参数类型必填说明
regionWindowRegion否自定义最大化按钮在页面中的 CSS 像素矩形;省略或尺寸非正时清除注册。
region.xnumber否左边缘。默认 0。
region.ynumber否上边缘。默认 0。
region.widthnumber否宽度。默认 0。
region.heightnumber否高度。默认 0。

返回值

字段类型说明
hasRegionboolean当前是否注册了有效的最大化按钮矩形。
snapLayoutsboolean当前系统是否支持 Windows 11 贴靠布局。为 false 时宿主不会将该区域响应为最大化按钮。若为 true,应避免为按钮设置 HTML title 属性以免遮挡系统贴靠菜单,推荐改用 aria-label 提供无障碍描述。
scalenumber矩形所乘的缩放比例,即页面的 devicePixelRatio:窗口 DPI 除以 96,再乘 Windows 文本大小与页面缩放。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

在 Windows 11 中,系统仅在原生最大化按钮区域触发贴靠布局(Snap Layouts)。对于前端自绘的最大化按钮,宿主在命中测试中将指定矩形响应为原生最大化按钮。宿主将鼠标消息无缝转发至 WebView,按钮的 :hover、:active 样式与 click 事件正常触发,最大化逻辑仍由前端点击事件控制。矩形区域应保持与 DOM 同步:在首次渲染布局后设置,并在窗口尺寸变更、最大化/还原或 DPI 缩放变动时重新计算设置。当 snapLayouts 为 true 时,应移除按钮的 HTML title 属性并改用 aria-label,避免系统原生提示条遮挡贴靠布局浮层。

js
const button = document.getElementById('maximize');
const report = () => {
    if (!button) return;
    const r = button.getBoundingClientRect();
    void fb2k.invoke('window.setMaximizeButtonRegion', {
        region: { x: r.left, y: r.top, width: r.width, height: r.height },
    });
};
if (button) new ResizeObserver(report).observe(button);
window.addEventListener('resize', report);

window.setMaxSize ​

设置窗口的最大尺寸;0 表示不设上限,小数部分舍去。宿主按目标窗口的 DIP 保存,所以读回时可能差 1 px(0 读回仍是 0)。窗口比新的上限大时立即缩小;最大化、全屏、最小化时不动。面板模式下失败。

参数类型必填说明
windowIdstring否目标窗口:main 或 popup 的 id;省略或为空串时为调用方窗口。不会回退到主窗口:调用方不是插件的窗口时以 NOT_FOUND 失败,DUI/CUI 面板以 PANEL_MODE_UNSUPPORTED 失败。
widthnumber否最大宽度,物理像素;0 表示不设上限。默认 0。
heightnumber否最大高度,物理像素;0 表示不设上限。默认 0。

返回值

字段类型说明
windowIdstring调用实际作用的窗口的 id。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

数值单位为物理像素,按目标窗口的 DPI 换算为宿主的 DIP 存储;0(或负值)表示清除该上限。施加约束后会立即校正当前窗口尺寸,故已超出新上限的窗口会被收缩,而非等到下次用户拖拽。

js
await fb2k.invoke('window.setMaxSize', { width: 1920, height: 1080 });

window.setMica ​

启用或禁用窗口的 Mica 背景材质。若效果未能即时呈现(如启动时窗口处于隐藏状态),配置仍会保存;此时以 OPERATION_FAILED 失败并附带状态字段。面板模式下不支持。

参数类型必填说明
windowIdstring否目标窗口:main 或 popup 的 id;省略或为空串时为调用方窗口。不会回退到主窗口:调用方不是插件的窗口时以 NOT_FOUND 失败,DUI/CUI 面板以 PANEL_MODE_UNSUPPORTED 失败。
enabledboolean否true 显示 Mica;false 去掉经 setMica 或 setAcrylic 设置的背景。默认 true。
variantstring否mica-alt 为标签页变体;其他值都按 mica。默认 "mica"。
darkModeboolean否深色(true)或浅色(false)背景;省略时不变。

返回值

字段类型说明
enabledboolean回显 enabled。
variantstring实际使用的变体,mica 或 mica-alt。
darkModeboolean回显请求中的 darkMode;未指定该参数时不返回。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

仅 mica-alt 启用备用变体;其余取值(含未识别值)均归一化为 mica。返回的 variant 是归一化后的设定值,不代表屏幕上的实际效果:弹出窗口不支持 Mica Alt,会降级为其他背景,此时返回值仍可能为 variant: "mica-alt"。success 反映底层合成效果是否成功应用;即使窗口有效,平台拒绝该效果时也可能为 false。

js
await fb2k.invoke('window.setMica', { enabled: true, variant: 'mica-alt' });

window.setMicaEffect ​

与 window.setMica 相同。

参数类型必填说明
windowIdstring否目标窗口:main 或 popup 的 id;省略或为空串时为调用方窗口。不会回退到主窗口:调用方不是插件的窗口时以 NOT_FOUND 失败,DUI/CUI 面板以 PANEL_MODE_UNSUPPORTED 失败。
enabledboolean否true 显示 Mica;false 去掉经 setMica 或 setAcrylic 设置的背景。默认 true。
variantstring否mica-alt 为标签页变体;其他值都按 mica。默认 "mica"。
darkModeboolean否深色(true)或浅色(false)背景;省略时不变。

返回值

字段类型说明
enabledboolean回显 enabled。
variantstring实际使用的变体,mica 或 mica-alt。
darkModeboolean回显请求中的 darkMode;未指定该参数时不返回。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('window.setMicaEffect', { enabled: true });

window.setMinSize ​

设置窗口的最小尺寸,小数部分舍去。宿主按目标窗口的 DIP 保存,所以读回时可能差 1 px。窗口比新的下限小时立即长大;最大化、全屏时不动,最小化的窗口在还原时再长大。面板模式下失败。

参数类型必填说明
windowIdstring否目标窗口:main 或 popup 的 id;省略或为空串时为调用方窗口。不会回退到主窗口:调用方不是插件的窗口时以 NOT_FOUND 失败,DUI/CUI 面板以 PANEL_MODE_UNSUPPORTED 失败。
widthnumber否最小宽度,物理像素;0 及以下降到 1 DIP。默认 0。
heightnumber否最小高度,物理像素;0 及以下降到 1 DIP。默认 0。

返回值

字段类型说明
windowIdstring调用实际作用的窗口的 id。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

数值单位为物理像素,按目标窗口的 DPI 换算为宿主的 DIP 存储,使约束在 DPI 变化后仍然稳定。非正值会归一为 1px 下限。施加约束后会立即校正当前窗口尺寸,故已小于新下限的窗口会被放大,而非等到下次用户拖拽。

js
await fb2k.invoke('window.setMinSize', { width: 480, height: 320 });

window.setNoDragRegions ​

设置不可拖动的排除矩形(如拖拽区内部的按钮),替换已有区域。矩形使用页面 CSS 像素,由宿主按 devicePixelRatio 换算。devicePixelRatio 变化时须重新设置。忽略宽高不为正的矩形。在面板模式下失败;调用方非主窗口且非 popup 时以 NOT_FOUND 失败。

参数类型必填说明
regionsWindowRegion[]否不可拖动矩形;省略时为空。
regions[].xnumber否左边缘。默认 0。
regions[].ynumber否上边缘。默认 0。
regions[].widthnumber否宽度。默认 0。
regions[].heightnumber否高度。默认 0。

返回值

字段类型说明
countinteger保留下来的矩形个数。
dpiScalenumber窗口 DPI 除以 96。
scalenumber矩形所乘的缩放比例,即页面的 devicePixelRatio。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('window.setNoDragRegions', {
    regions: [{ x: 690, y: 0, width: 110, height: 32 }],
});

window.setPosition ​

移动调用方窗口的左上角,大小不变,小数部分舍去。面板模式与没有窗口时失败。

参数类型必填说明
xnumber否新的左边缘屏幕坐标。默认 0。
ynumber否新的上边缘屏幕坐标。默认 0。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('window.setPosition', { x: 100, y: 100 });

window.setResizable ​

设置用户能否拖动边框调整窗口大小。设为窗口已有的值照常成功。面板模式下失败;Windows 拒绝新样式时以 OPERATION_FAILED 失败,失败里带 windowId。

参数类型必填说明
windowIdstring否目标窗口:main 或 popup 的 id;省略或为空串时为调用方窗口。不会回退到主窗口:调用方不是插件的窗口时以 NOT_FOUND 失败,DUI/CUI 面板以 PANEL_MODE_UNSUPPORTED 失败。
resizableboolean否用户能否拖动边框调整窗口大小。默认 true。

返回值

字段类型说明
windowIdstring调用实际作用的窗口的 id。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

所有窗口 Shell 均支持在运行时动态切换边框模式,包括完全无边框的弹出窗口(frame: false、transparent: true 且无背景效果):该类窗口移除了整个非客户区,调整边框仅影响边缘命中测试,不改变视觉外观。success: false 表示底层 Win32 样式修改或帧刷新未成功执行,此时请求的状态不会提交。该方法始终作用于当前调用上下文窗口或由 windowId 显式指定的目标窗口。

js
await fb2k.invoke('window.setResizable', { resizable: false });

window.setSize ​

调整调用方窗口的大小,位置不变,小数部分舍去。尺寸受窗口的最小、最大尺寸约束,响应不说明是否被约束过。面板模式与没有窗口时失败。

参数类型必填说明
widthnumber否新的宽度,物理像素,含边框。默认 800。
heightnumber否新的高度,物理像素,含边框。默认 600。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('window.setSize', { width: 1024, height: 640 });

window.setTitle ​

设置调用方窗口的标题,显示在标题栏与任务栏上。面板模式与没有窗口时失败。

参数类型必填说明
titlestring否新标题。默认 "foobar2000"。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('window.setTitle', { title: 'Now Playing' });

window.setZoom ​

设置调用方窗口 WebView 的缩放倍数。此后在本次会话里,首选项的默认缩放不再作用于这个 WebView。调用方窗口自己没有 WebView 时以 NOT_FOUND 失败;WebView2 拒绝该倍数时以 OPERATION_FAILED 失败,失败里带当前生效的 zoom。

参数类型必填说明
zoomnumber否缩放倍数;1 即 100 %。默认 1。

返回值

字段类型说明
zoomnumber调用之后生效的缩放倍数。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('window.setZoom', { zoom: 1.25 });

window.setZoomForDpi ​

把调用方窗口 WebView 的缩放倍数设为 dpi / 96;与 window.setZoom 一样,此后首选项的默认缩放不再作用于它。调用方窗口自己没有 WebView 时以 NOT_FOUND 失败;WebView2 拒绝该倍数时以 OPERATION_FAILED 失败,失败里带返回值的字段。

参数类型必填说明
dpiinteger否要匹配的 DPI;0 及以下用窗口的 DPI,未知时用 96。默认 0。

返回值

字段类型说明
dpiinteger实际使用的 DPI。
zoomnumber调用之后生效的缩放倍数。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
// 省略 dpi 时按调用方窗口当前 DPI 推导缩放
const res = await fb2k.invoke('window.setZoomForDpi');
if (res.success === false) throw new Error(res.error);
const { zoom } = res;

window.startResize ​

开始用鼠标从某条边或某个角调整调用方窗口的大小。在 mousedown 处理函数里、按键仍按着时调用。面板模式与没有窗口时失败。

参数类型必填说明
edgestring否要拖动的边或角:left、right、top、bottom、topleft、topright、bottomleft 或 bottomright。其他值都拖右下角。默认 "bottomright"。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('window.startResize', { edge: 'bottomright' });

window.toggleAlwaysOnTop ​

切换调用方窗口是否保持在其他窗口之上。面板模式下失败;没有窗口时失败并带 enabled: false。

无参数。

返回值

字段类型说明
enabledboolean窗口现在是否保持在其他窗口之上。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.toggleAlwaysOnTop');

window.toggleFullscreen ​

进入全屏,窗口已全屏时退出。面板模式下失败。

参数类型必填说明
windowIdstring否目标窗口:main 或 popup 的 id;省略或为空串时为调用方窗口。不会回退到主窗口:调用方不是插件的窗口时以 NOT_FOUND 失败,DUI/CUI 面板以 PANEL_MODE_UNSUPPORTED 失败。

返回值

字段类型说明
fullscreenboolean窗口现在是否全屏。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('window.toggleFullscreen');

运行时行为与事件 ​

  • 调用上下文与目标定位:window.* 默认作用于发起调用的 WebView。接受 windowId 的方法可显式指定目标窗口(main 代表主窗口,popup ID 由 window.createPopup 或 window.getAllWindows 获取)。在 DUI/CUI 面板模式下,需要独立窗口 Shell 的方法将直接返回失败(不支持或找不到窗口),不会静默回退到主窗口。
  • 矩形坐标换算:window.setDragRegions、window.setNoDragRegions、window.setMaximizeButtonRegion 与 window.setClickThroughExcludeRegions 均使用页面的 CSS 像素矩形。宿主按页面当前的 devicePixelRatio(综合窗口 DPI、Windows 文本大小与页面缩放倍数)换算为物理像素;当页面发生缩放或 DPI 变化时,须重新调用设置。click-through 穿透与关闭确认等 popup 专有 API 会拒绝主窗口目标。
  • 状态流转与事件通知:
    • Shell 状态变更时触发 window:stateChanged。
    • 请求关闭确认的 popup 在关闭前接收 window:beforeClose。
    • Popup 生命周期与多窗协同事件涵盖 window:popupOpened、window:popupClosed、window:message、window:behaviorChanged、window:backdropStateChanged、window:hoverStateChanged、window:minimizeSuppressed 与 window:alwaysOnTopChanged。
    • 事件 payload 属于运行时结构,调用方应容许 Shell 后续扩展新字段。