{"_id":"@bun-win32/windowsaccessbridge-64","_rev":"3-89b99b20c2e40e8b82e9f4cd22c6ffe0","name":"@bun-win32/windowsaccessbridge-64","dist-tags":{"latest":"2.0.1"},"versions":{"1.0.0":{"name":"@bun-win32/windowsaccessbridge-64","version":"1.0.0","keywords":["bun","ffi","win32","windows","windowsaccessbridge-64","java-access-bridge","accessibility","jab","bindings","typescript","dll"],"author":"Stev Peifer <stev.p@outlook.com>","license":"MIT","_id":"@bun-win32/windowsaccessbridge-64@1.0.0","maintainers":[{"name":"obscuritysrl","email":"stev.p@outlook.com"}],"homepage":"https://github.com/ObscuritySRL/bun-win32#readme","bugs":{"url":"https://github.com/ObscuritySRL/bun-win32/issues"},"dist":{"shasum":"0fceacef45550764f13f628b23ced8777c2ac2e8","tarball":"https://registry.npmjs.org/@bun-win32/windowsaccessbridge-64/-/windowsaccessbridge-64-1.0.0.tgz","fileCount":6,"integrity":"sha512-Ta0R2aA6zyR/TlTHMoBusH2X0RGi4dezhOvbwCF7EM6eL6AjPi+zW1Q54iOeGXlrqMxE2eN4YT+Pi7LKih45QA==","signatures":[{"sig":"MEQCIB15plVgUy/U9e5twJylerFKgKQBJZ8JKqvOT+EGTlmnAiBRbPw6ChWRC8OdHQGJNwsde6vCRFAG1FsKp38tz8l1uQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56640},"main":"./index.ts","type":"module","module":"index.ts","shasum":"0fceacef45550764f13f628b23ced8777c2ac2e8","engines":{"bun":">=1.1.0"},"exports":{".":"./index.ts"},"private":false,"scripts":{"test":"bun test ./example/windowsaccessbridge-64.integration.test.ts","example:radar":"bun ./example/accessibility-radar.ts","example:inspector":"bun ./example/jab-inspector.ts"},"_npmUser":{"name":"obscuritysrl","email":"stev.p@outlook.com"},"_integrity":"sha512-Ta0R2aA6zyR/TlTHMoBusH2X0RGi4dezhOvbwCF7EM6eL6AjPi+zW1Q54iOeGXlrqMxE2eN4YT+Pi7LKih45QA==","repository":{"url":"git://github.com/ObscuritySRL/bun-win32.git","type":"git","directory":"packages/windowsaccessbridge-64"},"_npmVersion":"10.8.3","description":"Zero-dependency, zero-overhead Java Access Bridge (WindowsAccessBridge-64.dll) bindings for Bun (FFI) on Windows.","directories":{},"sideEffects":false,"_nodeVersion":"24.3.0","dependencies":{"@bun-win32/core":"1.1.4"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/windowsaccessbridge-64_1.0.0_1782070612106_0.36937242546974547","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@bun-win32/windowsaccessbridge-64","version":"2.0.0","keywords":["bun","ffi","win32","windows","windowsaccessbridge-64","java-access-bridge","accessibility","jab","bindings","typescript","dll"],"author":"Stev Peifer <stev.p@outlook.com>","license":"MIT","_id":"@bun-win32/windowsaccessbridge-64@2.0.0","maintainers":[{"name":"obscuritysrl","email":"stev.p@outlook.com"}],"homepage":"https://github.com/ObscuritySRL/bun-win32#readme","bugs":{"url":"https://github.com/ObscuritySRL/bun-win32/issues"},"dist":{"shasum":"2f1981a0e1ec29613bebc44a6cf5a34a99eaf300","tarball":"https://registry.npmjs.org/@bun-win32/windowsaccessbridge-64/-/windowsaccessbridge-64-2.0.0.tgz","fileCount":6,"integrity":"sha512-ATo6IlxNW2EJT9UBDJMxZp9dE07e6ScEnTdZl1I8evrD0eoruujHHOVvzdTZTWwqRbZo30lQYBNBoERiFCn0hw==","signatures":[{"sig":"MEUCIQCT5+7Tz+ZbkG1yheci3RaZ2Xt6ycFQdR53ky2VPv4LTwIgRObX0dRtG/XN1iCs3IH5DHPv8DazTj+F44PpLKQwGDA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58313},"main":"./index.ts","type":"module","module":"index.ts","shasum":"2f1981a0e1ec29613bebc44a6cf5a34a99eaf300","engines":{"bun":">=1.1.0"},"exports":{".":"./index.ts"},"private":false,"scripts":{"test":"bun test ./example/windowsaccessbridge-64.integration.test.ts","example:radar":"bun ./example/accessibility-radar.ts","example:inspector":"bun ./example/jab-inspector.ts"},"_npmUser":{"name":"obscuritysrl","email":"stev.p@outlook.com"},"_integrity":"sha512-ATo6IlxNW2EJT9UBDJMxZp9dE07e6ScEnTdZl1I8evrD0eoruujHHOVvzdTZTWwqRbZo30lQYBNBoERiFCn0hw==","repository":{"url":"git://github.com/ObscuritySRL/bun-win32.git","type":"git","directory":"packages/windowsaccessbridge-64"},"_npmVersion":"10.8.3","description":"Zero-dependency, zero-overhead Java Access Bridge (WindowsAccessBridge-64.dll) bindings for Bun (FFI) on Windows.","directories":{},"sideEffects":false,"_nodeVersion":"26.3.0","dependencies":{"@bun-win32/core":"2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"latest"},"peerDependencies":{"typescript":"^5"},"_npmOperationalInternal":{"tmp":"tmp/windowsaccessbridge-64_2.0.0_1782435988445_0.9689944870901723","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"author":"Stev Peifer <stev.p@outlook.com>","bugs":{"url":"https://github.com/ObscuritySRL/bun-win32/issues"},"dependencies":{"@bun-win32/core":"2.0.1"},"description":"Zero-dependency, zero-overhead Java Access Bridge (WindowsAccessBridge-64.dll) bindings for Bun (FFI) on Windows.","devDependencies":{"@types/bun":"latest"},"exports":{".":"./index.ts"},"license":"MIT","module":"index.ts","name":"@bun-win32/windowsaccessbridge-64","peerDependencies":{"typescript":"^5"},"private":false,"homepage":"https://github.com/ObscuritySRL/bun-win32#readme","repository":{"type":"git","url":"git://github.com/ObscuritySRL/bun-win32.git","directory":"packages/windowsaccessbridge-64"},"type":"module","version":"2.0.1","main":"./index.ts","keywords":["bun","ffi","win32","windows","windowsaccessbridge-64","java-access-bridge","accessibility","jab","bindings","typescript","dll"],"sideEffects":false,"engines":{"bun":">=1.1.0"},"scripts":{"example:inspector":"bun ./example/jab-inspector.ts","example:radar":"bun ./example/accessibility-radar.ts","test":"bun test ./example/windowsaccessbridge-64.integration.test.ts"},"_id":"@bun-win32/windowsaccessbridge-64@2.0.1","_integrity":"sha512-+x1tqLCV4cN1GYSu788h2qMN+pjc/TR9NuV0OfKOvU5KWVhYfOcV5DVLElLGQW14lchZzbPm6qn7k66qn0fgQQ==","_nodeVersion":"26.3.0","_npmVersion":"10.8.3","shasum":"35fe77206c0cdc28ca7d5c2b96d00405d6299352","dist":{"integrity":"sha512-+x1tqLCV4cN1GYSu788h2qMN+pjc/TR9NuV0OfKOvU5KWVhYfOcV5DVLElLGQW14lchZzbPm6qn7k66qn0fgQQ==","shasum":"35fe77206c0cdc28ca7d5c2b96d00405d6299352","tarball":"https://registry.npmjs.org/@bun-win32/windowsaccessbridge-64/-/windowsaccessbridge-64-2.0.1.tgz","fileCount":6,"unpackedSize":58313,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIED44RvMXSxGvGr0nzrhjbJeOu6WpjeIDeo49YC0w6/SAiEA+0DPzgR6lSBqNFSbQze7UY7AQphcPCswt0S2HDYDKtY="}]},"_npmUser":{"name":"obscuritysrl","email":"stev.p@outlook.com"},"directories":{},"maintainers":[{"name":"obscuritysrl","email":"stev.p@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/windowsaccessbridge-64_2.0.1_1782438214494_0.5635615122842805"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-21T19:36:51.911Z","modified":"2026-06-26T01:43:34.761Z","1.0.0":"2026-06-21T19:36:52.257Z","2.0.0":"2026-06-26T01:06:28.597Z","2.0.1":"2026-06-26T01:43:34.632Z"},"bugs":{"url":"https://github.com/ObscuritySRL/bun-win32/issues"},"author":"Stev Peifer <stev.p@outlook.com>","license":"MIT","homepage":"https://github.com/ObscuritySRL/bun-win32#readme","keywords":["bun","ffi","win32","windows","windowsaccessbridge-64","java-access-bridge","accessibility","jab","bindings","typescript","dll"],"repository":{"type":"git","url":"git://github.com/ObscuritySRL/bun-win32.git","directory":"packages/windowsaccessbridge-64"},"description":"Zero-dependency, zero-overhead Java Access Bridge (WindowsAccessBridge-64.dll) bindings for Bun (FFI) on Windows.","maintainers":[{"name":"obscuritysrl","email":"stev.p@outlook.com"}],"readme":"# @bun-win32/windowsaccessbridge-64\n\nZero-dependency, zero-overhead Java Access Bridge bindings for [Bun](https://bun.sh) on Windows.\n\n## Overview\n\n`@bun-win32/windowsaccessbridge-64` exposes the `WindowsAccessBridge-64.dll` exports using [Bun](https://bun.sh)'s FFI. It provides a single class, `WindowsAccessBridge`, which lazily binds native symbols on first use. You can optionally preload a subset or all symbols up-front via `Preload()`.\n\nThe Java Access Bridge is the bridge that lets Windows assistive technologies read and drive Swing/AWT applications. These bindings cover all 97 exports: window classification, AccessibleContext navigation, text/table/hypertext/value/selection accessors, and the event-callback registration functions.\n\nThe bindings are strongly typed for a smooth DX in TypeScript.\n\n## Features\n\n- [Bun](https://bun.sh)-first ergonomics on Windows 10/11.\n- Direct FFI to `WindowsAccessBridge-64.dll` (window classification, accessible-context inspection, text/table/value queries, event callbacks).\n- In-source docs in `structs/WindowsAccessBridge.ts` with links to the upstream OpenJDK headers.\n- Lazy binding on first call; optional eager preload (`WindowsAccessBridge.Preload()`).\n- No wrapper overhead; calls map 1:1 to native exports.\n- Strongly-typed aliases (see `types/WindowsAccessBridge.ts`).\n\n## Requirements\n\n- [Bun](https://bun.sh) runtime\n- Windows 10 or later\n- `WindowsAccessBridge-64.dll` (installed with any Java runtime; on `PATH`/System32)\n- A running Java application with the Access Bridge enabled (`jabswitch -enable`) to inspect live UI\n\n## Installation\n\n```sh\nbun add @bun-win32/windowsaccessbridge-64\n```\n\n## Quick Start\n\n```ts\nimport WindowsAccessBridge from '@bun-win32/windowsaccessbridge-64';\n\n// 1. Initialize the bridge once.\nWindowsAccessBridge.Windows_run();\n\n// 2. Each Java VM registers its windows with this process by posting messages after\n//    Windows_run. Pump the message queue (e.g. via User32 PeekMessageW/DispatchMessageW)\n//    for ~1s so registration lands before you classify any window.\n\n// 3. Classify a window and read its root AccessibleContext.\nif (WindowsAccessBridge.isJavaWindow(hWnd)) {\n  const vmID = Buffer.alloc(4);\n  const context = Buffer.alloc(8);\n  WindowsAccessBridge.getAccessibleContextFromHWND(hWnd, vmID.ptr, context.ptr);\n\n  const info = Buffer.alloc(6188); // sizeof(AccessibleContextInfo)\n  WindowsAccessBridge.getAccessibleContextInfo(vmID.readInt32LE(0), context.readBigUInt64LE(0), info.ptr);\n\n  const name = info.toString('utf16le', 0, 2048).replace(/\\0.*$/s, ''); // name[MAX_STRING_SIZE]\n  const role = info.toString('utf16le', 4096, 4096 + 512).replace(/\\0.*$/s, ''); // role[SHORT_STRING_SIZE]\n  console.log(role, name);\n\n  WindowsAccessBridge.releaseJavaObject(vmID.readInt32LE(0), context.readBigUInt64LE(0));\n}\n```\n\n> [!NOTE]\n> AI agents: see `AI.md` for the package binding contract and source-navigation guidance. It explains how to use the package without scanning the entire implementation.\n\n## Examples\n\nRun the included examples:\n\n```sh\nbun run example/jab-inspector.ts        # exhaustive Java accessibility-tree diagnostic\nbun run example/accessibility-radar.ts  # animated radar that lights up Java windows live\n```\n\n## Notes\n\n- Either rely on lazy binding or call `WindowsAccessBridge.Preload()`.\n- The DLL exports use lower-camelCase internal names (`getAccessibleContextInfo`, `setFocusGainedFP`); signatures follow the OpenJDK `AccessBridgeCalls.h` / `AccessBridgePackages.h` headers.\n- Most query functions round-trip to a live JVM over Windows messages — they need a running Java app and a pumped message loop in the calling process to return data.\n- Windows only. Bun runtime required.\n- **SAL types & naming:** nullability is in the **type** — `Optional<T>` (formally optional, SAL `_*opt_`) and `Nullable<T>` (plain `[in]`/`[out]` the docs say can be NULL), the null sentinel derived from `T` (`null` for pointers `LP*`/`P*`, `0n` for handles/by-value addresses); direction is in the **parameter name** — `_out` (`_Out_`), `_in_out` (`_Inout_`), `_In_` bare. See `AI.md` and the repo `AGENTS.md`.\n","readmeFilename":"README.md"}