@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.
- package/.claude/settings.local.json +8 -1
- package/ffi-wrapper.d.ts.map +1 -1
- package/ffi-wrapper.js +17 -11
- package/ffi-wrapper.js.map +1 -1
- package/ffi-wrapper.ts +17 -11
- package/package.json +1 -1
|
@@ -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": []
|
package/ffi-wrapper.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
|
99
|
-
|
|
100
|
-
|
|
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
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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) => {
|
package/ffi-wrapper.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ffi-wrapper.js","sourceRoot":"","sources":["ffi-wrapper.ts"],"names":[],"mappings":"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
|
|
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,wEAAwE;IACxE,+EAA+E;IAC/E,MAAM,cAAc,GAAU,EAAE,CAAC;IAEjC,OAAO;QACH,WAAW,EAAE,CAAC,QAAmD,EAAE,MAAc,EAAE,EAAE;YACjF,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;YACvE,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,MAAa,CAAC,CAAC;YACjD,uCAAuC;YACvC,IAAI,cAAc,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gBAC9B,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9B,CAAC;YACD,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,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;YACvE,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC5D,uCAAuC;YACvC,IAAI,cAAc,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gBAC9B,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9B,CAAC;YACD,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"}
|
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
|
|
140
|
-
|
|
141
|
-
|
|
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
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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) => {
|