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
相关产品推荐
相关产品推荐

