Z ZPI 文档 v0.3.8
介绍页

源码

tests/helpers/native-window-order.ts

typescript30 行查看原文
import { execFile } from "node:child_process";
import { join, resolve } from "node:path";
import { promisify } from "node:util";

/** Read-only WindowServer metadata; no pixels, titles, clipboard or input. */
export async function nativeWindowOrder(directory: string, pids: (number | undefined)[]) {
  const execute = promisify(execFile);
  const path = join(directory, "window-order");
  await execute("clang", [
    "-fobjc-arc",
    "-framework",
    "AppKit",
    "-framework",
    "CoreGraphics",
    resolve("tests/probes/macos-desktop-observer.m"),
    "-o",
    path,
  ]);
  return async () => {
    const record = JSON.parse((await execute(path, ["--once"])).stdout) as {
      front: number;
      details: { pid: number; layer: number }[];
    };
    return {
      front: pids.includes(record.front) ? record.front : 0,
      details: record.details.filter((window) => pids.includes(window.pid)),
    };
  };
}