Skip to content

窗口交互

用来实现一些跟 uTools 窗口相关的功能

utools.hideMainWindow(isRestorePreWindow)

执行该方法将会隐藏 uTools 主窗口,包括此时正在主窗口运行的插件应用,分离的插件应用不会被隐藏。

类型定义

ts
function hideMainWindow(): boolean;
function hideMainWindow(isRestorePreWindow: boolean): boolean;
  • isRestorePreWindow表示是否焦点回归到前面的活动窗口,默认 true

示例代码

ts
utools.hideMainWindow();

utools.showMainWindow()

执行该方法将会显示 uTools 主窗口,包括此时正在主窗口运行的插件应用。

类型定义

ts
function showMainWindow(): boolean;

示例代码

ts
utools.showMainWindow();

utools.setExpendHeight(height)

设置插件应用在主窗口中的高度,单位为像素。

类型定义

ts
function setExpendHeight(height: number): boolean;

示例代码

ts
utools.setExpendHeight(300);

utools.setSubInput(onChange[, placeholder[, isFocus]])

设置子输入框,进入插件应用后,原本 uTools 的搜索条主输入框将会变成子输入框,子输入框可以为插件应用所使用。

类型定义

ts
function setSubInput(onChange: (details: { text: string }) => void): boolean;
function setSubInput(
  onChange: (details: { text: string }) => void,
  placeholder: string
): boolean;
function setSubInput(
  onChange: (details: { text: string }) => void,
  placeholder: string,
  isFocus: boolean
): boolean;
  • onChange: 输入框内容变化时的回调函数
  • placeholder: 输入框占位符
  • isFocus: 是否自动聚焦,默认为 true

示例代码

ts
utools.setSubInput(({ text }) => {
  console.log(text);
}, "搜索");

效果截图

设置子输入框
设置子输入框

utools.removeSubInput()

移除已经设置的子输入框,在插件应用切换到其他页面时可以重新设置子输入框为其所用。

类型定义

ts
function removeSubInput(): boolean;

示例代码

ts
utools.removeSubInput();

utools.setSubInputValue(value)

直接对子输入框的值进行设置。

类型定义

ts
function setSubInputValue(value: string): boolean;

示例代码

ts
utools.setSubInputValue("hello world");

utools.subInputFocus()

聚焦子输入框。

类型定义

ts
function subInputFocus(): boolean;

示例代码

ts
utools.subInputFocus();

utools.subInputBlur()

子输入框失去焦点,插件应用获得焦点

类型定义

ts
function subInputBlur(): boolean;

示例代码

ts
utools.subInputBlur();

utools.subInputSelect()

子输入框获得焦点并选中子输入框的内容

类型定义

ts
function subInputSelect(): boolean;

示例代码

ts
utools.subInputSelect();

utools.outPlugin([isKill])

退出插件的窗口,插件应用进入后台。

类型定义

ts
function outPlugin(): boolean;
function outPlugin(isKill:boolean): boolean; // 版本:>=5.2.0
  • isSkilltrue 时,退出插件的同时,会完全杀死插件进程。若为 false 或者没有传递任何值时,则将插件退出到后台
    • 版本:>=5.2.0

示例代码

ts
utools.outPlugin();

utools.redirect(label[, payload])

跳转到另一个插件应用,并可以携带参数,如果插件应用不存在,则跳转到插件应用商店进行下载。

类型定义

ts
function redirect(label: string | [string, string], payload?: any): boolean;
  • labelstring 时,传递插件名字。若传递数组,则第一个元素为插件名字,第二个元素为插件功能指令
  • payload 为跳转时附带的参数,若为 undefined,则不附带任何参数

示例代码

ts
// 跳转到插件应用「聚合翻译」并翻译内容
utools.redirect(["聚合翻译", "翻译"], "hello world");

// 找到 “翻译” 指令,并自动跳转到对应插件应用
utools.redirect("翻译", "hello world");

// 跳转到插件应用「OCR 文字识别」并识别图片中文字
utools.redirect(["OCR 文字识别", "OCR 文字识别"], {
  type: "img",
  data: "data:image/png;base64,", // base64
});

// 跳转到插件应用「JSON 编辑器」查看 Json 文件
utools.redirect(["JSON 编辑器", "Json"], {
  type: "files",
  data: "/path/test.json", // 支持数组
});

utools.showOpenDialog(options)

弹出文件选择框

类型定义

ts
function showOpenDialog(options: OpenDialogOptions): string[] | undefined;

OpenDialogOptionsElectron showOpenDialogSync#options 一致

示例代码

ts
const files = utools.showOpenDialog({
  filters: [{ name: "plugin.json", extensions: ["json"] }],
  properties: ["openFile"],
});

console.log(files);

utools.showSaveDialog(options)

弹出文件保存框

类型定义

ts
function showSaveDialog(options: SaveDialogOptions): string[] | undefined;

SaveDialogOptionsElectron showSaveDialogSync#options 一致

示例代码

ts
utools.showSaveDialog({
  title: "保存位置",
  defaultPath: utools.getPath("downloads"),
  buttonLabel: "保存",
});

utools.findInPage(text[, options])

在当前页面中查找文本

类型定义

ts
function findInPage(text: string, options?: FindInPageOptions): void;

FindInPageOptionsElectron webContents.findInPage#options 一致

示例代码

ts
utools.findInPage("hello world");

utools.stopFindInPage(action)

停止查找,与findInPage 配合使用

类型定义

ts
function stopFindInPage(
  action: "clearSelection" | "keepSelection" | "activateSelection"
): void;

action: clearSelection 清除选中文本,keepSelection 保留选中文本,activateSelection 激活选中文本,默认值为 clearSelection

示例代码

ts
utools.stopFindInPage("clearSelection");

utools.startDrag(filePath)

从插件中拖拽文件到其他窗口,拖拽产生一系列原生文件

类型定义

ts
function startDrag(filePath: string | string[]): void;

filePath 是文件路径,可以是文件路径数组

示例代码

ts
utools.startDrag("./test.txt");
utools.startDrag(["./test.txt", "./test2.txt"]);

utools.createBrowserWindow(url[, options][, callback])

创建一个浏览器窗口

类型定义

ts
function createBrowserWindow(
  url: string,
  options: BrowserWindowConstructorOptions
): BrowserWindow;
function createBrowserWindow(
  url: string,
  options: BrowserWindowConstructorOptions,
  callback: Function
): BrowserWindow;

提示

  • url 必须是一个本地文件路径,并且为相对路径。
  • options 参数参考 Electron 的 BrowserWindowConstructorOptions注意:preload 需配置相对位置
  • callback 会在页面加载完成后被调用。
  • BrowserWindow 由 uTools 定制,大部分属性参考 Electron 的 BrowserWindow

示例代码

js
const ubWindow = utools.createBrowserWindow(
  "test.html",
  {
    show: false,
    title: "测试窗口",
    webPreferences: {
      preload: "preload.js",
    },
  },
  () => {
    // 显示
    ubWindow.show();
    // 置顶
    ubWindow.setAlwaysOnTop(true);
    // 窗口全屏
    ubWindow.setFullScreen(true);
    // 向子窗口传递数据
    ubWindow.webContents.send("ping", "test");
    // 执行脚本
    ubWindow
      .webContents
      .executeJavaScript(
        'fetch("https://jsonplaceholder.typicode.com/users/1").then(resp => resp.json())'
      )
      .then((result) => {
        console.log(result); // Will be the JSON object from the fetch call
      });
  }
);
console.log(ubWindow);
js
// 在新建窗口的 preload.js 中接收父窗口传递过来的数据
const { ipcRenderer } = require("electron");
ipcRenderer.on("ping", (event, data) => {
  console.log(data);
});
utools.sendToParent("pong", "hello world"); // 版本:>= 6.1.0

utools.sendToParent(channel[, ...args])

发送消息到父窗口

类型定义

ts
function sendToParent(channel: string, ...args: any[]): void; // 版本:>=6.1.0

示例代码

ts
// 通过 utools.createBrowserWindow 创建窗口的 javasript 调用
utools.sendToParent("channel", "hello", 123); // 版本:>= 6.1.0

utools.isDarkColors()

检测当前是否为深色模式

类型定义

ts
function isDarkColors(): boolean;

示例代码

ts
utools.onPluginEnter(({ code, type, payload }) => {
  document.body.className = utools.isDarkColors() ? "dark-mode" : "";
});

utools.getWindowType()

获取当前窗口类型, 'main' 主窗口、'detach' 分离窗口、'browser' 由 createBrowserWindow 创建的窗口

类型定义

ts
function getWindowType(): "main" | "detach" | "browser";

示例代码

ts
utools.onPluginEnter(({ code, type, payload }) => {
  if (utools.getWindowType() === "main") {
    utools.showNotification("当前窗口为主窗口");
  }
});