quickwin 3.0.0 → 3.0.2
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/README.en.md +3 -0
- package/README.md +2 -0
- package/lib/abort.d.ts +21 -0
- package/lib/assert.d.ts +2 -0
- package/lib/bitmap.d.ts +7 -0
- package/lib/cache-utils.d.ts +6 -0
- package/lib/certs.d.ts +1 -0
- package/lib/dpi.d.ts +9 -0
- package/lib/dumpRects.d.ts +2 -0
- package/lib/exec-log.d.ts +23 -0
- package/lib/fetch.d.ts +4 -0
- package/lib/ffi/bind.d.ts +70 -0
- package/lib/ffi/ctype.d.ts +117 -0
- package/lib/ffi/index.d.ts +2 -0
- package/lib/ffi/struct.d.ts +174 -0
- package/lib/http-common.d.ts +143 -0
- package/lib/http-server.d.ts +59 -0
- package/lib/polyfill.d.ts +22 -0
- package/lib/react-qw/components/Button.d.ts +9 -0
- package/lib/react-qw/components/CheckBox.d.ts +11 -0
- package/lib/react-qw/components/ComboBox.d.ts +11 -0
- package/lib/react-qw/components/DateTimePicker.d.ts +15 -0
- package/lib/react-qw/components/Input.d.ts +15 -0
- package/lib/react-qw/components/Link.d.ts +12 -0
- package/lib/react-qw/components/ListBox.d.ts +13 -0
- package/lib/react-qw/components/ListView.d.ts +37 -0
- package/lib/react-qw/components/PathPicker.d.ts +23 -0
- package/lib/react-qw/components/ProgressBar.d.ts +9 -0
- package/lib/react-qw/components/RadioButton.d.ts +11 -0
- package/lib/react-qw/components/ScrollView.d.ts +9 -0
- package/lib/react-qw/components/Slider.d.ts +12 -0
- package/lib/react-qw/components/Tab.d.ts +14 -0
- package/lib/react-qw/components/Tooltip.d.ts +7 -0
- package/lib/react-qw/components/TreeView.d.ts +18 -0
- package/lib/react-qw/components/index.d.ts +16 -0
- package/lib/react-qw/index.d.ts +24 -0
- package/lib/react-qw/layout.d.ts +29 -0
- package/lib/react-qw/nmhdr.d.ts +1 -0
- package/lib/react-qw/props.d.ts +2 -0
- package/lib/react-qw/reconciler.d.ts +21 -0
- package/lib/stream.d.ts +20 -0
- package/lib/text-codec.d.ts +39 -0
- package/lib/text-measure.d.ts +14 -0
- package/lib/url.d.ts +54 -0
- package/lib/websocket.d.ts +73 -0
- package/lib/windows/{advapi32.ts → advapi32.d.ts} +6 -21
- package/lib/windows/comctl32.d.ts +14 -0
- package/lib/windows/comdlg32.d.ts +4 -0
- package/lib/windows/{gdi32.ts → gdi32.d.ts} +161 -98
- package/lib/windows/{kernel32.ts → kernel32.d.ts} +138 -115
- package/lib/windows/{msimg32.ts → msimg32.d.ts} +11 -14
- package/lib/windows/ntdll.d.ts +5 -0
- package/lib/windows/ole32.d.ts +3 -0
- package/lib/windows/{psapi.ts → psapi.d.ts} +9 -18
- package/lib/windows/{shell32.ts → shell32.d.ts} +25 -24
- package/lib/windows/structs.d.ts +3141 -0
- package/lib/windows/{user32.ts → user32.d.ts} +196 -193
- package/lib/windows/version.d.ts +27 -0
- package/lib/windows/{winspool.ts → winspool.d.ts} +18 -32
- package/package.json +15 -8
- package/qwin-nowasm-x86.exe +0 -0
- package/qwin-nowasm.exe +0 -0
- package/qwin-x86.exe +0 -0
- package/qwin.exe +0 -0
- package/examples/PdfCanvas.js +0 -38
- package/examples/PdfCanvas.tsx +0 -54
- package/examples/execd/main.js +0 -23379
- package/examples/execd/tray.js +0 -192
- package/examples/execd/worker.js +0 -122
- package/examples/pdf_preview2.js +0 -398
- package/examples/pdf_preview2.ts +0 -353
- package/examples/pdf_viewer.js +0 -22515
- package/examples/pdf_viewer.tsx +0 -228
- package/examples/test_gallery.js +0 -18692
- package/examples/test_gallery.tsx +0 -291
- package/examples/test_react_lazy.js +0 -18560
- package/examples/test_react_lazy.tsx +0 -65
- package/examples/test_react_listbox.js +0 -18562
- package/examples/test_react_listbox.tsx +0 -73
- package/examples/test_root_window.js +0 -18532
- package/examples/test_root_window.tsx +0 -41
- package/examples/test_tab.js +0 -18563
- package/examples/test_tab.tsx +0 -77
- package/examples/tray_demo.js +0 -86
- package/examples/tray_demo.tsx +0 -89
- package/lib/abort.ts +0 -69
- package/lib/assert.ts +0 -7
- package/lib/bitmap.ts +0 -39
- package/lib/cache-utils.ts +0 -40
- package/lib/certs.ts +0 -258
- package/lib/dpi.ts +0 -31
- package/lib/dumpRects.ts +0 -34
- package/lib/exec-log.ts +0 -30
- package/lib/fetch.ts +0 -589
- package/lib/ffi/bind.ts +0 -540
- package/lib/ffi/ctype.ts +0 -371
- package/lib/ffi/index.ts +0 -6
- package/lib/ffi/struct.ts +0 -780
- package/lib/http-common.ts +0 -441
- package/lib/http-server.ts +0 -604
- package/lib/polyfill.ts +0 -171
- package/lib/react-qw/components/index.ts +0 -17
- package/lib/react-qw/index.ts +0 -96
- package/lib/react-qw/layout.ts +0 -111
- package/lib/react-qw/nmhdr.ts +0 -7
- package/lib/react-qw/props.ts +0 -41
- package/lib/react-qw/reconciler.ts +0 -379
- package/lib/stream.ts +0 -22
- package/lib/text-codec.ts +0 -171
- package/lib/text-measure.ts +0 -44
- package/lib/url.ts +0 -201
- package/lib/websocket.ts +0 -600
- package/lib/windows/comctl32.ts +0 -20
- package/lib/windows/comdlg32.ts +0 -10
- package/lib/windows/ntdll.ts +0 -11
- package/lib/windows/ole32.ts +0 -9
- package/lib/windows/structs.ts +0 -807
- package/lib/windows/version.ts +0 -35
- package/test/add.wasm +0 -0
- package/test/bench_ffi_callraw.js +0 -235
- package/test/bench_ffi_callraw.ts +0 -235
- package/test/bench_ffi_overhead.js +0 -139
- package/test/bench_ffi_overhead.ts +0 -141
- package/test/bench_sendmessage.js +0 -104
- package/test/bench_sendmessage.ts +0 -100
- package/test/bench_sendmessage_nonnull.js +0 -187
- package/test/bench_sendmessage_nonnull.ts +0 -188
- package/test/complex.wasm +0 -0
- package/test/complex_imports.wasm +0 -0
- package/test/debug/http_server_e2e.js +0 -31
- package/test/debug/minwasm.js +0 -52
- package/test/debug/mupdf_debug.js +0 -86
- package/test/debug/wasm.js +0 -122
- package/test/debug/wasm_export_debug.js +0 -54
- package/test/debug/wasm_names.js +0 -36
- package/test/example.pdf +0 -0
- package/test/global_imports.wasm +0 -0
- package/test/import_func.wasm +0 -0
- package/test/imports.wasm +0 -0
- package/test/mupdf-cdn.js +0 -40
- package/test/mupdf-cdn.ts +0 -43
- package/test/run.js +0 -111
- package/test/run.ts +0 -116
- package/test/sjlj.wasm +0 -0
- package/test/test_basic.js +0 -7
- package/test/test_basic.ts +0 -9
- package/test/test_basic_fetch.js +0 -63
- package/test/test_basic_fetch.ts +0 -59
- package/test/test_brotli.js +0 -48
- package/test/test_brotli.ts +0 -52
- package/test/test_fetch_cache.js +0 -169
- package/test/test_fetch_cache.ts +0 -187
- package/test/test_ffi.js +0 -157
- package/test/test_ffi.ts +0 -170
- package/test/test_ffi_abi.js +0 -290
- package/test/test_ffi_abi.ts +0 -274
- package/test/test_ffi_array.js +0 -116
- package/test/test_ffi_array.ts +0 -141
- package/test/test_ffi_bind.js +0 -656
- package/test/test_ffi_bind.ts +0 -670
- package/test/test_ffi_struct.js +0 -779
- package/test/test_ffi_struct.ts +0 -828
- package/test/test_ffi_struct_layout.js +0 -495
- package/test/test_ffi_struct_layout.ts +0 -543
- package/test/test_ffi_user32.js +0 -103
- package/test/test_ffi_user32.ts +0 -113
- package/test/test_ffi_windows.js +0 -172
- package/test/test_ffi_windows.ts +0 -187
- package/test/test_files.js +0 -102
- package/test/test_files.ts +0 -121
- package/test/test_frame_encoding.js +0 -128
- package/test/test_frame_encoding.ts +0 -132
- package/test/test_gdi_draw.js +0 -681
- package/test/test_gdi_draw.ts +0 -725
- package/test/test_helper.js +0 -91
- package/test/test_helper.ts +0 -88
- package/test/test_http_import.js +0 -96
- package/test/test_http_import.ts +0 -93
- package/test/test_http_server.js +0 -214
- package/test/test_http_server.ts +0 -211
- package/test/test_import_dir.js +0 -4
- package/test/test_import_dir.ts +0 -5
- package/test/test_ipv6.js +0 -134
- package/test/test_ipv6.ts +0 -130
- package/test/test_jsx.js +0 -1314
- package/test/test_meta_url.js +0 -3
- package/test/test_meta_url.ts +0 -4
- package/test/test_mupdf_render.js +0 -51
- package/test/test_mupdf_render.ts +0 -55
- package/test/test_mupdf_twice.js +0 -62
- package/test/test_mupdf_twice.ts +0 -65
- package/test/test_mupdf_wasm.js +0 -39
- package/test/test_mupdf_wasm.ts +0 -32
- package/test/test_net_event.js +0 -57
- package/test/test_net_event.ts +0 -56
- package/test/test_net_fetch.js +0 -384
- package/test/test_net_fetch.ts +0 -373
- package/test/test_net_websocket.js +0 -180
- package/test/test_net_websocket.ts +0 -164
- package/test/test_polyfill.js +0 -144
- package/test/test_polyfill.ts +0 -159
- package/test/test_printer.js +0 -137
- package/test/test_printer.ts +0 -148
- package/test/test_proc.js +0 -141
- package/test/test_proc.ts +0 -163
- package/test/test_react_complex.js +0 -18678
- package/test/test_react_counter.js +0 -18555
- package/test/test_react_flex.js +0 -18871
- package/test/test_react_hidden.js +0 -18560
- package/test/test_react_listview_link.js +0 -18590
- package/test/test_react_notify.js +0 -18797
- package/test/test_react_render.js +0 -18550
- package/test/test_registry.js +0 -74
- package/test/test_registry.ts +0 -95
- package/test/test_sysinfo.js +0 -122
- package/test/test_sysinfo.ts +0 -141
- package/test/test_url.js +0 -173
- package/test/test_url.ts +0 -183
- package/test/test_wasm_basic.js +0 -85
- package/test/test_wasm_basic.ts +0 -73
- package/test/test_wasm_import_global.js +0 -41
- package/test/test_wasm_import_global.ts +0 -45
- package/test/test_wasm_sjlj.js +0 -145
- package/test/test_wasm_sjlj.ts +0 -125
- package/test/test_wasm_types.js +0 -97
- package/test/test_wasm_types.ts +0 -124
- package/test/test_wolfssl_read.js +0 -203
- package/test/test_wolfssl_read.ts +0 -184
- package/test/test_worker.js +0 -21
- package/test/test_worker.ts +0 -24
- package/test/test_worker_concurrent.js +0 -45
- package/test/test_worker_concurrent.ts +0 -56
- package/test/test_worker_data_url.js +0 -46
- package/test/test_worker_data_url.ts +0 -51
- package/test/test_worker_fetch.js +0 -26
- package/test/test_worker_fetch.ts +0 -27
- package/test/test_worker_net.js +0 -69
- package/test/test_worker_net.ts +0 -66
- package/test/test_worker_wasm_concurrent.js +0 -44
- package/test/test_worker_wasm_concurrent.ts +0 -45
- package/test/types.wasm +0 -0
- package/test/worker_fetch.js +0 -13
- package/test/worker_fetch.ts +0 -13
- package/test/worker_helper.js +0 -1
- package/test/worker_helper.ts +0 -1
- package/test/worker_http.js +0 -18
- package/test/worker_http.ts +0 -20
- package/test/worker_import_lib.js +0 -12
- package/test/worker_import_lib.ts +0 -13
- package/test/worker_module.js +0 -16
- package/test/worker_module.ts +0 -17
- package/test/worker_wasm_concurrent.js +0 -22
- package/test/worker_wasm_concurrent.ts +0 -22
package/lib/windows/structs.ts
DELETED
|
@@ -1,807 +0,0 @@
|
|
|
1
|
-
import { struct } from '../ffi/struct.js'
|
|
2
|
-
import type { C_Struct, C_Union } from '../ffi/ctype.js'
|
|
3
|
-
|
|
4
|
-
// 全仓库 Win32 结构的集中定义点(CType IR,按本机架构 MSVC 对齐;这批全为定长标量/字符串,
|
|
5
|
-
// ia32/x64 同布局)。形参位方向约定见 lib/windows/user32.ts 头注释:
|
|
6
|
-
// 纯入参位注册 encoder(DeepPartial 对象直传,缺省字段跳过),出参/双向位不注册
|
|
7
|
-
// (位只收 def 分配的 .ptr,读回走 decode —— 对象 encode 进调用方拿不到的临时 buffer 会丢结果)。
|
|
8
|
-
// 每个结构拆两行(本库是 lib,DECL 全部导出):
|
|
9
|
-
// X_DECL = 平铺字段表 + '#' 指令键(对象字面量,satisfies C_Struct 编译期验 kind/token);
|
|
10
|
-
// X = /* @__PURE__ */ struct(name, X_DECL) —— PURE 标记 esbuild 据此摇掉 bundle
|
|
11
|
-
// 未引用的布局;集中到一个文件后没这个标记会把全部结构拖进每个 bundle。
|
|
12
|
-
// 嵌套一律引用 X_DECL(标识符引用可整链摇树;成员读 X.__struct 是可观察副作用,会拖住
|
|
13
|
-
// 整个 X —— 嵌套方与被嵌套方从此死绑,摇不掉)。DECL 是纯数据、构造时拷贝,无闭包捕获。
|
|
14
|
-
|
|
15
|
-
/** 矩形(16B):GetClientRect/GetWindowRect 出参、InvalidateRect/FillRect 入参 */
|
|
16
|
-
export const RECT_DECL = {
|
|
17
|
-
'#': 'struct',
|
|
18
|
-
left: 'i32',
|
|
19
|
-
top: 'i32',
|
|
20
|
-
right: 'i32',
|
|
21
|
-
bottom: 'i32',
|
|
22
|
-
} satisfies C_Struct
|
|
23
|
-
|
|
24
|
-
export const RECT = /* @__PURE__ */ struct('RECT', RECT_DECL)
|
|
25
|
-
|
|
26
|
-
/** 点(8B):GetCursorPos 出参、ScreenToClient/ClientToScreen 就地更新 */
|
|
27
|
-
export const POINT_DECL = {
|
|
28
|
-
'#': 'struct',
|
|
29
|
-
x: 'i32',
|
|
30
|
-
y: 'i32',
|
|
31
|
-
} satisfies C_Struct
|
|
32
|
-
|
|
33
|
-
export const POINT = /* @__PURE__ */ struct('POINT', POINT_DECL)
|
|
34
|
-
|
|
35
|
-
/** 尺寸(8B,双架构同布局):Button BM_GETIDEALSIZE 等出参槽(cx/cy 像素) */
|
|
36
|
-
export const SIZE_DECL = {
|
|
37
|
-
'#': 'struct',
|
|
38
|
-
cx: 'i32',
|
|
39
|
-
cy: 'i32',
|
|
40
|
-
} satisfies C_Struct
|
|
41
|
-
|
|
42
|
-
export const SIZE = /* @__PURE__ */ struct('SIZE', SIZE_DECL)
|
|
43
|
-
|
|
44
|
-
/** 混合函数(4B,双架构同布局):AlphaBlend 末参**按值**传(bind 的按值位
|
|
45
|
-
* `<BLENDFUNCTION>`,非 `<BLENDFUNCTION>ptr`)——4B POD 聚合体在 x64 走位置寄存器、
|
|
46
|
-
* ia32 压 4 字节,字段序须与 windows.h 逐字节一致。BlendOp 仅 AC_SRC_OVER(0)、
|
|
47
|
-
* BlendFlags 恒 0(MSDN);AC_SRC_ALPHA(1) 是 AlphaFormat 的值(源带 premultiplied
|
|
48
|
-
* alpha 通道时置位)。纯入参位注册 encoder(对象直传,缺省字段跳过的零值合法)。 */
|
|
49
|
-
export const BLENDFUNCTION_DECL = {
|
|
50
|
-
'#': 'struct',
|
|
51
|
-
BlendOp: 'u8',
|
|
52
|
-
BlendFlags: 'u8',
|
|
53
|
-
SourceConstantAlpha: 'u8',
|
|
54
|
-
AlphaFormat: 'u8',
|
|
55
|
-
} satisfies C_Struct
|
|
56
|
-
|
|
57
|
-
export const BLENDFUNCTION = /* @__PURE__ */ struct('BLENDFUNCTION', BLENDFUNCTION_DECL)
|
|
58
|
-
|
|
59
|
-
/** 滚动参数(28B):cbSize 必须 = SCROLLINFO.size(结构自描述是 Win32 要求,缺省跳过帮不了);
|
|
60
|
-
* fMask = SIF_* 决定 Set 写哪些项 / Get 读哪些项 */
|
|
61
|
-
export const SCROLLINFO_DECL = {
|
|
62
|
-
'#': 'struct',
|
|
63
|
-
cbSize: 'u32',
|
|
64
|
-
fMask: 'u32',
|
|
65
|
-
nMin: 'i32',
|
|
66
|
-
nMax: 'i32',
|
|
67
|
-
nPage: 'u32',
|
|
68
|
-
nPos: 'i32',
|
|
69
|
-
nTrackPos: 'i32',
|
|
70
|
-
} satisfies C_Struct
|
|
71
|
-
|
|
72
|
-
export const SCROLLINFO = /* @__PURE__ */ struct('SCROLLINFO', SCROLLINFO_DECL)
|
|
73
|
-
|
|
74
|
-
/** LOGFONTW(92B):lfFaceName 走字符串糖(u16[32]@utf-16le)直读写 string;
|
|
75
|
-
* 精度/质量类字段缺省跳过 = 保持 0(FW_DONTCARE/ANSI_CHARSET 等合法零值语义) */
|
|
76
|
-
export const LOGFONTW_DECL = {
|
|
77
|
-
'#': 'struct',
|
|
78
|
-
lfHeight: 'i32',
|
|
79
|
-
lfWidth: 'i32',
|
|
80
|
-
lfEscapement: 'i32',
|
|
81
|
-
lfOrientation: 'i32',
|
|
82
|
-
lfWeight: 'i32',
|
|
83
|
-
lfItalic: 'u8',
|
|
84
|
-
lfUnderline: 'u8',
|
|
85
|
-
lfStrikeOut: 'u8',
|
|
86
|
-
lfCharSet: 'u8',
|
|
87
|
-
lfOutPrecision: 'u8',
|
|
88
|
-
lfClipPrecision: 'u8',
|
|
89
|
-
lfQuality: 'u8',
|
|
90
|
-
lfPitchAndFamily: 'u8',
|
|
91
|
-
lfFaceName: 'u16[32]@utf-16le',
|
|
92
|
-
} satisfies C_Struct
|
|
93
|
-
|
|
94
|
-
export const LOGFONTW = /* @__PURE__ */ struct('LOGFONTW', LOGFONTW_DECL)
|
|
95
|
-
|
|
96
|
-
/** 非客户区度量(504B,x64/ia32 同布局):内嵌 4 个 LOGFONTW + iPaddedBorderWidth(Vista+);
|
|
97
|
-
* SystemParametersInfo(SPI_GETNONCLIENTMETRICS) 纯出参位(不注册 encoder:
|
|
98
|
-
* encode({cbSize}) 建缓冲带初值 → 传 .ptr → decode 读回 lfMessageFont 等) */
|
|
99
|
-
export const NONCLIENTMETRICSW_DECL = {
|
|
100
|
-
'#': 'struct',
|
|
101
|
-
cbSize: 'u32',
|
|
102
|
-
iBorderWidth: 'i32',
|
|
103
|
-
iScrollWidth: 'i32',
|
|
104
|
-
iScrollHeight: 'i32',
|
|
105
|
-
iCaptionWidth: 'i32',
|
|
106
|
-
iCaptionHeight: 'i32',
|
|
107
|
-
lfCaptionFont: LOGFONTW_DECL,
|
|
108
|
-
iSmCaptionWidth: 'i32',
|
|
109
|
-
iSmCaptionHeight: 'i32',
|
|
110
|
-
lfSmCaptionFont: LOGFONTW_DECL,
|
|
111
|
-
iMenuWidth: 'i32',
|
|
112
|
-
iMenuHeight: 'i32',
|
|
113
|
-
lfMenuFont: LOGFONTW_DECL,
|
|
114
|
-
lfStatusFont: LOGFONTW_DECL,
|
|
115
|
-
lfMessageFont: LOGFONTW_DECL,
|
|
116
|
-
iPaddedBorderWidth: 'i32',
|
|
117
|
-
} satisfies C_Struct
|
|
118
|
-
|
|
119
|
-
export const NONCLIENTMETRICSW = /* @__PURE__ */ struct('NONCLIENTMETRICSW', NONCLIENTMETRICSW_DECL)
|
|
120
|
-
|
|
121
|
-
/** TEXTMETRICW(60B = 11 LONG + 4 WCHAR + 5 BYTE 尾部补齐,双架构同布局):
|
|
122
|
-
* GetTextMetrics 纯出参位(不注册 encoder:TEXTMETRICW.alloc().ptr 进、decode 读回) */
|
|
123
|
-
export const TEXTMETRICW_DECL = {
|
|
124
|
-
'#': 'struct',
|
|
125
|
-
tmHeight: 'i32',
|
|
126
|
-
tmAscent: 'i32',
|
|
127
|
-
tmDescent: 'i32',
|
|
128
|
-
tmInternalLeading: 'i32',
|
|
129
|
-
tmExternalLeading: 'i32',
|
|
130
|
-
tmAveCharWidth: 'i32',
|
|
131
|
-
tmMaxCharWidth: 'i32',
|
|
132
|
-
tmWeight: 'i32',
|
|
133
|
-
tmOverhang: 'i32',
|
|
134
|
-
tmDigitizedAspectX: 'i32',
|
|
135
|
-
tmDigitizedAspectY: 'i32',
|
|
136
|
-
tmFirstChar: 'u16',
|
|
137
|
-
tmLastChar: 'u16',
|
|
138
|
-
tmDefaultChar: 'u16',
|
|
139
|
-
tmBreakChar: 'u16',
|
|
140
|
-
tmItalic: 'u8',
|
|
141
|
-
tmUnderlined: 'u8',
|
|
142
|
-
tmStruckOut: 'u8',
|
|
143
|
-
tmPitchAndFamily: 'u8',
|
|
144
|
-
tmCharSet: 'u8',
|
|
145
|
-
} satisfies C_Struct
|
|
146
|
-
|
|
147
|
-
export const TEXTMETRICW = /* @__PURE__ */ struct('TEXTMETRICW', TEXTMETRICW_DECL)
|
|
148
|
-
|
|
149
|
-
/** WIN32_FIND_DATAW(592B 双架构同布局 = 8 头字段 44B + WCHAR[260] + WCHAR[14],
|
|
150
|
-
* mingw wingdi.h 的 cAlternateFileName 为 WCHAR[14] 非 MSDN 的 CHAR[14]):
|
|
151
|
-
* FindFirstFile/FindNextFile 纯出参位(不注册 encoder:WIN32_FIND_DATAW.alloc().ptr
|
|
152
|
-
* 进、decode 读回)。FILETIME 是 align 4 的 8B 时间,以 u64 + pack 4 忠实布局
|
|
153
|
-
* (u64 自然 align 8 须 pack 压到 4);时间值为 1601 起的 100ns 单元(bigint) */
|
|
154
|
-
export const WIN32_FIND_DATAW_DECL = {
|
|
155
|
-
'#': 'struct',
|
|
156
|
-
'#pack': 4,
|
|
157
|
-
dwFileAttributes: 'u32',
|
|
158
|
-
ftCreationTime: 'u64',
|
|
159
|
-
ftLastAccessTime: 'u64',
|
|
160
|
-
ftLastWriteTime: 'u64',
|
|
161
|
-
nFileSizeHigh: 'u32',
|
|
162
|
-
nFileSizeLow: 'u32',
|
|
163
|
-
dwReserved0: 'u32',
|
|
164
|
-
dwReserved1: 'u32',
|
|
165
|
-
cFileName: 'u16[260]@utf-16le',
|
|
166
|
-
cAlternateFileName: 'u16[14]@utf-16le',
|
|
167
|
-
} satisfies C_Struct
|
|
168
|
-
|
|
169
|
-
export const WIN32_FIND_DATAW = /* @__PURE__ */ struct('WIN32_FIND_DATAW', WIN32_FIND_DATAW_DECL)
|
|
170
|
-
|
|
171
|
-
/** DOC_INFO_1W(3 指针随位宽:x64 24B / ia32 12B):StartDocPrinter 纯入参位
|
|
172
|
-
* (注册 encoder:{ pDocName: WCHAR.encode(s).ptr, ... } 对象直传——指针字段收裸
|
|
173
|
-
* 地址 number,字符串缓冲自行 WCHAR.encode 分配并保持引用) */
|
|
174
|
-
export const DOC_INFO_1W_DECL = {
|
|
175
|
-
'#': 'struct',
|
|
176
|
-
pDocName: '<>ptr',
|
|
177
|
-
pOutputFile: '<>ptr',
|
|
178
|
-
pDatatype: '<>ptr',
|
|
179
|
-
} satisfies C_Struct
|
|
180
|
-
|
|
181
|
-
export const DOC_INFO_1W = /* @__PURE__ */ struct('DOC_INFO_1W', DOC_INFO_1W_DECL)
|
|
182
|
-
|
|
183
|
-
/** PRINTER_INFO_2W(13 指针 + 8 DWORD:x64 136B / ia32 84B,双架构已由 test_ffi raw 实测):
|
|
184
|
-
* EnumPrinters(Level=2) 出参数组元素。指针字段 decode 出地址 number,字符串须
|
|
185
|
-
* 逐字宽读跟进;数组 = 单缓冲读回(structArray().decode(buf, count):元素间无空洞,
|
|
186
|
-
* 但缓冲尾部含字符串区 → byteLength 非整数倍,须显式 count)。纯出参不注册 encoder */
|
|
187
|
-
export const PRINTER_INFO_2W_DECL = {
|
|
188
|
-
'#': 'struct',
|
|
189
|
-
pServerName: '<>ptr',
|
|
190
|
-
pPrinterName: '<>ptr',
|
|
191
|
-
pShareName: '<>ptr',
|
|
192
|
-
pPortName: '<>ptr',
|
|
193
|
-
pDriverName: '<>ptr',
|
|
194
|
-
pComment: '<>ptr',
|
|
195
|
-
pLocation: '<>ptr',
|
|
196
|
-
pDevMode: '<>ptr',
|
|
197
|
-
pSepFile: '<>ptr',
|
|
198
|
-
pPrintProcessor: '<>ptr',
|
|
199
|
-
pDatatype: '<>ptr',
|
|
200
|
-
pParameters: '<>ptr',
|
|
201
|
-
pSecurityDescriptor: '<>ptr',
|
|
202
|
-
Attributes: 'u32',
|
|
203
|
-
Priority: 'u32',
|
|
204
|
-
DefaultPriority: 'u32',
|
|
205
|
-
StartTime: 'u32',
|
|
206
|
-
UntilTime: 'u32',
|
|
207
|
-
Status: 'u32',
|
|
208
|
-
cJobs: 'u32',
|
|
209
|
-
AveragePPM: 'u32',
|
|
210
|
-
} satisfies C_Struct
|
|
211
|
-
|
|
212
|
-
export const PRINTER_INFO_2W = /* @__PURE__ */ struct('PRINTER_INFO_2W', PRINTER_INFO_2W_DECL)
|
|
213
|
-
|
|
214
|
-
/** 进程启动信息(CreateProcessW 纯入参位):指针字段随进程位宽(x86 68B / x64 104B,struct 按 os.arch 推,
|
|
215
|
-
* os.arch 是编译期进程指针宽度,WOW64 下 32 位进程得 ia32 布局)。cb 必须 = STARTUPINFOW.size
|
|
216
|
-
* (结构自描述是 Win32 要求);dwFlags 含 STARTF_USESTDHANDLES(0x100) 时才读 hStd* */
|
|
217
|
-
export const STARTUPINFOW_DECL = {
|
|
218
|
-
'#': 'struct',
|
|
219
|
-
cb: 'u32',
|
|
220
|
-
lpReserved: '<>ptr',
|
|
221
|
-
lpDesktop: '<>ptr',
|
|
222
|
-
lpTitle: '<>ptr',
|
|
223
|
-
dwX: 'u32',
|
|
224
|
-
dwY: 'u32',
|
|
225
|
-
dwXSize: 'u32',
|
|
226
|
-
dwYSize: 'u32',
|
|
227
|
-
dwXCountChars: 'u32',
|
|
228
|
-
dwYCountChars: 'u32',
|
|
229
|
-
dwFillAttribute: 'u32',
|
|
230
|
-
dwFlags: 'u32',
|
|
231
|
-
wShowWindow: 'u16@ShowWindowCmd',
|
|
232
|
-
cbReserved2: 'u16',
|
|
233
|
-
lpReserved2: '<>ptr',
|
|
234
|
-
hStdInput: '<HFILE>ptr',
|
|
235
|
-
hStdOutput: '<HFILE>ptr',
|
|
236
|
-
hStdError: '<HFILE>ptr',
|
|
237
|
-
} satisfies C_Struct
|
|
238
|
-
|
|
239
|
-
export const STARTUPINFOW = /* @__PURE__ */ struct('STARTUPINFOW', STARTUPINFOW_DECL)
|
|
240
|
-
|
|
241
|
-
/** 新进程信息(CreateProcessW 出参位:x86 16B / x64 24B):hProcess/hThread 用完要 CloseHandle。
|
|
242
|
-
* 字段标 '!':CreatePipe/CreateProcess 成功路径下句柄必非零 —— decode 直出 Ptr 免收窄,
|
|
243
|
-
* 且对 0 当场 throw:忘判 CreateProcess 成功就 decode 时在 decode 处拦下(下游 '! 消费位'
|
|
244
|
-
* 的 callPacked 检查为第二层兜底)。 */
|
|
245
|
-
export const PROCESS_INFORMATION_DECL = {
|
|
246
|
-
'#': 'struct',
|
|
247
|
-
hProcess: '<HPROCESS>ptr!',
|
|
248
|
-
hThread: '<HTHREAD>ptr!',
|
|
249
|
-
dwProcessId: 'u32',
|
|
250
|
-
dwThreadId: 'u32',
|
|
251
|
-
} satisfies C_Struct
|
|
252
|
-
|
|
253
|
-
export const PROCESS_INFORMATION = /* @__PURE__ */ struct('PROCESS_INFORMATION', PROCESS_INFORMATION_DECL)
|
|
254
|
-
|
|
255
|
-
/** 位图信息头(40B):GetDIBits/SetDIBitsToDevice 的 BITMAPINFO 头部(32bpp BI_RGB 无颜色表,
|
|
256
|
-
* 头部即全部);biHeight 负 = 自顶向下;写 BMP 文件时也是文件内的信息头 */
|
|
257
|
-
export const BITMAPINFOHEADER_DECL = {
|
|
258
|
-
'#': 'struct',
|
|
259
|
-
biSize: 'u32',
|
|
260
|
-
biWidth: 'i32',
|
|
261
|
-
biHeight: 'i32',
|
|
262
|
-
biPlanes: 'u16',
|
|
263
|
-
biBitCount: 'u16',
|
|
264
|
-
biCompression: 'u32',
|
|
265
|
-
biSizeImage: 'u32',
|
|
266
|
-
biXPelsPerMeter: 'i32',
|
|
267
|
-
biYPelsPerMeter: 'i32',
|
|
268
|
-
biClrUsed: 'u32',
|
|
269
|
-
biClrImportant: 'u32',
|
|
270
|
-
} satisfies C_Struct
|
|
271
|
-
|
|
272
|
-
export const BITMAPINFOHEADER = /* @__PURE__ */ struct('BITMAPINFOHEADER', BITMAPINFOHEADER_DECL)
|
|
273
|
-
|
|
274
|
-
/** BMP 文件头(14B,pack 2:文件格式按 2 字节紧凑排布,不是 Win32 调用的结构):
|
|
275
|
-
* bfType = 0x4d42('BM'),bfOffBits = 14 + 40(文件头 + 信息头,无颜色表) */
|
|
276
|
-
export const BITMAPFILEHEADER_DECL = {
|
|
277
|
-
'#': 'struct',
|
|
278
|
-
'#pack': 2,
|
|
279
|
-
bfType: 'u16',
|
|
280
|
-
bfSize: 'u32',
|
|
281
|
-
bfReserved1: 'u16',
|
|
282
|
-
bfReserved2: 'u16',
|
|
283
|
-
bfOffBits: 'u32',
|
|
284
|
-
} satisfies C_Struct
|
|
285
|
-
|
|
286
|
-
export const BITMAPFILEHEADER = /* @__PURE__ */ struct('BITMAPFILEHEADER', BITMAPFILEHEADER_DECL)
|
|
287
|
-
|
|
288
|
-
// ── 通用对话框(跨组件/示例共享)───────────────────────────────────────
|
|
289
|
-
|
|
290
|
-
/** OPENFILENAMEW(GetOpenFileNameW)。Win2000+ 定义含尾部 pvReserved/dwReserved/FlagsEx
|
|
291
|
-
* (即 XP 系统上的真实 sizeof=152/88) */
|
|
292
|
-
export const OPENFILENAMEW_DECL = {
|
|
293
|
-
'#': 'struct',
|
|
294
|
-
lStructSize: 'u32',
|
|
295
|
-
hwndOwner: '<HWND>ptr',
|
|
296
|
-
hInstance: '<HMODULE>ptr',
|
|
297
|
-
lpstrFilter: '<>ptr',
|
|
298
|
-
lpstrCustomFilter: '<>ptr',
|
|
299
|
-
nMaxCustFilter: 'u32',
|
|
300
|
-
nFilterIndex: 'u32',
|
|
301
|
-
lpstrFile: '<>ptr',
|
|
302
|
-
nMaxFile: 'u32',
|
|
303
|
-
lpstrFileTitle: '<>ptr',
|
|
304
|
-
nMaxFileTitle: 'u32',
|
|
305
|
-
lpstrInitialDir: '<>ptr',
|
|
306
|
-
lpstrTitle: '<>ptr',
|
|
307
|
-
Flags: 'u32',
|
|
308
|
-
nFileOffset: 'u16',
|
|
309
|
-
nFileExtension: 'u16',
|
|
310
|
-
lpstrDefExt: '<>ptr',
|
|
311
|
-
lCustData: '<>ptr',
|
|
312
|
-
lpfnHook: '<>ptr',
|
|
313
|
-
lpTemplateName: '<>ptr',
|
|
314
|
-
pvReserved: '<>ptr',
|
|
315
|
-
dwReserved: 'u32',
|
|
316
|
-
FlagsEx: 'u32',
|
|
317
|
-
} satisfies C_Struct
|
|
318
|
-
|
|
319
|
-
export const OPENFILENAMEW = /* @__PURE__ */ struct('OPENFILENAMEW', OPENFILENAMEW_DECL)
|
|
320
|
-
|
|
321
|
-
/** BROWSEINFOW(SHBrowseForFolderW) */
|
|
322
|
-
export const BROWSEINFOW_DECL = {
|
|
323
|
-
'#': 'struct',
|
|
324
|
-
hwndOwner: '<HWND>ptr',
|
|
325
|
-
pidlRoot: '<>ptr',
|
|
326
|
-
pszDisplayName: '<>ptr',
|
|
327
|
-
lpszTitle: '<>ptr',
|
|
328
|
-
ulFlags: 'u32',
|
|
329
|
-
lpfn: '<>ptr',
|
|
330
|
-
lParam: '<>ptr',
|
|
331
|
-
iImage: 'i32',
|
|
332
|
-
} satisfies C_Struct
|
|
333
|
-
|
|
334
|
-
export const BROWSEINFOW = /* @__PURE__ */ struct('BROWSEINFOW', BROWSEINFOW_DECL)
|
|
335
|
-
|
|
336
|
-
// ── WM_NOTIFY 通知结构(NMHDR 必须先定义,各通知结构嵌套其 DECL)────────
|
|
337
|
-
|
|
338
|
-
// NMHDR = hwndFrom(ptr) + idFrom(ptr) + code(i32)。
|
|
339
|
-
// 用 ffi-struct 定义以复现 MSVC/嵌套结构的“尾 padding 传染”(内嵌 NMHDR 占满 24/12 字节)。
|
|
340
|
-
// 各通知结构把它作为首字段嵌套(NMHDR_DECL),字段偏移由 struct 按进程位宽推出。
|
|
341
|
-
export const NMHDR_DECL = {
|
|
342
|
-
'#': 'struct',
|
|
343
|
-
hwndFrom: '<HWND>ptr',
|
|
344
|
-
idFrom: '<>ptr',
|
|
345
|
-
code: 'i32',
|
|
346
|
-
} satisfies C_Struct
|
|
347
|
-
|
|
348
|
-
export const NMHDR = /* @__PURE__ */ struct('NMHDR', NMHDR_DECL)
|
|
349
|
-
|
|
350
|
-
export const SYSTEMTIME_DECL = {
|
|
351
|
-
'#': 'struct',
|
|
352
|
-
wYear: 'u16',
|
|
353
|
-
wMonth: 'u16',
|
|
354
|
-
wDayOfWeek: 'u16',
|
|
355
|
-
wDay: 'u16',
|
|
356
|
-
wHour: 'u16',
|
|
357
|
-
wMinute: 'u16',
|
|
358
|
-
wSecond: 'u16',
|
|
359
|
-
wMilliseconds: 'u16',
|
|
360
|
-
} satisfies C_Struct
|
|
361
|
-
|
|
362
|
-
export const SYSTEMTIME = /* @__PURE__ */ struct('SYSTEMTIME', SYSTEMTIME_DECL)
|
|
363
|
-
|
|
364
|
-
/** DTN_DATETIMECHANGE 通知(DateTimePicker):NMHDR + dwFlags + SYSTEMTIME */
|
|
365
|
-
export const NMDATETIMECHANGE_DECL = {
|
|
366
|
-
'#': 'struct',
|
|
367
|
-
hdr: NMHDR_DECL,
|
|
368
|
-
dwFlags: 'u32',
|
|
369
|
-
st: SYSTEMTIME_DECL,
|
|
370
|
-
} satisfies C_Struct
|
|
371
|
-
|
|
372
|
-
export const NMDATETIMECHANGE = /* @__PURE__ */ struct('NMDATETIMECHANGE', NMDATETIMECHANGE_DECL)
|
|
373
|
-
|
|
374
|
-
// LITEM = Link 控件项。MAX_LINKID_TEXT = 48,L_MAX_URL_LENGTH = 2048 + 32 + sizeof("://") = 2084;
|
|
375
|
-
// 宽字符数组走字符串糖('u16[N]@utf-16le'),decode 直接得到 string(读到 NUL 为止)。
|
|
376
|
-
export const LITEM_DECL = {
|
|
377
|
-
'#': 'struct',
|
|
378
|
-
mask: 'u32',
|
|
379
|
-
iLink: 'i32',
|
|
380
|
-
state: 'u32',
|
|
381
|
-
stateMask: 'u32',
|
|
382
|
-
szID: 'u16[48]@utf-16le',
|
|
383
|
-
szUrl: 'u16[2084]@utf-16le',
|
|
384
|
-
} satisfies C_Struct
|
|
385
|
-
|
|
386
|
-
export const LITEM = /* @__PURE__ */ struct('LITEM', LITEM_DECL)
|
|
387
|
-
|
|
388
|
-
/** NMLINK = NMHDR + LITEM(Link 的 NM_CLICK 等通知) */
|
|
389
|
-
export const NMLINK_DECL = {
|
|
390
|
-
'#': 'struct',
|
|
391
|
-
hdr: NMHDR_DECL,
|
|
392
|
-
item: LITEM_DECL,
|
|
393
|
-
} satisfies C_Struct
|
|
394
|
-
|
|
395
|
-
export const NMLINK = /* @__PURE__ */ struct('NMLINK', NMLINK_DECL)
|
|
396
|
-
|
|
397
|
-
/** NMCUSTOMDRAW(自绘通知基结构):嵌套 NMHDR 以复现 MSVC 尾 padding 传染,offsetOf 保证 ia32/x64 均正确 */
|
|
398
|
-
export const NMCUSTOMDRAW_DECL = {
|
|
399
|
-
'#': 'struct',
|
|
400
|
-
hdr: NMHDR_DECL,
|
|
401
|
-
dwDrawStage: 'u32',
|
|
402
|
-
hdc: '<HDC>ptr',
|
|
403
|
-
rc: 'i32[4]',
|
|
404
|
-
dwItemSpec: '<>ptr',
|
|
405
|
-
uItemState: 'u32',
|
|
406
|
-
lItemlParam: '<>ptr',
|
|
407
|
-
} satisfies C_Struct
|
|
408
|
-
|
|
409
|
-
export const NMCUSTOMDRAW = /* @__PURE__ */ struct('NMCUSTOMDRAW', NMCUSTOMDRAW_DECL)
|
|
410
|
-
|
|
411
|
-
/** NMLVCUSTOMDRAW = NMCUSTOMDRAW + 颜色/子项字段(ListView 自绘) */
|
|
412
|
-
export const NMLVCUSTOMDRAW_DECL = {
|
|
413
|
-
'#': 'struct',
|
|
414
|
-
hdr: NMHDR_DECL,
|
|
415
|
-
dwDrawStage: 'u32',
|
|
416
|
-
hdc: '<HDC>ptr',
|
|
417
|
-
rc: 'i32[4]',
|
|
418
|
-
dwItemSpec: '<>ptr',
|
|
419
|
-
uItemState: 'u32',
|
|
420
|
-
lItemlParam: '<>ptr',
|
|
421
|
-
clrText: 'u32',
|
|
422
|
-
clrTextBk: 'u32',
|
|
423
|
-
iSubItem: 'i32',
|
|
424
|
-
dwItemType: 'u32',
|
|
425
|
-
} satisfies C_Struct
|
|
426
|
-
|
|
427
|
-
export const NMLVCUSTOMDRAW = /* @__PURE__ */ struct('NMLVCUSTOMDRAW', NMLVCUSTOMDRAW_DECL)
|
|
428
|
-
|
|
429
|
-
// NMLISTVIEW / NMITEMACTIVATE 前缀字段布局一致(iItem..uChanged)
|
|
430
|
-
export const NMLISTVIEW_DECL = {
|
|
431
|
-
'#': 'struct',
|
|
432
|
-
hdr: NMHDR_DECL,
|
|
433
|
-
iItem: 'i32',
|
|
434
|
-
iSubItem: 'i32',
|
|
435
|
-
uNewState: 'u32',
|
|
436
|
-
uOldState: 'u32',
|
|
437
|
-
uChanged: 'u32',
|
|
438
|
-
ptAction: 'i32[2]',
|
|
439
|
-
lParam: '<>ptr',
|
|
440
|
-
} satisfies C_Struct
|
|
441
|
-
|
|
442
|
-
export const NMLISTVIEW = /* @__PURE__ */ struct('NMLISTVIEW', NMLISTVIEW_DECL)
|
|
443
|
-
|
|
444
|
-
// ── 通用控件(comctl32)结构 ────────────────────────────────────────
|
|
445
|
-
|
|
446
|
-
export const TCITEMW_DECL = {
|
|
447
|
-
'#': 'struct',
|
|
448
|
-
mask: 'u32',
|
|
449
|
-
dwState: 'u32',
|
|
450
|
-
dwStateMask: 'u32',
|
|
451
|
-
pszText: '<>ptr',
|
|
452
|
-
cchTextMax: 'i32',
|
|
453
|
-
iImage: 'i32',
|
|
454
|
-
lParam: '<>ptr',
|
|
455
|
-
} satisfies C_Struct
|
|
456
|
-
|
|
457
|
-
export const TCITEMW = /* @__PURE__ */ struct('TCITEMW', TCITEMW_DECL)
|
|
458
|
-
|
|
459
|
-
export const TTTOOLINFOW_DECL = {
|
|
460
|
-
'#': 'struct',
|
|
461
|
-
cbSize: 'u32',
|
|
462
|
-
uFlags: 'u32',
|
|
463
|
-
hwnd: '<HWND>ptr',
|
|
464
|
-
uId: '<>ptr',
|
|
465
|
-
rect: 'i32[4]',
|
|
466
|
-
hinst: '<HMODULE>ptr',
|
|
467
|
-
lpszText: '<>ptr',
|
|
468
|
-
lParam: '<>ptr',
|
|
469
|
-
lpReserved: '<>ptr', // WinXP+ 追加字段(系统 sizeof 含之)
|
|
470
|
-
} satisfies C_Struct
|
|
471
|
-
|
|
472
|
-
export const TTTOOLINFOW = /* @__PURE__ */ struct('TTTOOLINFOW', TTTOOLINFOW_DECL)
|
|
473
|
-
|
|
474
|
-
export const TVITEM_DECL = {
|
|
475
|
-
'#': 'struct',
|
|
476
|
-
mask: 'u32',
|
|
477
|
-
hItem: '<>ptr',
|
|
478
|
-
state: 'u32',
|
|
479
|
-
stateMask: 'u32',
|
|
480
|
-
pszText: '<>ptr',
|
|
481
|
-
cchTextMax: 'i32',
|
|
482
|
-
iImage: 'i32',
|
|
483
|
-
iSelectedImage: 'i32',
|
|
484
|
-
cChildren: 'i32',
|
|
485
|
-
lParam: '<>ptr',
|
|
486
|
-
} satisfies C_Struct
|
|
487
|
-
|
|
488
|
-
export const TVITEM = /* @__PURE__ */ struct('TVITEM', TVITEM_DECL)
|
|
489
|
-
|
|
490
|
-
/** TVINSERTSTRUCT:hParent/hInsertAfter + item 内嵌 TVITEM(TreeView 插入项) */
|
|
491
|
-
export const TVINSERTSTRUCT_DECL = {
|
|
492
|
-
'#': 'struct',
|
|
493
|
-
hParent: '<>ptr',
|
|
494
|
-
hInsertAfter: '<>ptr',
|
|
495
|
-
item: TVITEM_DECL,
|
|
496
|
-
} satisfies C_Struct
|
|
497
|
-
|
|
498
|
-
export const TVINSERTSTRUCT = /* @__PURE__ */ struct('TVINSERTSTRUCT', TVINSERTSTRUCT_DECL)
|
|
499
|
-
|
|
500
|
-
/** LVM_SUBITEMHITTEST 的 LVHITTESTINFO(24B):pt 是入参,iItem/iSubItem 是出参(入参先置 -1) */
|
|
501
|
-
export const LVHITTESTINFO_DECL = {
|
|
502
|
-
'#': 'struct',
|
|
503
|
-
pt: 'i32[2]',
|
|
504
|
-
flags: 'u32',
|
|
505
|
-
iItem: 'i32',
|
|
506
|
-
iSubItem: 'i32',
|
|
507
|
-
iGroup: 'i32',
|
|
508
|
-
} satisfies C_Struct
|
|
509
|
-
|
|
510
|
-
export const LVHITTESTINFO = /* @__PURE__ */ struct('LVHITTESTINFO', LVHITTESTINFO_DECL)
|
|
511
|
-
|
|
512
|
-
export const LVITEMW_DECL = {
|
|
513
|
-
'#': 'struct',
|
|
514
|
-
mask: 'u32',
|
|
515
|
-
iItem: 'i32',
|
|
516
|
-
iSubItem: 'i32',
|
|
517
|
-
state: 'u32',
|
|
518
|
-
stateMask: 'u32',
|
|
519
|
-
pszText: '<>ptr',
|
|
520
|
-
cchTextMax: 'i32',
|
|
521
|
-
iImage: 'i32',
|
|
522
|
-
lParam: '<>ptr',
|
|
523
|
-
iIndent: 'i32',
|
|
524
|
-
iGroupId: 'i32',
|
|
525
|
-
cColumns: 'u32',
|
|
526
|
-
puColumns: '<>ptr',
|
|
527
|
-
piColFmt: '<>ptr',
|
|
528
|
-
iGroup: 'i32',
|
|
529
|
-
} satisfies C_Struct
|
|
530
|
-
|
|
531
|
-
export const LVITEMW = /* @__PURE__ */ struct('LVITEMW', LVITEMW_DECL)
|
|
532
|
-
|
|
533
|
-
export const LVCOLUMNW_DECL = {
|
|
534
|
-
'#': 'struct',
|
|
535
|
-
mask: 'u32',
|
|
536
|
-
fmt: 'i32',
|
|
537
|
-
cx: 'i32',
|
|
538
|
-
pszText: '<>ptr',
|
|
539
|
-
cchTextMax: 'i32',
|
|
540
|
-
iSubItem: 'i32',
|
|
541
|
-
iImage: 'i32',
|
|
542
|
-
iOrder: 'i32',
|
|
543
|
-
cxMin: 'i32',
|
|
544
|
-
cxDefault: 'i32',
|
|
545
|
-
cxIdeal: 'i32',
|
|
546
|
-
} satisfies C_Struct
|
|
547
|
-
|
|
548
|
-
export const LVCOLUMNW = /* @__PURE__ */ struct('LVCOLUMNW', LVCOLUMNW_DECL)
|
|
549
|
-
|
|
550
|
-
// ── 消息循环 / 绘制 / 窗口类(user32;偏移经 MinGW 头 x64+ia32 双架构实测)────────
|
|
551
|
-
|
|
552
|
-
/** MSG(48B x64 / 28B ia32):GetMessage/PeekMessage/DispatchMessage 的消息槽 */
|
|
553
|
-
export const MSG_DECL = {
|
|
554
|
-
'#': 'struct',
|
|
555
|
-
hwnd: '<HWND>ptr',
|
|
556
|
-
message: 'u32',
|
|
557
|
-
wParam: '<>ptr',
|
|
558
|
-
lParam: '<>ptr',
|
|
559
|
-
time: 'u32',
|
|
560
|
-
pt: POINT_DECL,
|
|
561
|
-
} satisfies C_Struct
|
|
562
|
-
|
|
563
|
-
export const MSG = /* @__PURE__ */ struct('MSG', MSG_DECL)
|
|
564
|
-
|
|
565
|
-
/** PAINTSTRUCT(72B x64 / 64B ia32):BeginPaint 出参(整结构由 API 写入),EndPaint 归还 */
|
|
566
|
-
export const PAINTSTRUCT_DECL = {
|
|
567
|
-
'#': 'struct',
|
|
568
|
-
hdc: '<HDC>ptr',
|
|
569
|
-
fErase: 'i32',
|
|
570
|
-
rcPaint: RECT_DECL,
|
|
571
|
-
fRestore: 'i32',
|
|
572
|
-
fIncUpdate: 'i32',
|
|
573
|
-
rgbReserved: 'u8[32]',
|
|
574
|
-
} satisfies C_Struct
|
|
575
|
-
|
|
576
|
-
export const PAINTSTRUCT = /* @__PURE__ */ struct('PAINTSTRUCT', PAINTSTRUCT_DECL)
|
|
577
|
-
|
|
578
|
-
/** WNDCLASSEXW(80B x64 / 48B ia32):RegisterClassExW 入参;cbSize 必须 = WNDCLASSEXW.size */
|
|
579
|
-
export const WNDCLASSEXW_DECL = {
|
|
580
|
-
'#': 'struct',
|
|
581
|
-
cbSize: 'u32',
|
|
582
|
-
style: 'u32',
|
|
583
|
-
lpfnWndProc: '<>ptr',
|
|
584
|
-
cbClsExtra: 'i32',
|
|
585
|
-
cbWndExtra: 'i32',
|
|
586
|
-
hInstance: '<HMODULE>ptr',
|
|
587
|
-
hIcon: '<>ptr',
|
|
588
|
-
hCursor: '<>ptr',
|
|
589
|
-
hbrBackground: '<>ptr',
|
|
590
|
-
lpszMenuName: '<>ptr',
|
|
591
|
-
lpszClassName: '<>ptr',
|
|
592
|
-
hIconSm: '<>ptr',
|
|
593
|
-
} satisfies C_Struct
|
|
594
|
-
|
|
595
|
-
export const WNDCLASSEXW = /* @__PURE__ */ struct('WNDCLASSEXW', WNDCLASSEXW_DECL)
|
|
596
|
-
|
|
597
|
-
// ── 显示模式(user32 EnumDisplaySettingsW/ChangeDisplaySettingsW)────────────────
|
|
598
|
-
|
|
599
|
-
/** DEVMODEW(220B,双架构同布局):显示模式描述。dmFields = DM_* 决定 Change 生效项。
|
|
600
|
-
* union 的 display 分支平铺(dmPosition/ dmDisplayOrientation/ dmDisplayFixedOutput)——
|
|
601
|
-
* printer 分支同为 16B,平铺后偏移与 sizeof 均与实测一致;printer 场景不在本库用途内。
|
|
602
|
-
* dmSize/ dmDriverExtra 入参先置(dmSize = DEVMODEW.size;dmDriverExtra = 0),否则 API 拒绝 */
|
|
603
|
-
export const DEVMODEW_DECL = {
|
|
604
|
-
'#': 'struct',
|
|
605
|
-
dmDeviceName: 'u16[32]@utf-16le',
|
|
606
|
-
dmSpecVersion: 'u16',
|
|
607
|
-
dmDriverVersion: 'u16',
|
|
608
|
-
dmSize: 'u16',
|
|
609
|
-
dmDriverExtra: 'u16',
|
|
610
|
-
dmFields: 'u32',
|
|
611
|
-
dmPosition: 'i32[2]',
|
|
612
|
-
dmDisplayOrientation: 'u32',
|
|
613
|
-
dmDisplayFixedOutput: 'u32',
|
|
614
|
-
dmColor: 'i16',
|
|
615
|
-
dmDuplex: 'i16',
|
|
616
|
-
dmYResolution: 'i16',
|
|
617
|
-
dmTTOption: 'i16',
|
|
618
|
-
dmCollate: 'i16',
|
|
619
|
-
dmFormName: 'u16[32]@utf-16le',
|
|
620
|
-
dmLogPixels: 'u16',
|
|
621
|
-
dmBitsPerPel: 'u32',
|
|
622
|
-
dmPelsWidth: 'u32',
|
|
623
|
-
dmPelsHeight: 'u32',
|
|
624
|
-
dmDisplayFlags: 'u32',
|
|
625
|
-
dmDisplayFrequency: 'u32',
|
|
626
|
-
dmICMMethod: 'u32',
|
|
627
|
-
dmICMIntent: 'u32',
|
|
628
|
-
dmMediaType: 'u32',
|
|
629
|
-
dmDitherType: 'u32',
|
|
630
|
-
dmReserved1: 'u32',
|
|
631
|
-
dmReserved2: 'u32',
|
|
632
|
-
dmPanningWidth: 'u32',
|
|
633
|
-
dmPanningHeight: 'u32',
|
|
634
|
-
} satisfies C_Struct
|
|
635
|
-
|
|
636
|
-
export const DEVMODEW = /* @__PURE__ */ struct('DEVMODEW', DEVMODEW_DECL)
|
|
637
|
-
|
|
638
|
-
// ── 系统版本(ntdll RtlGetVersion)────────────────────────────────────────────
|
|
639
|
-
|
|
640
|
-
/** RtlGetVersion 的版本信息缓冲(148B,非标准 OSVERSIONINFOW):按 148 字节分配并把
|
|
641
|
-
* dwOSVersionInfoSize 填成同值(尾部 128 字节 = szCSDVersion 区),否则 RtlGetVersion
|
|
642
|
-
* 会越界写坏调用方堆导致子进程挂起。标准 OSVERSIONINFOW(宽字符 szCSDVersion[128])
|
|
643
|
-
* 应为 276B;148 是 win11 上实测过的值,保持不变 */
|
|
644
|
-
export const OSVERSIONINFO_148_DECL = {
|
|
645
|
-
'#': 'struct',
|
|
646
|
-
dwOSVersionInfoSize: 'u32',
|
|
647
|
-
dwMajorVersion: 'u32',
|
|
648
|
-
dwMinorVersion: 'u32',
|
|
649
|
-
dwBuildNumber: 'u32',
|
|
650
|
-
dwPlatformId: 'u32',
|
|
651
|
-
szCSDVersion: 'u8[128]',
|
|
652
|
-
} satisfies C_Struct
|
|
653
|
-
|
|
654
|
-
export const OSVERSIONINFO_148 = /* @__PURE__ */ struct('OSVERSIONINFO_148', OSVERSIONINFO_148_DECL)
|
|
655
|
-
|
|
656
|
-
// ── 进程快照 / 内存统计(toolhelp + psapi,布局来源官方 tlhelp32.h / psapi.h)────────
|
|
657
|
-
|
|
658
|
-
/** PROCESSENTRY32W(Process32First/Next 就地迭代位;x86 556B / x64 564B——ULONG_PTR
|
|
659
|
-
* th32DefaultHeapID 随位宽,struct 按 os.arch 推):调用前须把 offset 0 的 dwSize 预写
|
|
660
|
-
* 成 size(MSDN:不初始化 dwSize 则 Process32First 失败)——alloc() 后
|
|
661
|
-
* new Uint32Array(buf)[0] = PROCESSENTRY32W.size 一次;First/Next 迭代间复用同一 buf
|
|
662
|
-
* (API 只改内容不改 dwSize),每轮 N.decode(buf) 读回 */
|
|
663
|
-
export const PROCESSENTRY32W_DECL = {
|
|
664
|
-
'#': 'struct',
|
|
665
|
-
dwSize: 'u32',
|
|
666
|
-
cntUsage: 'u32',
|
|
667
|
-
th32ProcessID: 'u32',
|
|
668
|
-
th32DefaultHeapID: '<>ptr',
|
|
669
|
-
th32ModuleID: 'u32',
|
|
670
|
-
cntThreads: 'u32',
|
|
671
|
-
th32ParentProcessID: 'u32',
|
|
672
|
-
pcPriClassBase: 'i32',
|
|
673
|
-
dwFlags: 'u32',
|
|
674
|
-
szExeFile: 'u16[260]@utf-16le',
|
|
675
|
-
} satisfies C_Struct
|
|
676
|
-
|
|
677
|
-
export const PROCESSENTRY32W = /* @__PURE__ */ struct('PROCESSENTRY32W', PROCESSENTRY32W_DECL)
|
|
678
|
-
|
|
679
|
-
/** MODULEENTRY32W(Module32First/Next 就地迭代位;x86 1072B / x64 1088B——BYTE* +
|
|
680
|
-
* HMODULE 随位宽)。dwSize 预写同 PROCESSENTRY32W;modBaseAddr/hModule 仅在
|
|
681
|
-
* th32ProcessID 的进程上下文有效;szModule 定长 256 = MAX_MODULE_NAME32+1 */
|
|
682
|
-
export const MODULEENTRY32W_DECL = {
|
|
683
|
-
'#': 'struct',
|
|
684
|
-
dwSize: 'u32',
|
|
685
|
-
th32ModuleID: 'u32',
|
|
686
|
-
th32ProcessID: 'u32',
|
|
687
|
-
GlblcntUsage: 'u32',
|
|
688
|
-
ProccntUsage: 'u32',
|
|
689
|
-
modBaseAddr: '<>ptr',
|
|
690
|
-
modBaseSize: 'u32',
|
|
691
|
-
hModule: '<HMODULE>ptr',
|
|
692
|
-
szModule: 'u16[256]@utf-16le',
|
|
693
|
-
szExePath: 'u16[260]@utf-16le',
|
|
694
|
-
} satisfies C_Struct
|
|
695
|
-
|
|
696
|
-
export const MODULEENTRY32W = /* @__PURE__ */ struct('MODULEENTRY32W', MODULEENTRY32W_DECL)
|
|
697
|
-
|
|
698
|
-
/** PROCESS_MEMORY_COUNTERS(GetProcessMemoryInfo 出参位;x86 40B / x64 72B):官方 psapi.h
|
|
699
|
-
* 为 cb + PageFaultCount 后接 8×SIZE_T——SIZE_T 随位宽(非全 DWORD),struct 按 os.arch 推。
|
|
700
|
-
* 调用前 offset 0 的 cb 预写成 size(new Uint32Array(buf)[0] = N.size),实参 u32 cb 同传 size */
|
|
701
|
-
export const PROCESS_MEMORY_COUNTERS_DECL = {
|
|
702
|
-
'#': 'struct',
|
|
703
|
-
cb: 'u32',
|
|
704
|
-
PageFaultCount: 'u32',
|
|
705
|
-
PeakWorkingSetSize: '<>ptr',
|
|
706
|
-
WorkingSetSize: '<>ptr',
|
|
707
|
-
QuotaPeakPagedPoolUsage: '<>ptr',
|
|
708
|
-
QuotaPagedPoolUsage: '<>ptr',
|
|
709
|
-
QuotaPeakNonPagedPoolUsage: '<>ptr',
|
|
710
|
-
QuotaNonPagedPoolUsage: '<>ptr',
|
|
711
|
-
PagefileUsage: '<>ptr',
|
|
712
|
-
PeakPagefileUsage: '<>ptr',
|
|
713
|
-
} satisfies C_Struct
|
|
714
|
-
|
|
715
|
-
export const PROCESS_MEMORY_COUNTERS = /* @__PURE__ */ struct('PROCESS_MEMORY_COUNTERS', PROCESS_MEMORY_COUNTERS_DECL)
|
|
716
|
-
|
|
717
|
-
/** MOUSEINPUT(SendInput 鼠标事件体;x86 24B / x64 32B——dwExtraInfo 是 ULONG_PTR,
|
|
718
|
-
* 随位宽)。dx/dy 相对位移,或 dwFlags 带 MOUSEEVENTF_ABSOLUTE 时为 0-65535 归一化
|
|
719
|
-
* 物理像素(本引擎 SetProcessDPIAware,见 src/main.c,全坐标 API 同空间);
|
|
720
|
-
* mouseData 滚轮增量(±120)或 X 系按钮编号(XBUTTON1/2) */
|
|
721
|
-
export const MOUSEINPUT_DECL = {
|
|
722
|
-
'#': 'struct',
|
|
723
|
-
dx: 'i32',
|
|
724
|
-
dy: 'i32',
|
|
725
|
-
mouseData: 'u32',
|
|
726
|
-
dwFlags: 'u32',
|
|
727
|
-
time: 'u32',
|
|
728
|
-
dwExtraInfo: '<>ptr',
|
|
729
|
-
} satisfies C_Struct
|
|
730
|
-
|
|
731
|
-
export const MOUSEINPUT = /* @__PURE__ */ struct('MOUSEINPUT', MOUSEINPUT_DECL)
|
|
732
|
-
|
|
733
|
-
/** KEYBDINPUT(SendInput 键盘事件体;x86 16B / x64 24B):wVk 虚拟键码,
|
|
734
|
-
* dwFlags 带 KEYEVENTF_UNICODE 时 wScan = 字符码 */
|
|
735
|
-
export const KEYBDINPUT_DECL = {
|
|
736
|
-
'#': 'struct',
|
|
737
|
-
wVk: 'u16',
|
|
738
|
-
wScan: 'u16',
|
|
739
|
-
dwFlags: 'u32',
|
|
740
|
-
time: 'u32',
|
|
741
|
-
dwExtraInfo: '<>ptr',
|
|
742
|
-
} satisfies C_Struct
|
|
743
|
-
|
|
744
|
-
export const KEYBDINPUT = /* @__PURE__ */ struct('KEYBDINPUT', KEYBDINPUT_DECL)
|
|
745
|
-
|
|
746
|
-
/** INPUT(SendInput 元素;x86 28B / x64 40B):type(INPUT_MOUSE=0 / INPUT_KEYBOARD=1)
|
|
747
|
-
* + 三选一 union——C 的 DUMMYUNIONNAME 匿名成员在此命名嵌套(encode 形
|
|
748
|
-
* {type, data:{mi|ki:{...}}})。union 随 MOUSEINPUT 的 ULONG_PTR 位宽,x64 下 type 后
|
|
749
|
-
* 自动补 4B padding 使 union 8 对齐(MSVC 布局)。HARDWAREINPUT 不注入,省略不改
|
|
750
|
-
* 尺寸(union 尺寸 = max 成员 = MOUSEINPUT)。dwExtraInfo 是 ULONG_PTR 信息位(非句柄)
|
|
751
|
-
* → <>ptr 裸档(uintptr 双态先例:WPARAM/LPARAM/void*),恒传 0 */
|
|
752
|
-
export const INPUT_DECL = {
|
|
753
|
-
'#': 'struct',
|
|
754
|
-
type: 'u32',
|
|
755
|
-
data: {
|
|
756
|
-
'#': 'union',
|
|
757
|
-
mi: MOUSEINPUT_DECL,
|
|
758
|
-
ki: KEYBDINPUT_DECL,
|
|
759
|
-
} satisfies C_Union,
|
|
760
|
-
} satisfies C_Struct
|
|
761
|
-
|
|
762
|
-
export const INPUT = /* @__PURE__ */ struct('INPUT', INPUT_DECL)
|
|
763
|
-
|
|
764
|
-
/** NOTIFYICONIDENTIFIER(Shell_NotifyIconGetRect 定位托盘通知图标;x86 28B / x64 40B——
|
|
765
|
-
* hWnd 是 HWND 随位宽,guidItem = GUID 固定 16B 不随)。定位二法取一:guidItem 非全 0
|
|
766
|
-
* 时忽略 hWnd/uID,否则走 hWnd+uID(deskmon 等自注册图标即此形,与 Shell_NotifyIcon
|
|
767
|
-
* 的 {hwnd,uID} 同源);guidItem 缺省 = GUID_NULL 走 hWnd+uID。cbSize 调用前填
|
|
768
|
-
* NOTIFYICONIDENTIFIER.size(cb 结构惯例,见 PROCESS_MEMORY_COUNTERS 同) */
|
|
769
|
-
export const NOTIFYICONIDENTIFIER_DECL = {
|
|
770
|
-
'#': 'struct',
|
|
771
|
-
cbSize: 'u32',
|
|
772
|
-
hWnd: '<HWND>ptr',
|
|
773
|
-
uID: 'u32',
|
|
774
|
-
guidItem: 'u32[4]',
|
|
775
|
-
} satisfies C_Struct
|
|
776
|
-
|
|
777
|
-
export const NOTIFYICONIDENTIFIER = /* @__PURE__ */ struct('NOTIFYICONIDENTIFIER', NOTIFYICONIDENTIFIER_DECL)
|
|
778
|
-
|
|
779
|
-
/** NOTIFYICONDATAW(Shell_NotifyIconW;x86 956B / x64 976B——hWnd/hIcon/hBalloonIcon 随
|
|
780
|
-
* 位宽,GUID 固定 16B;偏移经 mingw 头文件实测对齐)。cbSize 调用前填
|
|
781
|
-
* NOTIFYICONDATAW.size(cb 结构惯例,同 NOTIFYICONIDENTIFIER / SCROLLINFO)——
|
|
782
|
-
* 本声明取 Vista+ 布局(与 mingw sizeof 一致),XP 上同样可注册(实测)。
|
|
783
|
-
* szTip/szInfo/szInfoTitle 走宽字符串糖(u16[N]@utf-16le,同 LOGFONTW.lfFaceName);
|
|
784
|
-
* 图标句柄用裸 <>ptr:LoadImageW 的返回类型由 uType 决定(HICON/HCURSOR/HBITMAP),
|
|
785
|
-
* 绑定给不出品牌——裸地址收品牌指针(子型)无障碍;
|
|
786
|
-
* uTimeout 与 uVersion 是同址 union,本仓只用前者(恒 0,不走版本协商),
|
|
787
|
-
* 故按单字段 u32 声明而非 union 布局。 */
|
|
788
|
-
export const NOTIFYICONDATAW_DECL = {
|
|
789
|
-
'#': 'struct',
|
|
790
|
-
cbSize: 'u32',
|
|
791
|
-
hWnd: '<HWND>ptr',
|
|
792
|
-
uID: 'u32',
|
|
793
|
-
uFlags: 'u32',
|
|
794
|
-
uCallbackMessage: 'u32',
|
|
795
|
-
hIcon: '<>ptr',
|
|
796
|
-
szTip: 'u16[128]@utf-16le',
|
|
797
|
-
dwState: 'u32',
|
|
798
|
-
dwStateMask: 'u32',
|
|
799
|
-
szInfo: 'u16[256]@utf-16le',
|
|
800
|
-
uTimeout: 'u32',
|
|
801
|
-
szInfoTitle: 'u16[64]@utf-16le',
|
|
802
|
-
dwInfoFlags: 'u32',
|
|
803
|
-
guidItem: 'u32[4]',
|
|
804
|
-
hBalloonIcon: '<>ptr',
|
|
805
|
-
} satisfies C_Struct
|
|
806
|
-
|
|
807
|
-
export const NOTIFYICONDATAW = /* @__PURE__ */ struct('NOTIFYICONDATAW', NOTIFYICONDATAW_DECL)
|