@bobfrankston/winpos 2.0.24 → 2.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,14 @@
2
2
  "permissions": {
3
3
  "allow": [
4
4
  "Bash(npm search:*)",
5
- "Bash(npm run installer:*)"
5
+ "Bash(npm run installer:*)",
6
+ "Bash(npm run build:*)",
7
+ "Bash(node index.js:*)",
8
+ "Bash(git add:*)",
9
+ "Bash(git diff-index:*)",
10
+ "Bash(git commit:*)",
11
+ "Bash(npm version:*)",
12
+ "Bash(git push:*)"
6
13
  ],
7
14
  "deny": [],
8
15
  "ask": []
@@ -1 +1 @@
1
- {"version":3,"file":"ffi-wrapper.d.ts","sourceRoot":"","sources":["ffi-wrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,QAAA,MAAM,KAAK,SAA6B,CAAC;AAGzC,MAAM,WAAW,IAAI;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB;AAGD,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,UAAU,IAAI,CAAC;AAE5B,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,MAAM,WAAW,UAAU;IACvB,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9F,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IACtE,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;IACpD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IAC7G,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC/C,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IACxD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACpC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACpC,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,OAAO,CAAC;IAC9D,mBAAmB,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAChJ,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;CAC7D;AA6JD,QAAA,MAAM,MAAM,YAAwB,CAAC;AAErC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"ffi-wrapper.d.ts","sourceRoot":"","sources":["ffi-wrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,QAAA,MAAM,KAAK,SAA6B,CAAC;AAGzC,MAAM,WAAW,IAAI;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB;AAGD,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,UAAU,IAAI,CAAC;AAE5B,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,MAAM,WAAW,UAAU;IACvB,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9F,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IACtE,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;IACpD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IAC7G,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC/C,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IACxD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACpC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACpC,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,OAAO,CAAC;IAC9D,mBAAmB,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAChJ,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;CAC7D;AAmKD,QAAA,MAAM,MAAM,YAAwB,CAAC;AAErC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC"}
package/ffi-wrapper.js CHANGED
@@ -95,15 +95,18 @@ async function initializeFFI() {
95
95
  const MonitorEnumProc = koffi.proto('bool __stdcall MonitorEnumProc(void *hMonitor, void *hdcMonitor, RECT *lprcMonitor, void *dwData)');
96
96
  const EnumDisplayMonitors = lib.func('bool __stdcall EnumDisplayMonitors(void *hdc, RECT *lprcClip, MonitorEnumProc *lpfnEnum, void *dwData)');
97
97
  const GetMonitorInfoW = lib.func('bool __stdcall GetMonitorInfoW(void *hMonitor, void *lpmi)');
98
- // Keep references to registered callbacks while native calls are in progress
99
- let __enumWindowsCbRef = null;
100
- let __enumDisplayMonitorsCbRef = null;
98
+ // Keep references to registered callbacks to prevent garbage collection
99
+ // These must persist for the entire duration of the native callback invocation
100
+ const __callbackRefs = [];
101
101
  return {
102
102
  EnumWindows: (callback, lParam) => {
103
- __enumWindowsCbRef = koffi.register(callback, koffi.pointer(EnumWindowsProc));
104
- const result = EnumWindows(__enumWindowsCbRef, lParam);
105
- // Release reference after enumeration is complete (not during)
106
- __enumWindowsCbRef = null;
103
+ const cbRef = koffi.register(callback, koffi.pointer(EnumWindowsProc));
104
+ __callbackRefs.push(cbRef);
105
+ const result = EnumWindows(cbRef, lParam);
106
+ // Clean up old references periodically
107
+ if (__callbackRefs.length > 100) {
108
+ __callbackRefs.length = 0;
109
+ }
107
110
  return result;
108
111
  },
109
112
  GetWindowTextW,
@@ -126,10 +129,13 @@ async function initializeFFI() {
126
129
  IsIconic,
127
130
  GetWindowPlacement,
128
131
  EnumDisplayMonitors: (callback, dwData) => {
129
- __enumDisplayMonitorsCbRef = koffi.register(callback, koffi.pointer(MonitorEnumProc));
130
- const result = EnumDisplayMonitors(null, null, __enumDisplayMonitorsCbRef, null);
131
- // Release reference after enumeration is complete (not during)
132
- __enumDisplayMonitorsCbRef = null;
132
+ const cbRef = koffi.register(callback, koffi.pointer(MonitorEnumProc));
133
+ __callbackRefs.push(cbRef);
134
+ const result = EnumDisplayMonitors(null, null, cbRef, null);
135
+ // Clean up old references periodically
136
+ if (__callbackRefs.length > 100) {
137
+ __callbackRefs.length = 0;
138
+ }
133
139
  return result;
134
140
  },
135
141
  GetMonitorInfoW: (hMonitor, lpmi) => {
@@ -1 +1 @@
1
- {"version":3,"file":"ffi-wrapper.js","sourceRoot":"","sources":["ffi-wrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wCAAwC;AACxC,MAAM,KAAK,GAAG,OAAO,GAAG,KAAK,WAAW,CAAC;AAUzC,yBAAyB;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAC/B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AACpC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC;AAC3B,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAS5B,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAgBtC,KAAK,UAAU,aAAa;IACxB,IAAI,KAAK,EAAE,CAAC;QACR,gDAAgD;QAChD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QAEpD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE;YACrC,WAAW,EAAE;gBACT,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;gBAChC,OAAO,EAAE,OAAO,CAAC,IAAI;aACxB;YACD,cAAc,EAAE;gBACZ,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;gBAC7C,OAAO,EAAE,OAAO,CAAC,GAAG;aACvB;YACD,aAAa,EAAE;gBACX,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;gBAChC,OAAO,EAAE,OAAO,CAAC,IAAI;aACxB;YACD,UAAU,EAAE;gBACR,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC;gBACrF,OAAO,EAAE,OAAO,CAAC,IAAI;aACxB;YACD,mBAAmB,EAAE;gBACjB,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;gBACnB,OAAO,EAAE,OAAO,CAAC,IAAI;aACxB;YACD,UAAU,EAAE;gBACR,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;gBAChC,OAAO,EAAE,OAAO,CAAC,IAAI;aACxB;YACD,QAAQ,EAAE;gBACN,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;gBACnB,OAAO,EAAE,OAAO,CAAC,IAAI;aACxB;YACD,QAAQ,EAAE;gBACN,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;gBACnB,OAAO,EAAE,OAAO,CAAC,IAAI;aACxB;YACD,kBAAkB,EAAE;gBAChB,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;gBAChC,OAAO,EAAE,OAAO,CAAC,IAAI;aACxB;YACD,mBAAmB,EAAE;gBACjB,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;gBAC1D,OAAO,EAAE,OAAO,CAAC,IAAI;aACxB;YACD,eAAe,EAAE;gBACb,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;gBAChC,OAAO,EAAE,OAAO,CAAC,IAAI;aACxB;SACJ,CAAC,CAAC;QAEH,OAAO,OAAc,CAAC;IAC1B,CAAC;IAED,oDAAoD;IACpD,MAAM,KAAK,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC9C,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAErC,uCAAuC;IACvC,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAEhG,wBAAwB;IACxB,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;QACrC,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,KAAK;QACV,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,8BAA8B;IAC9B,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;IACpG,MAAM,cAAc,GAAG,GAAG,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;IAC/G,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;IACzF,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,6FAA6F,CAAC,CAAC;IAC3H,MAAM,mBAAmB,GAAG,GAAG,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IACvF,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACjE,MAAM,kBAAkB,GAAG,GAAG,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;IAEpG,gCAAgC;IAChC,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,mGAAmG,CAAC,CAAC;IACzI,MAAM,mBAAmB,GAAG,GAAG,CAAC,IAAI,CAAC,wGAAwG,CAAC,CAAC;IAC/I,MAAM,eAAe,GAAG,GAAG,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;IAE/F,6EAA6E;IAC7E,IAAI,kBAAkB,GAAQ,IAAI,CAAC;IACnC,IAAI,0BAA0B,GAAQ,IAAI,CAAC;IAE3C,OAAO;QACH,WAAW,EAAE,CAAC,QAAmD,EAAE,MAAc,EAAE,EAAE;YACjF,kBAAkB,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;YAC9E,MAAM,MAAM,GAAG,WAAW,CAAC,kBAAkB,EAAE,MAAa,CAAC,CAAC;YAC9D,+DAA+D;YAC/D,kBAAkB,GAAG,IAAI,CAAC;YAC1B,OAAO,MAAM,CAAC;QAClB,CAAC;QACD,cAAc;QACd,aAAa,EAAE,CAAC,IAAY,EAAE,IAAS,EAAE,EAAE;YACvC,oDAAoD;YACpD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAW,EAAE,OAAO,CAAC,CAAC;YACnD,IAAI,MAAM,EAAE,CAAC;gBACT,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAClC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC1C,CAAC;YACD,OAAO,MAAM,CAAC;QAClB,CAAC;QACD,UAAU;QACV,mBAAmB;QACnB,UAAU;QACV,QAAQ;QACR,QAAQ;QACR,kBAAkB;QAClB,mBAAmB,EAAE,CAAC,QAA6F,EAAE,MAAc,EAAE,EAAE;YACnI,0BAA0B,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;YACtF,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,CAAC,CAAC;YACjF,+DAA+D;YAC/D,0BAA0B,GAAG,IAAI,CAAC;YAClC,OAAO,MAAM,CAAC;QAClB,CAAC;QACD,eAAe,EAAE,CAAC,QAAgB,EAAE,IAAS,EAAE,EAAE;YAC7C,yBAAyB;YACzB,yBAAyB;YACzB,4BAA4B;YAC5B,yBAAyB;YACzB,0BAA0B;YAC1B,kBAAkB;YAClB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAChC,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YACtC,MAAM,MAAM,GAAG,eAAe,CAAC,QAAe,EAAE,MAAM,CAAC,CAAC;YACxD,IAAI,MAAM,EAAE,CAAC;gBACT,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACrC,IAAI,CAAC,SAAS,GAAG;oBACb,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;oBAC3B,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;oBAC1B,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC7B,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;iBACjC,CAAC;gBACF,IAAI,CAAC,MAAM,GAAG;oBACV,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC5B,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC3B,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC7B,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;iBACjC,CAAC;gBACF,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,MAAM,CAAC;QAClB,CAAC;KACJ,CAAC;AACN,CAAC;AAED,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;AAErC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"ffi-wrapper.js","sourceRoot":"","sources":["ffi-wrapper.ts"],"names":[],"mappings":"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"}
package/ffi-wrapper.ts CHANGED
@@ -136,16 +136,19 @@ async function initializeFFI(): Promise<WindowsAPI> {
136
136
  const EnumDisplayMonitors = lib.func('bool __stdcall EnumDisplayMonitors(void *hdc, RECT *lprcClip, MonitorEnumProc *lpfnEnum, void *dwData)');
137
137
  const GetMonitorInfoW = lib.func('bool __stdcall GetMonitorInfoW(void *hMonitor, void *lpmi)');
138
138
 
139
- // Keep references to registered callbacks while native calls are in progress
140
- let __enumWindowsCbRef: any = null;
141
- let __enumDisplayMonitorsCbRef: any = null;
139
+ // Keep references to registered callbacks to prevent garbage collection
140
+ // These must persist for the entire duration of the native callback invocation
141
+ const __callbackRefs: any[] = [];
142
142
 
143
143
  return {
144
144
  EnumWindows: (callback: (hwnd: bigint, lParam: bigint) => boolean, lParam: bigint) => {
145
- __enumWindowsCbRef = koffi.register(callback, koffi.pointer(EnumWindowsProc));
146
- const result = EnumWindows(__enumWindowsCbRef, lParam as any);
147
- // Release reference after enumeration is complete (not during)
148
- __enumWindowsCbRef = null;
145
+ const cbRef = koffi.register(callback, koffi.pointer(EnumWindowsProc));
146
+ __callbackRefs.push(cbRef);
147
+ const result = EnumWindows(cbRef, lParam as any);
148
+ // Clean up old references periodically
149
+ if (__callbackRefs.length > 100) {
150
+ __callbackRefs.length = 0;
151
+ }
149
152
  return result;
150
153
  },
151
154
  GetWindowTextW,
@@ -168,10 +171,13 @@ async function initializeFFI(): Promise<WindowsAPI> {
168
171
  IsIconic,
169
172
  GetWindowPlacement,
170
173
  EnumDisplayMonitors: (callback: (hMonitor: bigint, hdcMonitor: bigint, lprcMonitor: any, dwData: bigint) => boolean, dwData: bigint) => {
171
- __enumDisplayMonitorsCbRef = koffi.register(callback, koffi.pointer(MonitorEnumProc));
172
- const result = EnumDisplayMonitors(null, null, __enumDisplayMonitorsCbRef, null);
173
- // Release reference after enumeration is complete (not during)
174
- __enumDisplayMonitorsCbRef = null;
174
+ const cbRef = koffi.register(callback, koffi.pointer(MonitorEnumProc));
175
+ __callbackRefs.push(cbRef);
176
+ const result = EnumDisplayMonitors(null, null, cbRef, null);
177
+ // Clean up old references periodically
178
+ if (__callbackRefs.length > 100) {
179
+ __callbackRefs.length = 0;
180
+ }
175
181
  return result;
176
182
  },
177
183
  GetMonitorInfoW: (hMonitor: bigint, lpmi: any) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bobfrankston/winpos",
3
- "version": "2.0.24",
3
+ "version": "2.0.26",
4
4
  "description": "TypeScript implementation of winpos - Windows window positioning utility",
5
5
  "type": "module",
6
6
  "main": "index.js",