You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AutoHotkey中实现窗口初始位置存储与恢复的技术问题

窗口尺寸记录与恢复的问题解决建议

一、先搞定语法错误

你写的history.push(hwnd:{x:winX, y:winY, w:winW, h:winH})报错,是因为想把变量hwnd作为对象键时,直接写hwnd:会被当成字面量字符串键,而不是用hwnd变量的值当键。正确写法要用方括号包裹变量(计算属性名):

// 修正后的push代码
history.push({ [hwnd]: { x: winX, y: winY, w: winW, h: winH } });

二、优化数据结构(别用数组折腾了)

你想以hwnd为键存窗口信息,用数组+自定义查询函数完全没必要,直接用对象或Map更简单高效:

1. 普通对象(适合hwnd是字符串/数字的情况)

// 初始化存储容器
const windowRecords = {};

// 记录窗口初始状态
windowRecords[hwnd] = { x: winX, y: winY, w: winW, h: winH };

// 查询直接用键取,不用遍历
const initialState = windowRecords[hwnd];
if (initialState) {
  // 这里写恢复窗口的逻辑,比如设置窗口位置为initialState.x、initialState.y
}

2. Map(更灵活,支持任意类型的hwnd)

如果hwnd不是字符串/数字,用Map更合适:

const windowRecords = new Map();

// 记录
windowRecords.set(hwnd, { x: winX, y: winY, w: winW, h: winH });

// 查询
const initialState = windowRecords.get(hwnd);
if (initialState) {
  // 恢复窗口
}

这两种方式都能直接通过hwnd快速找到对应信息,比数组遍历快多了,还不用自己写查询函数。

三、非要用数组的话这么改

如果坚持用数组存储,那每个数组元素得是标准的键值对对象,别搞特殊写法:

// 记录时
history.push({ hwnd: hwnd, x: winX, y: winY, w: winW, h: winH });

// 查询函数简化成这样
function findWindowRecord(targetHwnd) {
  return history.find(item => item.hwnd === targetHwnd);
}

// 使用示例
const initialState = findWindowRecord(yourHwnd);
if (initialState) {
  // 恢复窗口
}

内容的提问来源于stack exchange,提问作者Ralf_Reddings

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 21:00:39