mach/src/win32.zig
Stephen Gutekanst e3393abbc1 deduplicate win32 bindings
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2024-08-25 15:24:24 -07:00

4159 lines
148 KiB
Zig

const std = @import("std");
const builtin = @import("builtin");
pub const L = std.unicode.utf8ToUtf16LeStringLiteral;
const w = std.os.windows;
pub const BOOL = w.BOOL;
pub const HWND = w.HWND;
pub const HRESULT = w.HRESULT;
pub const HINSTANCE = w.HINSTANCE;
pub const CHAR = w.CHAR;
pub const RECT = w.RECT;
pub const FILETIME = w.FILETIME;
pub const POINT = w.POINT;
pub const HANDLE = w.HANDLE;
pub const PWSTR = w.PWSTR;
pub const GUID = std.os.windows.GUID;
pub const WPARAM = w.WPARAM;
pub const LPARAM = w.LPARAM;
pub const LRESULT = w.LRESULT;
pub const HICON = w.HICON;
pub const HCURSOR = w.HCURSOR;
pub const HBRUSH = w.HBRUSH;
pub const HMENU = w.HMENU;
pub const HMONITOR = *opaque {};
pub const HDC = w.HDC;
pub const WINAPI = w.WINAPI;
pub const TRUE = w.TRUE;
pub const FALSE = w.FALSE;
//pub const GetModuleHandleW = w.kernel32.GetModuleHandleW;
// TODO: this type is limited to platform 'windows5.1.2600'
pub extern "kernel32" fn GetModuleHandleW(
lpModuleName: ?[*:0]const u16,
) callconv(@import("std").os.windows.WINAPI) ?HINSTANCE;
pub const KF_REPEAT = @as(u32, 16384);
pub const CW_USEDEFAULT = @as(i32, -2147483648);
pub const DIRECTINPUT_VERSION = @as(u32, 2048);
pub const DI_OK = @as(i32, 0);
pub const DI_NOTATTACHED = @as(i32, 1);
pub const DI_BUFFEROVERFLOW = @as(i32, 1);
pub const DI_PROPNOEFFECT = @as(i32, 1);
pub const DI_NOEFFECT = @as(i32, 1);
//--------------------------------------------------------------------------------
// Section: Functions (47)
//--------------------------------------------------------------------------------
pub extern "dinput8" fn DirectInput8Create(
hinst: ?HINSTANCE,
dwVersion: u32,
riidltf: ?*const Guid,
ppvOut: ?*?*anyopaque,
punkOuter: ?*IUnknown,
) callconv(@import("std").os.windows.WINAPI) HRESULT;
pub const MOUSEHOOKSTRUCTEX_MOUSE_DATA = packed struct(u32) {
@"1": u1 = 0,
@"2": u1 = 0,
_2: u1 = 0,
_3: u1 = 0,
_4: u1 = 0,
_5: u1 = 0,
_6: u1 = 0,
_7: u1 = 0,
_8: u1 = 0,
_9: u1 = 0,
_10: u1 = 0,
_11: u1 = 0,
_12: u1 = 0,
_13: u1 = 0,
_14: u1 = 0,
_15: u1 = 0,
_16: u1 = 0,
_17: u1 = 0,
_18: u1 = 0,
_19: u1 = 0,
_20: u1 = 0,
_21: u1 = 0,
_22: u1 = 0,
_23: u1 = 0,
_24: u1 = 0,
_25: u1 = 0,
_26: u1 = 0,
_27: u1 = 0,
_28: u1 = 0,
_29: u1 = 0,
_30: u1 = 0,
_31: u1 = 0,
};
pub const XBUTTON1 = MOUSEHOOKSTRUCTEX_MOUSE_DATA{ .@"1" = 1 };
pub const XBUTTON2 = MOUSEHOOKSTRUCTEX_MOUSE_DATA{ .@"2" = 1 };
pub extern "user32" fn GetClientRect(
hWnd: ?HWND,
lpRect: ?*RECT,
) callconv(@import("std").os.windows.WINAPI) BOOL;
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn GetWindowRect(
hWnd: ?HWND,
lpRect: ?*RECT,
) callconv(@import("std").os.windows.WINAPI) BOOL;
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn AdjustWindowRect(
lpRect: ?*RECT,
dwStyle: WINDOW_STYLE,
bMenu: BOOL,
) callconv(@import("std").os.windows.WINAPI) BOOL;
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn AdjustWindowRectEx(
lpRect: ?*RECT,
dwStyle: WINDOW_STYLE,
bMenu: BOOL,
dwExStyle: WINDOW_EX_STYLE,
) callconv(@import("std").os.windows.WINAPI) BOOL;
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn GetMessageTime() callconv(@import("std").os.windows.WINAPI) i32;
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn TranslateMessage(lpMsg: [*c]const MSG) callconv(WINAPI) BOOL;
pub extern "user32" fn DispatchMessageW(lpMsg: [*c]const MSG) callconv(WINAPI) LRESULT;
pub extern "user32" fn PeekMessageW(
lpMsg: ?*MSG,
hWnd: ?HWND,
wMsgFilterMin: u32,
wMsgFilterMax: u32,
wRemoveMsg: PEEK_MESSAGE_REMOVE_TYPE,
) callconv(@import("std").os.windows.WINAPI) BOOL;
pub const PEEK_MESSAGE_REMOVE_TYPE = packed struct(u32) {
REMOVE: u1 = 0,
NOYIELD: u1 = 0,
_2: u1 = 0,
_3: u1 = 0,
_4: u1 = 0,
_5: u1 = 0,
_6: u1 = 0,
_7: u1 = 0,
_8: u1 = 0,
_9: u1 = 0,
_10: u1 = 0,
_11: u1 = 0,
_12: u1 = 0,
_13: u1 = 0,
_14: u1 = 0,
_15: u1 = 0,
_16: u1 = 0,
_17: u1 = 0,
_18: u1 = 0,
_19: u1 = 0,
_20: u1 = 0,
QS_PAINT: u1 = 0,
QS_SENDMESSAGE: u1 = 0,
_23: u1 = 0,
_24: u1 = 0,
_25: u1 = 0,
_26: u1 = 0,
_27: u1 = 0,
_28: u1 = 0,
_29: u1 = 0,
_30: u1 = 0,
_31: u1 = 0,
};
pub const PM_NOREMOVE = PEEK_MESSAGE_REMOVE_TYPE{};
pub const PM_REMOVE = PEEK_MESSAGE_REMOVE_TYPE{ .REMOVE = 1 };
pub const PM_NOYIELD = PEEK_MESSAGE_REMOVE_TYPE{ .NOYIELD = 1 };
pub const PM_QS_INPUT = PEEK_MESSAGE_REMOVE_TYPE{
._16 = 1,
._17 = 1,
._18 = 1,
._26 = 1,
};
pub const PM_QS_POSTMESSAGE = PEEK_MESSAGE_REMOVE_TYPE{
._19 = 1,
._20 = 1,
._23 = 1,
};
pub const PM_QS_PAINT = PEEK_MESSAGE_REMOVE_TYPE{ .QS_PAINT = 1 };
pub const PM_QS_SENDMESSAGE = PEEK_MESSAGE_REMOVE_TYPE{ .QS_SENDMESSAGE = 1 };
pub const MSG = extern struct {
hwnd: ?HWND,
message: u32,
wParam: WPARAM,
lParam: LPARAM,
time: u32,
pt: POINT,
};
pub const WINDOW_LONG_PTR_INDEX = enum(i32) {
_EXSTYLE = -20,
P_HINSTANCE = -6,
P_HWNDPARENT = -8,
P_ID = -12,
_STYLE = -16,
P_USERDATA = -21,
P_WNDPROC = -4,
// _HINSTANCE = -6, this enum value conflicts with P_HINSTANCE
// _ID = -12, this enum value conflicts with P_ID
// _USERDATA = -21, this enum value conflicts with P_USERDATA
// _WNDPROC = -4, this enum value conflicts with P_WNDPROC
// _HWNDPARENT = -8, this enum value conflicts with P_HWNDPARENT
_,
};
pub const GWL_EXSTYLE = WINDOW_LONG_PTR_INDEX._EXSTYLE;
pub const GWLP_HINSTANCE = WINDOW_LONG_PTR_INDEX.P_HINSTANCE;
pub const GWLP_HWNDPARENT = WINDOW_LONG_PTR_INDEX.P_HWNDPARENT;
pub const GWLP_ID = WINDOW_LONG_PTR_INDEX.P_ID;
pub const GWL_STYLE = WINDOW_LONG_PTR_INDEX._STYLE;
pub const GWLP_USERDATA = WINDOW_LONG_PTR_INDEX.P_USERDATA;
pub const GWLP_WNDPROC = WINDOW_LONG_PTR_INDEX.P_WNDPROC;
pub const GWL_HINSTANCE = WINDOW_LONG_PTR_INDEX.P_HINSTANCE;
pub const GWL_ID = WINDOW_LONG_PTR_INDEX.P_ID;
pub const GWL_USERDATA = WINDOW_LONG_PTR_INDEX.P_USERDATA;
pub const GWL_WNDPROC = WINDOW_LONG_PTR_INDEX.P_WNDPROC;
pub const GWL_HWNDPARENT = WINDOW_LONG_PTR_INDEX.P_HWNDPARENT;
pub const Arch = enum { X86, X64, Arm64 };
pub const arch: Arch = switch (builtin.target.cpu.arch) {
.x86 => .X86,
.x86_64 => .X64,
.arm, .armeb, .aarch64 => .Arm64,
else => @compileError("unhandled arch " ++ @tagName(builtin.target.cpu.arch)),
};
//pub usingnamespace switch (@import("../zig.zig").arch) {
pub usingnamespace switch (arch) {
.X64, .Arm64 => struct {
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn GetWindowLongPtrW(
hWnd: ?HWND,
nIndex: WINDOW_LONG_PTR_INDEX,
) callconv(@import("std").os.windows.WINAPI) isize;
},
else => struct {},
};
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn SetCursor(
hCursor: ?HCURSOR,
) callconv(@import("std").os.windows.WINAPI) ?HCURSOR;
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn GetCursorPos(
lpPoint: ?*POINT,
) callconv(@import("std").os.windows.WINAPI) BOOL;
pub extern "user32" fn SetCursorPos(
X: i32,
Y: i32,
) callconv(@import("std").os.windows.WINAPI) BOOL;
//pub usingnamespace switch (@import("../zig.zig").arch) {
pub usingnamespace switch (arch) {
.X64, .Arm64 => struct {
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn SetWindowLongPtrW(
hWnd: ?HWND,
nIndex: WINDOW_LONG_PTR_INDEX,
dwNewLong: isize,
) callconv(@import("std").os.windows.WINAPI) isize;
},
else => struct {},
};
pub extern "user32" fn SetWindowLongW(
hWnd: ?HWND,
nIndex: WINDOW_LONG_PTR_INDEX,
dwNewLong: i32,
) callconv(@import("std").os.windows.WINAPI) i32;
//pub extern "user32" fn SetWindowPos(hWnd: HWND, hWndInsertAfter: HWND, X: i32, Y: i32, cx: i32, cy: i32, uFlags: u32) callconv(WINAPI) BOOL;
pub extern "user32" fn SetWindowPos(
hWnd: ?HWND,
hWndInsertAfter: ?HWND,
X: i32,
Y: i32,
cx: i32,
cy: i32,
uFlags: SET_WINDOW_POS_FLAGS,
) callconv(@import("std").os.windows.WINAPI) BOOL;
pub const SET_WINDOW_POS_FLAGS = packed struct(u32) {
NOSIZE: u1 = 0,
NOMOVE: u1 = 0,
NOZORDER: u1 = 0,
NOREDRAW: u1 = 0,
NOACTIVATE: u1 = 0,
DRAWFRAME: u1 = 0,
SHOWWINDOW: u1 = 0,
HIDEWINDOW: u1 = 0,
NOCOPYBITS: u1 = 0,
NOOWNERZORDER: u1 = 0,
NOSENDCHANGING: u1 = 0,
_11: u1 = 0,
_12: u1 = 0,
DEFERERASE: u1 = 0,
ASYNCWINDOWPOS: u1 = 0,
_15: u1 = 0,
_16: u1 = 0,
_17: u1 = 0,
_18: u1 = 0,
_19: u1 = 0,
_20: u1 = 0,
_21: u1 = 0,
_22: u1 = 0,
_23: u1 = 0,
_24: u1 = 0,
_25: u1 = 0,
_26: u1 = 0,
_27: u1 = 0,
_28: u1 = 0,
_29: u1 = 0,
_30: u1 = 0,
_31: u1 = 0,
// FRAMECHANGED (bit index 5) conflicts with DRAWFRAME
// NOREPOSITION (bit index 9) conflicts with NOOWNERZORDER
};
pub const SWP_ASYNCWINDOWPOS = SET_WINDOW_POS_FLAGS{ .ASYNCWINDOWPOS = 1 };
pub const SWP_DEFERERASE = SET_WINDOW_POS_FLAGS{ .DEFERERASE = 1 };
pub const SWP_DRAWFRAME = SET_WINDOW_POS_FLAGS{ .DRAWFRAME = 1 };
pub const SWP_FRAMECHANGED = SET_WINDOW_POS_FLAGS{ .DRAWFRAME = 1 };
pub const SWP_HIDEWINDOW = SET_WINDOW_POS_FLAGS{ .HIDEWINDOW = 1 };
pub const SWP_NOACTIVATE = SET_WINDOW_POS_FLAGS{ .NOACTIVATE = 1 };
pub const SWP_NOCOPYBITS = SET_WINDOW_POS_FLAGS{ .NOCOPYBITS = 1 };
pub const SWP_NOMOVE = SET_WINDOW_POS_FLAGS{ .NOMOVE = 1 };
pub const SWP_NOOWNERZORDER = SET_WINDOW_POS_FLAGS{ .NOOWNERZORDER = 1 };
pub const SWP_NOREDRAW = SET_WINDOW_POS_FLAGS{ .NOREDRAW = 1 };
pub const SWP_NOREPOSITION = SET_WINDOW_POS_FLAGS{ .NOOWNERZORDER = 1 };
pub const SWP_NOSENDCHANGING = SET_WINDOW_POS_FLAGS{ .NOSENDCHANGING = 1 };
pub const SWP_NOSIZE = SET_WINDOW_POS_FLAGS{ .NOSIZE = 1 };
pub const SWP_NOZORDER = SET_WINDOW_POS_FLAGS{ .NOZORDER = 1 };
pub const SWP_SHOWWINDOW = SET_WINDOW_POS_FLAGS{ .SHOWWINDOW = 1 };
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn SetWindowTextW(
hWnd: ?HWND,
lpString: ?[*:0]const u16,
) callconv(@import("std").os.windows.WINAPI) BOOL;
fn hexVal(c: u8) u4 {
if (c <= '9') return @as(u4, @intCast(c - '0'));
if (c >= 'a') return @as(u4, @intCast(c + 10 - 'a'));
return @as(u4, @intCast(c + 10 - 'A'));
}
fn decodeHexByte(hex: [2]u8) u8 {
return @as(u8, @intCast(hexVal(hex[0]))) << 4 | hexVal(hex[1]);
}
// TODO: this should probably be in the standard lib somewhere?
pub const Guid = extern union {
Ints: extern struct {
a: u32,
b: u16,
c: u16,
d: [8]u8,
},
Bytes: [16]u8,
const big_endian_hex_offsets = [16]u6{ 0, 2, 4, 6, 9, 11, 14, 16, 19, 21, 24, 26, 28, 30, 32, 34 };
const little_endian_hex_offsets = [16]u6{ 6, 4, 2, 0, 11, 9, 16, 14, 19, 21, 24, 26, 28, 30, 32, 34 };
const hex_offsets = switch (builtin.target.cpu.arch.endian()) {
.big => big_endian_hex_offsets,
.little => little_endian_hex_offsets,
};
pub fn initString(s: []const u8) Guid {
var guid = Guid{ .Bytes = undefined };
for (hex_offsets, 0..) |hex_offset, i| {
guid.Bytes[i] = decodeHexByte([2]u8{ s[hex_offset], s[hex_offset + 1] });
}
return guid;
}
fn hexVal(c: u8) u4 {
if (c <= '9') return @as(u4, @intCast(c - '0'));
if (c >= 'a') return @as(u4, @intCast(c + 10 - 'a'));
return @as(u4, @intCast(c + 10 - 'A'));
}
pub fn eql(riid1: Guid, riid2: Guid) bool {
return riid1.Ints.a == riid2.Ints.a and
riid1.Ints.b == riid2.Ints.b and
riid1.Ints.c == riid2.Ints.c and
@import("std").mem.eql(u8, &riid1.Ints.d, &riid2.Ints.d) and
@import("std").mem.eql(u8, &riid1.Bytes, &riid2.Bytes);
}
};
comptime {
std.debug.assert(@sizeOf(Guid) == 16);
}
pub const DIDEVICEINSTANCEA = extern struct {
dwSize: u32,
guidInstance: Guid,
guidProduct: Guid,
dwDevType: u32,
tszInstanceName: [260]CHAR,
tszProductName: [260]CHAR,
guidFFDriver: Guid,
wUsagePage: u16,
wUsage: u16,
};
pub const DIDEVICEINSTANCEW = extern struct {
dwSize: u32,
guidInstance: Guid,
guidProduct: Guid,
dwDevType: u32,
tszInstanceName: [260]u16,
tszProductName: [260]u16,
guidFFDriver: Guid,
wUsagePage: u16,
wUsage: u16,
};
pub const LPDIENUMDEVICESCALLBACKA = switch (@import("builtin").zig_backend) {
.stage1 => fn (
param0: ?*DIDEVICEINSTANCEA,
param1: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) BOOL,
else => *const fn (
param0: ?*DIDEVICEINSTANCEA,
param1: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) BOOL,
};
pub const LPDIENUMDEVICESCALLBACKW = switch (@import("builtin").zig_backend) {
.stage1 => fn (
param0: ?*DIDEVICEINSTANCEW,
param1: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) BOOL,
else => *const fn (
param0: ?*DIDEVICEINSTANCEW,
param1: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) BOOL,
};
pub const LPDICONFIGUREDEVICESCALLBACK = switch (@import("builtin").zig_backend) {
.stage1 => fn (
param0: ?*IUnknown,
param1: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) BOOL,
else => *const fn (
param0: ?*IUnknown,
param1: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) BOOL,
};
const IID_IUnknown_Value = Guid.initString("00000000-0000-0000-c000-000000000046");
pub const IID_IUnknown = &IID_IUnknown_Value;
pub const IUnknown = extern struct {
pub const VTable = extern struct {
QueryInterface: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IUnknown,
riid: ?*const Guid,
ppvObject: ?*?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
else => *const fn (
self: *const IUnknown,
riid: ?*const Guid,
ppvObject: ?*?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
},
AddRef: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IUnknown,
) callconv(@import("std").os.windows.WINAPI) u32,
else => *const fn (
self: *const IUnknown,
) callconv(@import("std").os.windows.WINAPI) u32,
},
Release: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IUnknown,
) callconv(@import("std").os.windows.WINAPI) u32,
else => *const fn (
self: *const IUnknown,
) callconv(@import("std").os.windows.WINAPI) u32,
},
};
vtable: *const VTable,
pub fn MethodMixin(comptime T: type) type {
return struct {
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IUnknown_QueryInterface(self: *const T, riid: ?*const Guid, ppvObject: ?*?*anyopaque) HRESULT {
return @as(*const IUnknown.VTable, @ptrCast(self.vtable)).QueryInterface(@as(*const IUnknown, @ptrCast(self)), riid, ppvObject);
}
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IUnknown_AddRef(self: *const T) u32 {
return @as(*const IUnknown.VTable, @ptrCast(self.vtable)).AddRef(@as(*const IUnknown, @ptrCast(self)));
}
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IUnknown_Release(self: *const T) u32 {
return @as(*const IUnknown.VTable, @ptrCast(self.vtable)).Release(@as(*const IUnknown, @ptrCast(self)));
}
};
}
pub usingnamespace MethodMixin(@This());
};
const IID_IDirectInput8W_Value = Guid.initString("bf798031-483a-4da2-aa99-5d64ed369700");
pub const IID_IDirectInput8W = &IID_IDirectInput8W_Value;
pub const IDirectInput8W = extern struct {
pub const VTable = extern struct {
base: IUnknown.VTable,
CreateDevice: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IDirectInput8W,
param0: ?*const Guid,
param1: ?*?*IDirectInputDevice8W,
param2: ?*IUnknown,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
else => *const fn (
self: *const IDirectInput8W,
param0: ?*const Guid,
param1: ?*?*IDirectInputDevice8W,
param2: ?*IUnknown,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
},
EnumDevices: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IDirectInput8W,
param0: u32,
param1: ?LPDIENUMDEVICESCALLBACKW,
param2: ?*anyopaque,
param3: u32,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
else => *const fn (
self: *const IDirectInput8W,
param0: u32,
param1: ?LPDIENUMDEVICESCALLBACKW,
param2: ?*anyopaque,
param3: u32,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
},
GetDeviceStatus: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IDirectInput8W,
param0: ?*const Guid,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
else => *const fn (
self: *const IDirectInput8W,
param0: ?*const Guid,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
},
RunControlPanel: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IDirectInput8W,
param0: ?HWND,
param1: u32,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
else => *const fn (
self: *const IDirectInput8W,
param0: ?HWND,
param1: u32,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
},
Initialize: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IDirectInput8W,
param0: ?HINSTANCE,
param1: u32,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
else => *const fn (
self: *const IDirectInput8W,
param0: ?HINSTANCE,
param1: u32,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
},
FindDevice: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IDirectInput8W,
param0: ?*const Guid,
param1: ?[*:0]const u16,
param2: ?*Guid,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
else => *const fn (
self: *const IDirectInput8W,
param0: ?*const Guid,
param1: ?[*:0]const u16,
param2: ?*Guid,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
},
EnumDevicesBySemantics: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IDirectInput8W,
param0: ?[*:0]const u16,
param1: ?*DIACTIONFORMATW,
param2: ?LPDIENUMDEVICESBYSEMANTICSCBW,
param3: ?*anyopaque,
param4: u32,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
else => *const fn (
self: *const IDirectInput8W,
param0: ?[*:0]const u16,
param1: ?*DIACTIONFORMATW,
param2: ?LPDIENUMDEVICESBYSEMANTICSCBW,
param3: ?*anyopaque,
param4: u32,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
},
ConfigureDevices: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IDirectInput8W,
param0: ?LPDICONFIGUREDEVICESCALLBACK,
param1: ?*DICONFIGUREDEVICESPARAMSW,
param2: u32,
param3: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
else => *const fn (
self: *const IDirectInput8W,
param0: ?LPDICONFIGUREDEVICESCALLBACK,
param1: ?*DICONFIGUREDEVICESPARAMSW,
param2: u32,
param3: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
},
};
vtable: *const VTable,
pub fn MethodMixin(comptime T: type) type {
return struct {
pub usingnamespace IUnknown.MethodMixin(T);
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IDirectInput8W_CreateDevice(self: *const T, param0: ?*const Guid, param1: ?*?*IDirectInputDevice8W, param2: ?*IUnknown) HRESULT {
return @as(*const IDirectInput8W.VTable, @ptrCast(self.vtable)).CreateDevice(@as(*const IDirectInput8W, @ptrCast(self)), param0, param1, param2);
}
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IDirectInput8W_EnumDevices(self: *const T, param0: u32, param1: ?LPDIENUMDEVICESCALLBACKW, param2: ?*anyopaque, param3: u32) HRESULT {
return @as(*const IDirectInput8W.VTable, @ptrCast(self.vtable)).EnumDevices(@as(*const IDirectInput8W, @ptrCast(self)), param0, param1, param2, param3);
}
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IDirectInput8W_GetDeviceStatus(self: *const T, param0: ?*const Guid) HRESULT {
return @as(*const IDirectInput8W.VTable, @ptrCast(self.vtable)).GetDeviceStatus(@as(*const IDirectInput8W, @ptrCast(self)), param0);
}
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IDirectInput8W_RunControlPanel(self: *const T, param0: ?HWND, param1: u32) HRESULT {
return @as(*const IDirectInput8W.VTable, @ptrCast(self.vtable)).RunControlPanel(@as(*const IDirectInput8W, @ptrCast(self)), param0, param1);
}
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IDirectInput8W_Initialize(self: *const T, param0: ?HINSTANCE, param1: u32) HRESULT {
return @as(*const IDirectInput8W.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDirectInput8W, @ptrCast(self)), param0, param1);
}
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IDirectInput8W_FindDevice(self: *const T, param0: ?*const Guid, param1: ?[*:0]const u16, param2: ?*Guid) HRESULT {
return @as(*const IDirectInput8W.VTable, @ptrCast(self.vtable)).FindDevice(@as(*const IDirectInput8W, @ptrCast(self)), param0, param1, param2);
}
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IDirectInput8W_EnumDevicesBySemantics(self: *const T, param0: ?[*:0]const u16, param1: ?*DIACTIONFORMATW, param2: ?LPDIENUMDEVICESBYSEMANTICSCBW, param3: ?*anyopaque, param4: u32) HRESULT {
return @as(*const IDirectInput8W.VTable, @ptrCast(self.vtable)).EnumDevicesBySemantics(@as(*const IDirectInput8W, @ptrCast(self)), param0, param1, param2, param3, param4);
}
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IDirectInput8W_ConfigureDevices(self: *const T, param0: ?LPDICONFIGUREDEVICESCALLBACK, param1: ?*DICONFIGUREDEVICESPARAMSW, param2: u32, param3: ?*anyopaque) HRESULT {
return @as(*const IDirectInput8W.VTable, @ptrCast(self.vtable)).ConfigureDevices(@as(*const IDirectInput8W, @ptrCast(self)), param0, param1, param2, param3);
}
};
}
pub usingnamespace MethodMixin(@This());
};
pub const IID_IDirectInputDevice8W = GUID{ .Data1 = 1423184001, .Data2 = 56341, .Data3 = 18483, .Data4 = .{ 164, 27, 116, 143, 115, 163, 129, 121 } };
pub const IDirectInputDevice8W = extern struct {
lpVtbl: *VTable,
const VTable = extern struct {
base: IUnknown.VTable,
GetCapabilities: *const fn (self: *const anyopaque, param0: [*c]DIDEVCAPS) callconv(WINAPI) HRESULT,
EnumObjects: *const fn (self: *const anyopaque, param0: LPDIENUMDEVICEOBJECTSCALLBACKW, param1: ?*anyopaque, param2: u32) callconv(WINAPI) HRESULT,
GetProperty: *const fn (self: *const anyopaque, param0: [*c]const GUID, param1: [*c]DIPROPHEADER) callconv(WINAPI) HRESULT,
SetProperty: *const fn (self: *const anyopaque, param0: [*c]const GUID, param1: [*c]DIPROPHEADER) callconv(WINAPI) HRESULT,
Acquire: *const fn (self: *const anyopaque) callconv(WINAPI) HRESULT,
Unacquire: *const fn (self: *const anyopaque) callconv(WINAPI) HRESULT,
GetDeviceState: *const fn (self: *const anyopaque, param0: u32, param1: ?*anyopaque) callconv(WINAPI) HRESULT,
GetDeviceData: *const fn (self: *const anyopaque, param0: u32, param1: [*c]DIDEVICEOBJECTDATA, param2: [*c]u32, param3: u32) callconv(WINAPI) HRESULT,
SetDataFormat: *const fn (self: *const anyopaque, param0: [*c]DIDATAFORMAT) callconv(WINAPI) HRESULT,
SetEventNotification: *const fn (self: *const anyopaque, param0: HANDLE) callconv(WINAPI) HRESULT,
SetCooperativeLevel: *const fn (self: *const anyopaque, param0: HWND, param1: u32) callconv(WINAPI) HRESULT,
GetObjectInfo: *const fn (self: *const anyopaque, param0: [*c]DIDEVICEOBJECTINSTANCEW, param1: u32, param2: u32) callconv(WINAPI) HRESULT,
GetDeviceInfo: *const fn (self: *const anyopaque, param0: [*c]DIDEVICEINSTANCEW) callconv(WINAPI) HRESULT,
RunControlPanel: *const fn (self: *const anyopaque, param0: HWND, param1: u32) callconv(WINAPI) HRESULT,
Initialize: *const fn (self: *const anyopaque, param0: HINSTANCE, param1: u32, param2: [*c]const GUID) callconv(WINAPI) HRESULT,
CreateEffect: *const fn (self: *const anyopaque, param0: [*c]const GUID, param1: [*c]DIEFFECT, param2: [*c][*c]IDirectInputEffect, param3: [*c]IUnknown) callconv(WINAPI) HRESULT,
EnumEffects: *const fn (self: *const anyopaque, param0: LPDIENUMEFFECTSCALLBACKW, param1: ?*anyopaque, param2: u32) callconv(WINAPI) HRESULT,
GetEffectInfo: *const fn (self: *const anyopaque, param0: [*c]DIEFFECTINFOW, param1: [*c]const GUID) callconv(WINAPI) HRESULT,
GetForceFeedbackState: *const fn (self: *const anyopaque, param0: [*c]u32) callconv(WINAPI) HRESULT,
SendForceFeedbackCommand: *const fn (self: *const anyopaque, param0: u32) callconv(WINAPI) HRESULT,
EnumCreatedEffectObjects: *const fn (self: *const anyopaque, param0: LPDIENUMCREATEDEFFECTOBJECTSCALLBACK, param1: ?*anyopaque, param2: u32) callconv(WINAPI) HRESULT,
Escape: *const fn (self: *const anyopaque, param0: [*c]DIEFFESCAPE) callconv(WINAPI) HRESULT,
Poll: *const fn (self: *const anyopaque) callconv(WINAPI) HRESULT,
SendDeviceData: *const fn (self: *const anyopaque, param0: u32, param1: [*c]DIDEVICEOBJECTDATA, param2: [*c]u32, param3: u32) callconv(WINAPI) HRESULT,
EnumEffectsInFile: *const fn (self: *const anyopaque, param0: [*c]const u16, param1: LPDIENUMEFFECTSINFILECALLBACK, param2: ?*anyopaque, param3: u32) callconv(WINAPI) HRESULT,
WriteEffectToFile: *const fn (self: *const anyopaque, param0: [*c]const u16, param1: u32, param2: [*c]DIFILEEFFECT, param3: u32) callconv(WINAPI) HRESULT,
BuildActionMap: *const fn (self: *const anyopaque, param0: [*c]DIACTIONFORMATW, param1: [*c]const u16, param2: u32) callconv(WINAPI) HRESULT,
SetActionMap: *const fn (self: *const anyopaque, param0: [*c]DIACTIONFORMATW, param1: [*c]const u16, param2: u32) callconv(WINAPI) HRESULT,
GetImageInfo: *const fn (self: *const anyopaque, param0: [*c]DIDEVICEIMAGEINFOHEADERW) callconv(WINAPI) HRESULT,
};
pub fn GetCapabilities(self: *const IDirectInputDevice8W, param0: [*c]DIDEVCAPS) HRESULT {
return self.lpVtbl.GetCapabilities(self, param0);
}
pub fn EnumObjects(self: *const IDirectInputDevice8W, param0: LPDIENUMDEVICEOBJECTSCALLBACKW, param1: ?*anyopaque, param2: u32) HRESULT {
return self.lpVtbl.EnumObjects(self, param0, param1, param2);
}
pub fn GetProperty(self: *const IDirectInputDevice8W, param0: [*c]const GUID, param1: [*c]DIPROPHEADER) HRESULT {
return self.lpVtbl.GetProperty(self, param0, param1);
}
pub fn SetProperty(self: *const IDirectInputDevice8W, param0: [*c]const GUID, param1: [*c]DIPROPHEADER) HRESULT {
return self.lpVtbl.SetProperty(self, param0, param1);
}
pub fn Acquire(self: *const IDirectInputDevice8W) HRESULT {
return self.lpVtbl.Acquire(self);
}
pub fn Unacquire(self: *const IDirectInputDevice8W) HRESULT {
return self.lpVtbl.Unacquire(self);
}
pub fn GetDeviceState(self: *const IDirectInputDevice8W, param0: u32, param1: ?*anyopaque) HRESULT {
return self.lpVtbl.GetDeviceState(self, param0, param1);
}
pub fn GetDeviceData(self: *const IDirectInputDevice8W, param0: u32, param1: [*c]DIDEVICEOBJECTDATA, param2: [*c]u32, param3: u32) HRESULT {
return self.lpVtbl.GetDeviceData(self, param0, param1, param2, param3);
}
pub fn SetDataFormat(self: *const IDirectInputDevice8W, param0: [*c]DIDATAFORMAT) HRESULT {
return self.lpVtbl.SetDataFormat(self, param0);
}
pub fn SetEventNotification(self: *const IDirectInputDevice8W, param0: HANDLE) HRESULT {
return self.lpVtbl.SetEventNotification(self, param0);
}
pub fn SetCooperativeLevel(self: *const IDirectInputDevice8W, param0: HWND, param1: u32) HRESULT {
return self.lpVtbl.SetCooperativeLevel(self, param0, param1);
}
pub fn GetObjectInfo(self: *const IDirectInputDevice8W, param0: [*c]DIDEVICEOBJECTINSTANCEW, param1: u32, param2: u32) HRESULT {
return self.lpVtbl.GetObjectInfo(self, param0, param1, param2);
}
pub fn GetDeviceInfo(self: *const IDirectInputDevice8W, param0: [*c]DIDEVICEINSTANCEW) HRESULT {
return self.lpVtbl.GetDeviceInfo(self, param0);
}
pub fn RunControlPanel(self: *const IDirectInputDevice8W, param0: HWND, param1: u32) HRESULT {
return self.lpVtbl.RunControlPanel(self, param0, param1);
}
pub fn Initialize(self: *const IDirectInputDevice8W, param0: HINSTANCE, param1: u32, param2: [*c]const GUID) HRESULT {
return self.lpVtbl.Initialize(self, param0, param1, param2);
}
pub fn CreateEffect(self: *const IDirectInputDevice8W, param0: [*c]const GUID, param1: [*c]DIEFFECT, param2: [*c][*c]IDirectInputEffect, param3: [*c]IUnknown) HRESULT {
return self.lpVtbl.CreateEffect(self, param0, param1, param2, param3);
}
pub fn EnumEffects(self: *const IDirectInputDevice8W, param0: LPDIENUMEFFECTSCALLBACKW, param1: ?*anyopaque, param2: u32) HRESULT {
return self.lpVtbl.EnumEffects(self, param0, param1, param2);
}
pub fn GetEffectInfo(self: *const IDirectInputDevice8W, param0: [*c]DIEFFECTINFOW, param1: [*c]const GUID) HRESULT {
return self.lpVtbl.GetEffectInfo(self, param0, param1);
}
pub fn GetForceFeedbackState(self: *const IDirectInputDevice8W, param0: [*c]u32) HRESULT {
return self.lpVtbl.GetForceFeedbackState(self, param0);
}
pub fn SendForceFeedbackCommand(self: *const IDirectInputDevice8W, param0: u32) HRESULT {
return self.lpVtbl.SendForceFeedbackCommand(self, param0);
}
pub fn EnumCreatedEffectObjects(self: *const IDirectInputDevice8W, param0: LPDIENUMCREATEDEFFECTOBJECTSCALLBACK, param1: ?*anyopaque, param2: u32) HRESULT {
return self.lpVtbl.EnumCreatedEffectObjects(self, param0, param1, param2);
}
pub fn Escape(self: *const IDirectInputDevice8W, param0: [*c]DIEFFESCAPE) HRESULT {
return self.lpVtbl.Escape(self, param0);
}
pub fn Poll(self: *const IDirectInputDevice8W) HRESULT {
return self.lpVtbl.Poll(self);
}
pub fn SendDeviceData(self: *const IDirectInputDevice8W, param0: u32, param1: [*c]DIDEVICEOBJECTDATA, param2: [*c]u32, param3: u32) HRESULT {
return self.lpVtbl.SendDeviceData(self, param0, param1, param2, param3);
}
pub fn EnumEffectsInFile(self: *const IDirectInputDevice8W, param0: [*c]const u16, param1: LPDIENUMEFFECTSINFILECALLBACK, param2: ?*anyopaque, param3: u32) HRESULT {
return self.lpVtbl.EnumEffectsInFile(self, param0, param1, param2, param3);
}
pub fn WriteEffectToFile(self: *const IDirectInputDevice8W, param0: [*c]const u16, param1: u32, param2: [*c]DIFILEEFFECT, param3: u32) HRESULT {
return self.lpVtbl.WriteEffectToFile(self, param0, param1, param2, param3);
}
pub fn BuildActionMap(self: *const IDirectInputDevice8W, param0: [*c]DIACTIONFORMATW, param1: [*c]const u16, param2: u32) HRESULT {
return self.lpVtbl.BuildActionMap(self, param0, param1, param2);
}
pub fn SetActionMap(self: *const IDirectInputDevice8W, param0: [*c]DIACTIONFORMATW, param1: [*c]const u16, param2: u32) HRESULT {
return self.lpVtbl.SetActionMap(self, param0, param1, param2);
}
pub fn GetImageInfo(self: *const IDirectInputDevice8W, param0: [*c]DIDEVICEIMAGEINFOHEADERW) HRESULT {
return self.lpVtbl.GetImageInfo(self, param0);
}
pub fn QueryInterface(self: *const IDirectInputDevice8W, riid: [*c]const GUID, ppvObject: [*c]?*anyopaque) HRESULT {
return self.lpVtbl.base.QueryInterface(self, riid, ppvObject);
}
pub fn AddRef(self: *const IDirectInputDevice8W) u32 {
return self.lpVtbl.base.IUnknown_AddRef(self);
}
pub fn Release(self: *const IDirectInputDevice8W) u32 {
return self.lpVtbl.base.IUnknown_Release(self);
}
};
pub const DIACTIONFORMATW = extern struct {
dwSize: u32,
dwActionSize: u32,
dwDataSize: u32,
dwNumActions: u32,
rgoAction: ?*DIACTIONW,
guidActionMap: Guid,
dwGenre: u32,
dwBufferSize: u32,
lAxisMin: i32,
lAxisMax: i32,
hInstString: ?HINSTANCE,
ftTimeStamp: FILETIME,
dwCRC: u32,
tszActionMap: [260]u16,
};
pub const DIACTIONW = extern struct {
uAppData: usize,
dwSemantic: u32,
dwFlags: u32,
Anonymous: extern union {
lptszActionName: ?[*:0]const u16,
uResIdString: u32,
},
guidInstance: Guid,
dwObjID: u32,
dwHow: u32,
};
pub const DIDEVICEIMAGEINFOHEADERW = extern struct {
dwSize: u32,
dwSizeImageInfo: u32,
dwcViews: u32,
dwcButtons: u32,
dwcAxes: u32,
dwcPOVs: u32,
dwBufferSize: u32,
dwBufferUsed: u32,
lprgImageInfoArray: ?*DIDEVICEIMAGEINFOW,
};
pub const DIDEVICEIMAGEINFOW = extern struct {
tszImagePath: [260]u16,
dwFlags: u32,
dwViewID: u32,
rcOverlay: RECT,
dwObjID: u32,
dwcValidPts: u32,
rgptCalloutLine: [5]POINT,
rcCalloutRect: RECT,
dwTextAlign: u32,
};
pub const LPDIENUMDEVICESBYSEMANTICSCBW = switch (@import("builtin").zig_backend) {
.stage1 => fn (
param0: ?*DIDEVICEINSTANCEW,
param1: ?*IDirectInputDevice8W,
param2: u32,
param3: u32,
param4: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) BOOL,
else => *const fn (
param0: ?*DIDEVICEINSTANCEW,
param1: ?*IDirectInputDevice8W,
param2: u32,
param3: u32,
param4: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) BOOL,
};
pub const DIFILEEFFECT = extern struct {
dwSize: u32,
GuidEffect: Guid,
lpDiEffect: ?*DIEFFECT,
szFriendlyName: [260]CHAR,
};
pub const DIEFFECT = extern struct {
dwSize: u32,
dwFlags: u32,
dwDuration: u32,
dwSamplePeriod: u32,
dwGain: u32,
dwTriggerButton: u32,
dwTriggerRepeatInterval: u32,
cAxes: u32,
rgdwAxes: ?*u32,
rglDirection: ?*i32,
lpEnvelope: ?*DIENVELOPE,
cbTypeSpecificParams: u32,
lpvTypeSpecificParams: ?*anyopaque,
dwStartDelay: u32,
};
pub const DIEFFESCAPE = extern struct {
dwSize: u32,
dwCommand: u32,
lpvInBuffer: ?*anyopaque,
cbInBuffer: u32,
lpvOutBuffer: ?*anyopaque,
cbOutBuffer: u32,
};
pub const DIENVELOPE = extern struct {
dwSize: u32,
dwAttackLevel: u32,
dwAttackTime: u32,
dwFadeLevel: u32,
dwFadeTime: u32,
};
pub const LPDIENUMEFFECTSCALLBACKW = switch (@import("builtin").zig_backend) {
.stage1 => fn (
param0: ?*DIEFFECTINFOW,
param1: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) BOOL,
else => *const fn (
param0: ?*DIEFFECTINFOW,
param1: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) BOOL,
};
pub const DIEFFECTINFOW = extern struct {
dwSize: u32,
guid: Guid,
dwEffType: u32,
dwStaticParams: u32,
dwDynamicParams: u32,
tszName: [260]u16,
};
pub const LPDIENUMEFFECTSINFILECALLBACK = switch (@import("builtin").zig_backend) {
.stage1 => fn (
param0: ?*DIFILEEFFECT,
param1: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) BOOL,
else => *const fn (
param0: ?*DIFILEEFFECT,
param1: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) BOOL,
};
pub const DIDEVICEOBJECTDATA = extern struct {
dwOfs: u32,
dwData: u32,
dwTimeStamp: u32,
dwSequence: u32,
uAppData: usize,
};
pub const LPDIENUMCREATEDEFFECTOBJECTSCALLBACK = switch (@import("builtin").zig_backend) {
.stage1 => fn (
param0: ?*IDirectInputEffect,
param1: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) BOOL,
else => *const fn (
param0: ?*IDirectInputEffect,
param1: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) BOOL,
};
const IID_IDirectInputEffect_Value = Guid.initString("e7e1f7c0-88d2-11d0-9ad0-00a0c9a06e35");
pub const IID_IDirectInputEffect = &IID_IDirectInputEffect_Value;
pub const IDirectInputEffect = extern struct {
pub const VTable = extern struct {
base: IUnknown.VTable,
Initialize: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IDirectInputEffect,
param0: ?HINSTANCE,
param1: u32,
param2: ?*const Guid,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
else => *const fn (
self: *const IDirectInputEffect,
param0: ?HINSTANCE,
param1: u32,
param2: ?*const Guid,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
},
GetEffectGuid: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IDirectInputEffect,
param0: ?*Guid,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
else => *const fn (
self: *const IDirectInputEffect,
param0: ?*Guid,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
},
GetParameters: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IDirectInputEffect,
param0: ?*DIEFFECT,
param1: u32,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
else => *const fn (
self: *const IDirectInputEffect,
param0: ?*DIEFFECT,
param1: u32,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
},
SetParameters: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IDirectInputEffect,
param0: ?*DIEFFECT,
param1: u32,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
else => *const fn (
self: *const IDirectInputEffect,
param0: ?*DIEFFECT,
param1: u32,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
},
Start: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IDirectInputEffect,
param0: u32,
param1: u32,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
else => *const fn (
self: *const IDirectInputEffect,
param0: u32,
param1: u32,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
},
Stop: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IDirectInputEffect,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
else => *const fn (
self: *const IDirectInputEffect,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
},
GetEffectStatus: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IDirectInputEffect,
param0: ?*u32,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
else => *const fn (
self: *const IDirectInputEffect,
param0: ?*u32,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
},
Download: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IDirectInputEffect,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
else => *const fn (
self: *const IDirectInputEffect,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
},
Unload: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IDirectInputEffect,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
else => *const fn (
self: *const IDirectInputEffect,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
},
Escape: switch (@import("builtin").zig_backend) {
.stage1 => fn (
self: *const IDirectInputEffect,
param0: ?*DIEFFESCAPE,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
else => *const fn (
self: *const IDirectInputEffect,
param0: ?*DIEFFESCAPE,
) callconv(@import("std").os.windows.WINAPI) HRESULT,
},
};
vtable: *const VTable,
pub fn MethodMixin(comptime T: type) type {
return struct {
pub usingnamespace IUnknown.MethodMixin(T);
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IDirectInputEffect_Initialize(self: *const T, param0: ?HINSTANCE, param1: u32, param2: ?*const Guid) HRESULT {
return @as(*const IDirectInputEffect.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IDirectInputEffect, @ptrCast(self)), param0, param1, param2);
}
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IDirectInputEffect_GetEffectGuid(self: *const T, param0: ?*Guid) HRESULT {
return @as(*const IDirectInputEffect.VTable, @ptrCast(self.vtable)).GetEffectGuid(@as(*const IDirectInputEffect, @ptrCast(self)), param0);
}
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IDirectInputEffect_GetParameters(self: *const T, param0: ?*DIEFFECT, param1: u32) HRESULT {
return @as(*const IDirectInputEffect.VTable, @ptrCast(self.vtable)).GetParameters(@as(*const IDirectInputEffect, @ptrCast(self)), param0, param1);
}
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IDirectInputEffect_SetParameters(self: *const T, param0: ?*DIEFFECT, param1: u32) HRESULT {
return @as(*const IDirectInputEffect.VTable, @ptrCast(self.vtable)).SetParameters(@as(*const IDirectInputEffect, @ptrCast(self)), param0, param1);
}
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IDirectInputEffect_Start(self: *const T, param0: u32, param1: u32) HRESULT {
return @as(*const IDirectInputEffect.VTable, @ptrCast(self.vtable)).Start(@as(*const IDirectInputEffect, @ptrCast(self)), param0, param1);
}
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IDirectInputEffect_Stop(self: *const T) HRESULT {
return @as(*const IDirectInputEffect.VTable, @ptrCast(self.vtable)).Stop(@as(*const IDirectInputEffect, @ptrCast(self)));
}
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IDirectInputEffect_GetEffectStatus(self: *const T, param0: ?*u32) HRESULT {
return @as(*const IDirectInputEffect.VTable, @ptrCast(self.vtable)).GetEffectStatus(@as(*const IDirectInputEffect, @ptrCast(self)), param0);
}
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IDirectInputEffect_Download(self: *const T) HRESULT {
return @as(*const IDirectInputEffect.VTable, @ptrCast(self.vtable)).Download(@as(*const IDirectInputEffect, @ptrCast(self)));
}
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IDirectInputEffect_Unload(self: *const T) HRESULT {
return @as(*const IDirectInputEffect.VTable, @ptrCast(self.vtable)).Unload(@as(*const IDirectInputEffect, @ptrCast(self)));
}
// NOTE: method is namespaced with interface name to avoid conflicts for now
pub inline fn IDirectInputEffect_Escape(self: *const T, param0: ?*DIEFFESCAPE) HRESULT {
return @as(*const IDirectInputEffect.VTable, @ptrCast(self.vtable)).Escape(@as(*const IDirectInputEffect, @ptrCast(self)), param0);
}
};
}
pub usingnamespace MethodMixin(@This());
};
pub const DIDATAFORMAT = extern struct {
dwSize: u32,
dwObjSize: u32,
dwFlags: u32,
dwDataSize: u32,
dwNumObjs: u32,
rgodf: ?*DIOBJECTDATAFORMAT,
};
pub const DIOBJECTDATAFORMAT = extern struct {
pguid: ?*const Guid,
dwOfs: u32,
dwType: u32,
dwFlags: u32,
};
pub const DIPROPHEADER = extern struct {
dwSize: u32,
dwHeaderSize: u32,
dwObj: u32,
dwHow: u32,
};
pub const DIDEVCAPS = extern struct {
dwSize: u32,
dwFlags: u32,
dwDevType: u32,
dwAxes: u32,
dwButtons: u32,
dwPOVs: u32,
dwFFSamplePeriod: u32,
dwFFMinTimeResolution: u32,
dwFirmwareRevision: u32,
dwHardwareRevision: u32,
dwFFDriverVersion: u32,
};
pub const DICONFIGUREDEVICESPARAMSW = extern struct {
dwSize: u32,
dwcUsers: u32,
lptszUserNames: ?PWSTR,
dwcFormats: u32,
lprgFormats: ?*DIACTIONFORMATW,
hwnd: ?HWND,
dics: DICOLORSET,
lpUnkDDSTarget: ?*IUnknown,
};
pub const DIDEVICEOBJECTINSTANCEW = extern struct {
dwSize: u32,
guidType: Guid,
dwOfs: u32,
dwType: u32,
dwFlags: u32,
tszName: [260]u16,
dwFFMaxForce: u32,
dwFFForceResolution: u32,
wCollectionNumber: u16,
wDesignatorIndex: u16,
wUsagePage: u16,
wUsage: u16,
dwDimension: u32,
wExponent: u16,
wReportId: u16,
};
pub const DICOLORSET = extern struct {
dwSize: u32,
cTextFore: u32,
cTextHighlight: u32,
cCalloutLine: u32,
cCalloutHighlight: u32,
cBorder: u32,
cControlFill: u32,
cHighlightFill: u32,
cAreaFill: u32,
};
pub const LPDIENUMDEVICEOBJECTSCALLBACKW = switch (@import("builtin").zig_backend) {
.stage1 => fn (
param0: ?*DIDEVICEOBJECTINSTANCEW,
param1: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) BOOL,
else => *const fn (
param0: ?*DIDEVICEOBJECTINSTANCEW,
param1: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) BOOL,
};
pub const IDI_APPLICATION = 32512;
pub extern "user32" fn LoadIconW(
hInstance: ?HINSTANCE,
lpIconName: ?[*:0]align(1) const u16,
) callconv(@import("std").os.windows.WINAPI) ?HICON;
pub const IDC_ARROW = 32512;
pub const IDC_HAND = 32649;
pub const IDC_HELP = 32651;
pub const IDC_IBEAM = 32513;
pub const IDC_ICON = 32641;
pub const IDC_CROSS = 32515;
pub const IDC_SIZE = 32640;
pub const IDC_SIZEALL = 32646;
pub const IDC_SIZENESW = 32643;
pub const IDC_SIZENS = 32645;
pub const IDC_SIZENWSE = 32642;
pub const IDC_SIZEWE = 32644;
pub const IDC_NO = 32648;
pub extern "user32" fn LoadCursorW(
hInstance: ?HINSTANCE,
lpCursorName: ?[*:0]align(1) const u16,
) callconv(@import("std").os.windows.WINAPI) ?HCURSOR;
pub const WNDCLASSW = extern struct {
style: WNDCLASS_STYLES,
lpfnWndProc: ?WNDPROC,
cbClsExtra: i32,
cbWndExtra: i32,
hInstance: ?HINSTANCE,
hIcon: ?HICON,
hCursor: ?HCURSOR,
hbrBackground: ?HBRUSH,
lpszMenuName: ?[*:0]const u16,
lpszClassName: ?[*:0]const u16,
};
//--------------------------------------------------------------------------------
// Section: Types (154)
//--------------------------------------------------------------------------------
pub const WNDCLASS_STYLES = packed struct(u32) {
VREDRAW: u1 = 0,
HREDRAW: u1 = 0,
_2: u1 = 0,
DBLCLKS: u1 = 0,
_4: u1 = 0,
OWNDC: u1 = 0,
CLASSDC: u1 = 0,
PARENTDC: u1 = 0,
_8: u1 = 0,
NOCLOSE: u1 = 0,
_10: u1 = 0,
SAVEBITS: u1 = 0,
BYTEALIGNCLIENT: u1 = 0,
BYTEALIGNWINDOW: u1 = 0,
GLOBALCLASS: u1 = 0,
_15: u1 = 0,
IME: u1 = 0,
DROPSHADOW: u1 = 0,
_18: u1 = 0,
_19: u1 = 0,
_20: u1 = 0,
_21: u1 = 0,
_22: u1 = 0,
_23: u1 = 0,
_24: u1 = 0,
_25: u1 = 0,
_26: u1 = 0,
_27: u1 = 0,
_28: u1 = 0,
_29: u1 = 0,
_30: u1 = 0,
_31: u1 = 0,
};
pub const CS_VREDRAW = WNDCLASS_STYLES{ .VREDRAW = 1 };
pub const CS_HREDRAW = WNDCLASS_STYLES{ .HREDRAW = 1 };
pub const CS_DBLCLKS = WNDCLASS_STYLES{ .DBLCLKS = 1 };
pub const CS_OWNDC = WNDCLASS_STYLES{ .OWNDC = 1 };
pub const CS_CLASSDC = WNDCLASS_STYLES{ .CLASSDC = 1 };
pub const CS_PARENTDC = WNDCLASS_STYLES{ .PARENTDC = 1 };
pub const CS_NOCLOSE = WNDCLASS_STYLES{ .NOCLOSE = 1 };
pub const CS_SAVEBITS = WNDCLASS_STYLES{ .SAVEBITS = 1 };
pub const CS_BYTEALIGNCLIENT = WNDCLASS_STYLES{ .BYTEALIGNCLIENT = 1 };
pub const CS_BYTEALIGNWINDOW = WNDCLASS_STYLES{ .BYTEALIGNWINDOW = 1 };
pub const CS_GLOBALCLASS = WNDCLASS_STYLES{ .GLOBALCLASS = 1 };
pub const CS_IME = WNDCLASS_STYLES{ .IME = 1 };
pub const CS_DROPSHADOW = WNDCLASS_STYLES{ .DROPSHADOW = 1 };
pub const WNDPROC = switch (@import("builtin").zig_backend) {
.stage1 => fn (
param0: HWND,
param1: u32,
param2: WPARAM,
param3: LPARAM,
) callconv(@import("std").os.windows.WINAPI) LRESULT,
else => *const fn (
param0: HWND,
param1: u32,
param2: WPARAM,
param3: LPARAM,
) callconv(@import("std").os.windows.WINAPI) LRESULT,
};
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn RegisterClassW(
lpWndClass: ?*const WNDCLASSW,
) callconv(@import("std").os.windows.WINAPI) u16;
pub const WINDOW_EX_STYLE = packed struct(u32) {
DLGMODALFRAME: u1 = 0,
_1: u1 = 0,
NOPARENTNOTIFY: u1 = 0,
TOPMOST: u1 = 0,
ACCEPTFILES: u1 = 0,
TRANSPARENT: u1 = 0,
MDICHILD: u1 = 0,
TOOLWINDOW: u1 = 0,
WINDOWEDGE: u1 = 0,
CLIENTEDGE: u1 = 0,
CONTEXTHELP: u1 = 0,
_11: u1 = 0,
RIGHT: u1 = 0,
RTLREADING: u1 = 0,
LEFTSCROLLBAR: u1 = 0,
_15: u1 = 0,
CONTROLPARENT: u1 = 0,
STATICEDGE: u1 = 0,
APPWINDOW: u1 = 0,
LAYERED: u1 = 0,
NOINHERITLAYOUT: u1 = 0,
NOREDIRECTIONBITMAP: u1 = 0,
LAYOUTRTL: u1 = 0,
_23: u1 = 0,
_24: u1 = 0,
COMPOSITED: u1 = 0,
_26: u1 = 0,
NOACTIVATE: u1 = 0,
_28: u1 = 0,
_29: u1 = 0,
_30: u1 = 0,
_31: u1 = 0,
};
pub const WS_EX_DLGMODALFRAME = WINDOW_EX_STYLE{ .DLGMODALFRAME = 1 };
pub const WS_EX_NOPARENTNOTIFY = WINDOW_EX_STYLE{ .NOPARENTNOTIFY = 1 };
pub const WS_EX_TOPMOST = WINDOW_EX_STYLE{ .TOPMOST = 1 };
pub const WS_EX_ACCEPTFILES = WINDOW_EX_STYLE{ .ACCEPTFILES = 1 };
pub const WS_EX_TRANSPARENT = WINDOW_EX_STYLE{ .TRANSPARENT = 1 };
pub const WS_EX_MDICHILD = WINDOW_EX_STYLE{ .MDICHILD = 1 };
pub const WS_EX_TOOLWINDOW = WINDOW_EX_STYLE{ .TOOLWINDOW = 1 };
pub const WS_EX_WINDOWEDGE = WINDOW_EX_STYLE{ .WINDOWEDGE = 1 };
pub const WS_EX_CLIENTEDGE = WINDOW_EX_STYLE{ .CLIENTEDGE = 1 };
pub const WS_EX_CONTEXTHELP = WINDOW_EX_STYLE{ .CONTEXTHELP = 1 };
pub const WS_EX_RIGHT = WINDOW_EX_STYLE{ .RIGHT = 1 };
pub const WS_EX_LEFT = WINDOW_EX_STYLE{};
pub const WS_EX_RTLREADING = WINDOW_EX_STYLE{ .RTLREADING = 1 };
pub const WS_EX_LTRREADING = WINDOW_EX_STYLE{};
pub const WS_EX_LEFTSCROLLBAR = WINDOW_EX_STYLE{ .LEFTSCROLLBAR = 1 };
pub const WS_EX_RIGHTSCROLLBAR = WINDOW_EX_STYLE{};
pub const WS_EX_CONTROLPARENT = WINDOW_EX_STYLE{ .CONTROLPARENT = 1 };
pub const WS_EX_STATICEDGE = WINDOW_EX_STYLE{ .STATICEDGE = 1 };
pub const WS_EX_APPWINDOW = WINDOW_EX_STYLE{ .APPWINDOW = 1 };
pub const WS_EX_OVERLAPPEDWINDOW = WINDOW_EX_STYLE{
.WINDOWEDGE = 1,
.CLIENTEDGE = 1,
};
pub const WS_EX_PALETTEWINDOW = WINDOW_EX_STYLE{
.TOPMOST = 1,
.TOOLWINDOW = 1,
.WINDOWEDGE = 1,
};
pub const WS_EX_LAYERED = WINDOW_EX_STYLE{ .LAYERED = 1 };
pub const WS_EX_NOINHERITLAYOUT = WINDOW_EX_STYLE{ .NOINHERITLAYOUT = 1 };
pub const WS_EX_NOREDIRECTIONBITMAP = WINDOW_EX_STYLE{ .NOREDIRECTIONBITMAP = 1 };
pub const WS_EX_LAYOUTRTL = WINDOW_EX_STYLE{ .LAYOUTRTL = 1 };
pub const WS_EX_COMPOSITED = WINDOW_EX_STYLE{ .COMPOSITED = 1 };
pub const WS_EX_NOACTIVATE = WINDOW_EX_STYLE{ .NOACTIVATE = 1 };
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn CreateWindowExW(
dwExStyle: WINDOW_EX_STYLE,
lpClassName: ?[*:0]align(1) const u16,
lpWindowName: ?[*:0]const u16,
dwStyle: WINDOW_STYLE,
X: i32,
Y: i32,
nWidth: i32,
nHeight: i32,
hWndParent: ?HWND,
hMenu: ?HMENU,
hInstance: ?HINSTANCE,
lpParam: ?*anyopaque,
) callconv(@import("std").os.windows.WINAPI) ?HWND;
pub extern "user32" fn ShowCursor(
bShow: BOOL,
) callconv(@import("std").os.windows.WINAPI) i32;
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn ShowWindow(
hWnd: ?HWND,
nCmdShow: SHOW_WINDOW_CMD,
) callconv(@import("std").os.windows.WINAPI) BOOL;
pub const WINDOW_STYLE = packed struct(u32) {
ACTIVECAPTION: u1 = 0,
_1: u1 = 0,
_2: u1 = 0,
_3: u1 = 0,
_4: u1 = 0,
_5: u1 = 0,
_6: u1 = 0,
_7: u1 = 0,
_8: u1 = 0,
_9: u1 = 0,
_10: u1 = 0,
_11: u1 = 0,
_12: u1 = 0,
_13: u1 = 0,
_14: u1 = 0,
_15: u1 = 0,
TABSTOP: u1 = 0,
GROUP: u1 = 0,
THICKFRAME: u1 = 0,
SYSMENU: u1 = 0,
HSCROLL: u1 = 0,
VSCROLL: u1 = 0,
DLGFRAME: u1 = 0,
BORDER: u1 = 0,
MAXIMIZE: u1 = 0,
CLIPCHILDREN: u1 = 0,
CLIPSIBLINGS: u1 = 0,
DISABLED: u1 = 0,
VISIBLE: u1 = 0,
MINIMIZE: u1 = 0,
CHILD: u1 = 0,
POPUP: u1 = 0,
// MINIMIZEBOX (bit index 17) conflicts with GROUP
// MAXIMIZEBOX (bit index 16) conflicts with TABSTOP
// ICONIC (bit index 29) conflicts with MINIMIZE
// SIZEBOX (bit index 18) conflicts with THICKFRAME
// CHILDWINDOW (bit index 30) conflicts with CHILD
};
pub const WS_OVERLAPPED = WINDOW_STYLE{};
pub const WS_POPUP = WINDOW_STYLE{ .POPUP = 1 };
pub const WS_CHILD = WINDOW_STYLE{ .CHILD = 1 };
pub const WS_MINIMIZE = WINDOW_STYLE{ .MINIMIZE = 1 };
pub const WS_VISIBLE = WINDOW_STYLE{ .VISIBLE = 1 };
pub const WS_DISABLED = WINDOW_STYLE{ .DISABLED = 1 };
pub const WS_CLIPSIBLINGS = WINDOW_STYLE{ .CLIPSIBLINGS = 1 };
pub const WS_CLIPCHILDREN = WINDOW_STYLE{ .CLIPCHILDREN = 1 };
pub const WS_MAXIMIZE = WINDOW_STYLE{ .MAXIMIZE = 1 };
pub const WS_CAPTION = WINDOW_STYLE{
.DLGFRAME = 1,
.BORDER = 1,
};
pub const WS_BORDER = WINDOW_STYLE{ .BORDER = 1 };
pub const WS_DLGFRAME = WINDOW_STYLE{ .DLGFRAME = 1 };
pub const WS_VSCROLL = WINDOW_STYLE{ .VSCROLL = 1 };
pub const WS_HSCROLL = WINDOW_STYLE{ .HSCROLL = 1 };
pub const WS_SYSMENU = WINDOW_STYLE{ .SYSMENU = 1 };
pub const WS_THICKFRAME = WINDOW_STYLE{ .THICKFRAME = 1 };
pub const WS_GROUP = WINDOW_STYLE{ .GROUP = 1 };
pub const WS_TABSTOP = WINDOW_STYLE{ .TABSTOP = 1 };
pub const WS_MINIMIZEBOX = WINDOW_STYLE{ .GROUP = 1 };
pub const WS_MAXIMIZEBOX = WINDOW_STYLE{ .TABSTOP = 1 };
pub const WS_TILED = WINDOW_STYLE{};
pub const WS_ICONIC = WINDOW_STYLE{ .MINIMIZE = 1 };
pub const WS_SIZEBOX = WINDOW_STYLE{ .THICKFRAME = 1 };
pub const WS_TILEDWINDOW = WINDOW_STYLE{
.TABSTOP = 1,
.GROUP = 1,
.THICKFRAME = 1,
.SYSMENU = 1,
.DLGFRAME = 1,
.BORDER = 1,
};
pub const WS_OVERLAPPEDWINDOW = WINDOW_STYLE{
.TABSTOP = 1,
.GROUP = 1,
.THICKFRAME = 1,
.SYSMENU = 1,
.DLGFRAME = 1,
.BORDER = 1,
};
pub const WS_POPUPWINDOW = WINDOW_STYLE{
.SYSMENU = 1,
.BORDER = 1,
.POPUP = 1,
};
pub const WS_CHILDWINDOW = WINDOW_STYLE{ .CHILD = 1 };
pub const WS_ACTIVECAPTION = WINDOW_STYLE{ .ACTIVECAPTION = 1 };
pub const SHOW_WINDOW_CMD = packed struct(u32) {
SHOWNORMAL: u1 = 0,
SHOWMINIMIZED: u1 = 0,
SHOWNOACTIVATE: u1 = 0,
SHOWNA: u1 = 0,
SMOOTHSCROLL: u1 = 0,
_5: u1 = 0,
_6: u1 = 0,
_7: u1 = 0,
_8: u1 = 0,
_9: u1 = 0,
_10: u1 = 0,
_11: u1 = 0,
_12: u1 = 0,
_13: u1 = 0,
_14: u1 = 0,
_15: u1 = 0,
_16: u1 = 0,
_17: u1 = 0,
_18: u1 = 0,
_19: u1 = 0,
_20: u1 = 0,
_21: u1 = 0,
_22: u1 = 0,
_23: u1 = 0,
_24: u1 = 0,
_25: u1 = 0,
_26: u1 = 0,
_27: u1 = 0,
_28: u1 = 0,
_29: u1 = 0,
_30: u1 = 0,
_31: u1 = 0,
// NORMAL (bit index 0) conflicts with SHOWNORMAL
// PARENTCLOSING (bit index 0) conflicts with SHOWNORMAL
// OTHERZOOM (bit index 1) conflicts with SHOWMINIMIZED
// OTHERUNZOOM (bit index 2) conflicts with SHOWNOACTIVATE
// SCROLLCHILDREN (bit index 0) conflicts with SHOWNORMAL
// INVALIDATE (bit index 1) conflicts with SHOWMINIMIZED
// ERASE (bit index 2) conflicts with SHOWNOACTIVATE
};
pub const SW_FORCEMINIMIZE = SHOW_WINDOW_CMD{
.SHOWNORMAL = 1,
.SHOWMINIMIZED = 1,
.SHOWNA = 1,
};
pub const SW_HIDE = SHOW_WINDOW_CMD{};
pub const SW_MAXIMIZE = SHOW_WINDOW_CMD{
.SHOWNORMAL = 1,
.SHOWMINIMIZED = 1,
};
pub const SW_MINIMIZE = SHOW_WINDOW_CMD{
.SHOWMINIMIZED = 1,
.SHOWNOACTIVATE = 1,
};
pub const SW_RESTORE = SHOW_WINDOW_CMD{
.SHOWNORMAL = 1,
.SHOWNA = 1,
};
pub const SW_SHOW = SHOW_WINDOW_CMD{
.SHOWNORMAL = 1,
.SHOWNOACTIVATE = 1,
};
pub const SW_SHOWDEFAULT = SHOW_WINDOW_CMD{
.SHOWMINIMIZED = 1,
.SHOWNA = 1,
};
pub const SW_SHOWMAXIMIZED = SHOW_WINDOW_CMD{
.SHOWNORMAL = 1,
.SHOWMINIMIZED = 1,
};
pub const SW_SHOWMINIMIZED = SHOW_WINDOW_CMD{ .SHOWMINIMIZED = 1 };
pub const SW_SHOWMINNOACTIVE = SHOW_WINDOW_CMD{
.SHOWNORMAL = 1,
.SHOWMINIMIZED = 1,
.SHOWNOACTIVATE = 1,
};
pub const SW_SHOWNA = SHOW_WINDOW_CMD{ .SHOWNA = 1 };
pub const SW_SHOWNOACTIVATE = SHOW_WINDOW_CMD{ .SHOWNOACTIVATE = 1 };
pub const SW_SHOWNORMAL = SHOW_WINDOW_CMD{ .SHOWNORMAL = 1 };
pub const SW_NORMAL = SHOW_WINDOW_CMD{ .SHOWNORMAL = 1 };
pub const SW_MAX = SHOW_WINDOW_CMD{
.SHOWNORMAL = 1,
.SHOWMINIMIZED = 1,
.SHOWNA = 1,
};
pub const SW_PARENTCLOSING = SHOW_WINDOW_CMD{ .SHOWNORMAL = 1 };
pub const SW_OTHERZOOM = SHOW_WINDOW_CMD{ .SHOWMINIMIZED = 1 };
pub const SW_PARENTOPENING = SHOW_WINDOW_CMD{
.SHOWNORMAL = 1,
.SHOWMINIMIZED = 1,
};
pub const SW_OTHERUNZOOM = SHOW_WINDOW_CMD{ .SHOWNOACTIVATE = 1 };
pub const SW_SCROLLCHILDREN = SHOW_WINDOW_CMD{ .SHOWNORMAL = 1 };
pub const SW_INVALIDATE = SHOW_WINDOW_CMD{ .SHOWMINIMIZED = 1 };
pub const SW_ERASE = SHOW_WINDOW_CMD{ .SHOWNOACTIVATE = 1 };
pub const SW_SMOOTHSCROLL = SHOW_WINDOW_CMD{ .SMOOTHSCROLL = 1 };
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn DefWindowProcW(
hWnd: ?HWND,
Msg: u32,
wParam: WPARAM,
lParam: LPARAM,
) callconv(@import("std").os.windows.WINAPI) LRESULT;
pub const MINMAXINFO = extern struct {
ptReserved: POINT,
ptMaxSize: POINT,
ptMaxPosition: POINT,
ptMinTrackSize: POINT,
ptMaxTrackSize: POINT,
};
pub const WM_NULL = @as(u32, 0);
pub const WM_CREATE = @as(u32, 1);
pub const WM_DESTROY = @as(u32, 2);
pub const WM_MOVE = @as(u32, 3);
pub const WM_SIZE = @as(u32, 5);
pub const WM_ACTIVATE = @as(u32, 6);
pub const WA_INACTIVE = @as(u32, 0);
pub const WA_ACTIVE = @as(u32, 1);
pub const WA_CLICKACTIVE = @as(u32, 2);
pub const WM_SETFOCUS = @as(u32, 7);
pub const WM_KILLFOCUS = @as(u32, 8);
pub const WM_ENABLE = @as(u32, 10);
pub const WM_SETREDRAW = @as(u32, 11);
pub const WM_SETTEXT = @as(u32, 12);
pub const WM_GETTEXT = @as(u32, 13);
pub const WM_GETTEXTLENGTH = @as(u32, 14);
pub const WM_PAINT = @as(u32, 15);
pub const WM_CLOSE = @as(u32, 16);
pub const WM_QUERYENDSESSION = @as(u32, 17);
pub const WM_QUERYOPEN = @as(u32, 19);
pub const WM_ENDSESSION = @as(u32, 22);
pub const WM_QUIT = @as(u32, 18);
pub const WM_GETMINMAXINFO = @as(u32, 36);
pub const WM_KEYFIRST = @as(u32, 256);
pub const WM_KEYDOWN = @as(u32, 256);
pub const WM_KEYUP = @as(u32, 257);
pub const WM_CHAR = @as(u32, 258);
pub const WM_DEADCHAR = @as(u32, 259);
pub const WM_SYSKEYDOWN = @as(u32, 260);
pub const WM_SYSKEYUP = @as(u32, 261);
pub const WM_SYSCHAR = @as(u32, 262);
pub const WM_SYSDEADCHAR = @as(u32, 263);
pub const WM_KEYLAST = @as(u32, 265);
pub const UNICODE_NOCHAR = @as(u32, 65535);
pub const WM_IME_STARTCOMPOSITION = @as(u32, 269);
pub const WM_IME_ENDCOMPOSITION = @as(u32, 270);
pub const WM_IME_COMPOSITION = @as(u32, 271);
pub const WM_IME_KEYLAST = @as(u32, 271);
pub const WM_INITDIALOG = @as(u32, 272);
pub const WM_COMMAND = @as(u32, 273);
pub const WM_SYSCOMMAND = @as(u32, 274);
pub const WM_TIMER = @as(u32, 275);
pub const WM_HSCROLL = @as(u32, 276);
pub const WM_VSCROLL = @as(u32, 277);
pub const WM_INITMENU = @as(u32, 278);
pub const WM_INITMENUPOPUP = @as(u32, 279);
pub const WM_GESTURE = @as(u32, 281);
pub const WM_GESTURENOTIFY = @as(u32, 282);
pub const WM_MENUSELECT = @as(u32, 287);
pub const WM_MENUCHAR = @as(u32, 288);
pub const WM_ENTERIDLE = @as(u32, 289);
pub const WM_MENURBUTTONUP = @as(u32, 290);
pub const WM_MENUDRAG = @as(u32, 291);
pub const WM_MENUGETOBJECT = @as(u32, 292);
pub const WM_UNINITMENUPOPUP = @as(u32, 293);
pub const WM_MENUCOMMAND = @as(u32, 294);
pub const WM_CHANGEUISTATE = @as(u32, 295);
pub const WM_UPDATEUISTATE = @as(u32, 296);
pub const WM_QUERYUISTATE = @as(u32, 297);
pub const UIS_SET = @as(u32, 1);
pub const UIS_CLEAR = @as(u32, 2);
pub const UIS_INITIALIZE = @as(u32, 3);
pub const UISF_HIDEFOCUS = @as(u32, 1);
pub const UISF_HIDEACCEL = @as(u32, 2);
pub const UISF_ACTIVE = @as(u32, 4);
pub const WM_CTLCOLORMSGBOX = @as(u32, 306);
pub const WM_CTLCOLOREDIT = @as(u32, 307);
pub const WM_CTLCOLORLISTBOX = @as(u32, 308);
pub const WM_CTLCOLORBTN = @as(u32, 309);
pub const WM_CTLCOLORDLG = @as(u32, 310);
pub const WM_CTLCOLORSCROLLBAR = @as(u32, 311);
pub const WM_CTLCOLORSTATIC = @as(u32, 312);
pub const MN_GETHMENU = @as(u32, 481);
pub const WM_MOUSEFIRST = @as(u32, 512);
pub const WM_MOUSEMOVE = @as(u32, 512);
pub const WM_LBUTTONDOWN = @as(u32, 513);
pub const WM_LBUTTONUP = @as(u32, 514);
pub const WM_LBUTTONDBLCLK = @as(u32, 515);
pub const WM_RBUTTONDOWN = @as(u32, 516);
pub const WM_RBUTTONUP = @as(u32, 517);
pub const WM_RBUTTONDBLCLK = @as(u32, 518);
pub const WM_MBUTTONDOWN = @as(u32, 519);
pub const WM_MBUTTONUP = @as(u32, 520);
pub const WM_MBUTTONDBLCLK = @as(u32, 521);
pub const WM_MOUSEWHEEL = @as(u32, 522);
pub const WM_XBUTTONDOWN = @as(u32, 523);
pub const WM_XBUTTONUP = @as(u32, 524);
pub const WM_XBUTTONDBLCLK = @as(u32, 525);
pub const WM_MOUSEHWHEEL = @as(u32, 526);
pub const WM_MOUSELAST = @as(u32, 526);
pub const WHEEL_DELTA = @as(u32, 120);
pub const WM_PARENTNOTIFY = @as(u32, 528);
pub const WM_ENTERMENULOOP = @as(u32, 529);
pub const WM_EXITMENULOOP = @as(u32, 530);
pub const WM_NEXTMENU = @as(u32, 531);
pub const WM_SIZING = @as(u32, 532);
pub const WM_CAPTURECHANGED = @as(u32, 533);
pub const WM_MOVING = @as(u32, 534);
pub const WM_POWERBROADCAST = @as(u32, 536);
pub const KEYBD_EVENT_FLAGS = packed struct(u32) {
EXTENDEDKEY: u1 = 0,
KEYUP: u1 = 0,
UNICODE: u1 = 0,
SCANCODE: u1 = 0,
_4: u1 = 0,
_5: u1 = 0,
_6: u1 = 0,
_7: u1 = 0,
_8: u1 = 0,
_9: u1 = 0,
_10: u1 = 0,
_11: u1 = 0,
_12: u1 = 0,
_13: u1 = 0,
_14: u1 = 0,
_15: u1 = 0,
_16: u1 = 0,
_17: u1 = 0,
_18: u1 = 0,
_19: u1 = 0,
_20: u1 = 0,
_21: u1 = 0,
_22: u1 = 0,
_23: u1 = 0,
_24: u1 = 0,
_25: u1 = 0,
_26: u1 = 0,
_27: u1 = 0,
_28: u1 = 0,
_29: u1 = 0,
_30: u1 = 0,
_31: u1 = 0,
};
pub const KEYEVENTF_EXTENDEDKEY = KEYBD_EVENT_FLAGS{ .EXTENDEDKEY = 1 };
pub const KEYEVENTF_KEYUP = KEYBD_EVENT_FLAGS{ .KEYUP = 1 };
pub const KEYEVENTF_SCANCODE = KEYBD_EVENT_FLAGS{ .SCANCODE = 1 };
pub const KEYEVENTF_UNICODE = KEYBD_EVENT_FLAGS{ .UNICODE = 1 };
pub const MOUSE_EVENT_FLAGS = packed struct(u32) {
MOVE: u1 = 0,
LEFTDOWN: u1 = 0,
LEFTUP: u1 = 0,
RIGHTDOWN: u1 = 0,
RIGHTUP: u1 = 0,
MIDDLEDOWN: u1 = 0,
MIDDLEUP: u1 = 0,
XDOWN: u1 = 0,
XUP: u1 = 0,
_9: u1 = 0,
_10: u1 = 0,
WHEEL: u1 = 0,
HWHEEL: u1 = 0,
MOVE_NOCOALESCE: u1 = 0,
VIRTUALDESK: u1 = 0,
ABSOLUTE: u1 = 0,
_16: u1 = 0,
_17: u1 = 0,
_18: u1 = 0,
_19: u1 = 0,
_20: u1 = 0,
_21: u1 = 0,
_22: u1 = 0,
_23: u1 = 0,
_24: u1 = 0,
_25: u1 = 0,
_26: u1 = 0,
_27: u1 = 0,
_28: u1 = 0,
_29: u1 = 0,
_30: u1 = 0,
_31: u1 = 0,
};
pub const MOUSEEVENTF_ABSOLUTE = MOUSE_EVENT_FLAGS{ .ABSOLUTE = 1 };
pub const MOUSEEVENTF_LEFTDOWN = MOUSE_EVENT_FLAGS{ .LEFTDOWN = 1 };
pub const MOUSEEVENTF_LEFTUP = MOUSE_EVENT_FLAGS{ .LEFTUP = 1 };
pub const MOUSEEVENTF_MIDDLEDOWN = MOUSE_EVENT_FLAGS{ .MIDDLEDOWN = 1 };
pub const MOUSEEVENTF_MIDDLEUP = MOUSE_EVENT_FLAGS{ .MIDDLEUP = 1 };
pub const MOUSEEVENTF_MOVE = MOUSE_EVENT_FLAGS{ .MOVE = 1 };
pub const MOUSEEVENTF_RIGHTDOWN = MOUSE_EVENT_FLAGS{ .RIGHTDOWN = 1 };
pub const MOUSEEVENTF_RIGHTUP = MOUSE_EVENT_FLAGS{ .RIGHTUP = 1 };
pub const MOUSEEVENTF_WHEEL = MOUSE_EVENT_FLAGS{ .WHEEL = 1 };
pub const MOUSEEVENTF_XDOWN = MOUSE_EVENT_FLAGS{ .XDOWN = 1 };
pub const MOUSEEVENTF_XUP = MOUSE_EVENT_FLAGS{ .XUP = 1 };
pub const MOUSEEVENTF_HWHEEL = MOUSE_EVENT_FLAGS{ .HWHEEL = 1 };
pub const MOUSEEVENTF_MOVE_NOCOALESCE = MOUSE_EVENT_FLAGS{ .MOVE_NOCOALESCE = 1 };
pub const MOUSEEVENTF_VIRTUALDESK = MOUSE_EVENT_FLAGS{ .VIRTUALDESK = 1 };
pub const INPUT_TYPE = enum(u32) {
MOUSE = 0,
KEYBOARD = 1,
HARDWARE = 2,
};
pub const INPUT_MOUSE = INPUT_TYPE.MOUSE;
pub const INPUT_KEYBOARD = INPUT_TYPE.KEYBOARD;
pub const INPUT_HARDWARE = INPUT_TYPE.HARDWARE;
pub const TRACKMOUSEEVENT_FLAGS = packed struct(u32) {
HOVER: u1 = 0,
LEAVE: u1 = 0,
_2: u1 = 0,
_3: u1 = 0,
NONCLIENT: u1 = 0,
_5: u1 = 0,
_6: u1 = 0,
_7: u1 = 0,
_8: u1 = 0,
_9: u1 = 0,
_10: u1 = 0,
_11: u1 = 0,
_12: u1 = 0,
_13: u1 = 0,
_14: u1 = 0,
_15: u1 = 0,
_16: u1 = 0,
_17: u1 = 0,
_18: u1 = 0,
_19: u1 = 0,
_20: u1 = 0,
_21: u1 = 0,
_22: u1 = 0,
_23: u1 = 0,
_24: u1 = 0,
_25: u1 = 0,
_26: u1 = 0,
_27: u1 = 0,
_28: u1 = 0,
_29: u1 = 0,
QUERY: u1 = 0,
CANCEL: u1 = 0,
};
pub const TME_CANCEL = TRACKMOUSEEVENT_FLAGS{ .CANCEL = 1 };
pub const TME_HOVER = TRACKMOUSEEVENT_FLAGS{ .HOVER = 1 };
pub const TME_LEAVE = TRACKMOUSEEVENT_FLAGS{ .LEAVE = 1 };
pub const TME_NONCLIENT = TRACKMOUSEEVENT_FLAGS{ .NONCLIENT = 1 };
pub const TME_QUERY = TRACKMOUSEEVENT_FLAGS{ .QUERY = 1 };
pub const VIRTUAL_KEY = enum(u16) {
@"0" = 48,
@"1" = 49,
@"2" = 50,
@"3" = 51,
@"4" = 52,
@"5" = 53,
@"6" = 54,
@"7" = 55,
@"8" = 56,
@"9" = 57,
A = 65,
B = 66,
C = 67,
D = 68,
E = 69,
F = 70,
G = 71,
H = 72,
I = 73,
J = 74,
K = 75,
L = 76,
M = 77,
N = 78,
O = 79,
P = 80,
Q = 81,
R = 82,
S = 83,
T = 84,
U = 85,
V = 86,
W = 87,
X = 88,
Y = 89,
Z = 90,
LBUTTON = 1,
RBUTTON = 2,
CANCEL = 3,
MBUTTON = 4,
XBUTTON1 = 5,
XBUTTON2 = 6,
BACK = 8,
TAB = 9,
CLEAR = 12,
RETURN = 13,
SHIFT = 16,
CONTROL = 17,
MENU = 18,
PAUSE = 19,
CAPITAL = 20,
KANA = 21,
// HANGEUL = 21, this enum value conflicts with KANA
// HANGUL = 21, this enum value conflicts with KANA
IME_ON = 22,
JUNJA = 23,
FINAL = 24,
HANJA = 25,
// KANJI = 25, this enum value conflicts with HANJA
IME_OFF = 26,
ESCAPE = 27,
CONVERT = 28,
NONCONVERT = 29,
ACCEPT = 30,
MODECHANGE = 31,
SPACE = 32,
PRIOR = 33,
NEXT = 34,
END = 35,
HOME = 36,
LEFT = 37,
UP = 38,
RIGHT = 39,
DOWN = 40,
SELECT = 41,
PRINT = 42,
EXECUTE = 43,
SNAPSHOT = 44,
INSERT = 45,
DELETE = 46,
HELP = 47,
LWIN = 91,
RWIN = 92,
APPS = 93,
SLEEP = 95,
NUMPAD0 = 96,
NUMPAD1 = 97,
NUMPAD2 = 98,
NUMPAD3 = 99,
NUMPAD4 = 100,
NUMPAD5 = 101,
NUMPAD6 = 102,
NUMPAD7 = 103,
NUMPAD8 = 104,
NUMPAD9 = 105,
MULTIPLY = 106,
ADD = 107,
SEPARATOR = 108,
SUBTRACT = 109,
DECIMAL = 110,
DIVIDE = 111,
F1 = 112,
F2 = 113,
F3 = 114,
F4 = 115,
F5 = 116,
F6 = 117,
F7 = 118,
F8 = 119,
F9 = 120,
F10 = 121,
F11 = 122,
F12 = 123,
F13 = 124,
F14 = 125,
F15 = 126,
F16 = 127,
F17 = 128,
F18 = 129,
F19 = 130,
F20 = 131,
F21 = 132,
F22 = 133,
F23 = 134,
F24 = 135,
NAVIGATION_VIEW = 136,
NAVIGATION_MENU = 137,
NAVIGATION_UP = 138,
NAVIGATION_DOWN = 139,
NAVIGATION_LEFT = 140,
NAVIGATION_RIGHT = 141,
NAVIGATION_ACCEPT = 142,
NAVIGATION_CANCEL = 143,
NUMLOCK = 144,
SCROLL = 145,
OEM_NEC_EQUAL = 146,
// OEM_FJ_JISHO = 146, this enum value conflicts with OEM_NEC_EQUAL
OEM_FJ_MASSHOU = 147,
OEM_FJ_TOUROKU = 148,
OEM_FJ_LOYA = 149,
OEM_FJ_ROYA = 150,
LSHIFT = 160,
RSHIFT = 161,
LCONTROL = 162,
RCONTROL = 163,
LMENU = 164,
RMENU = 165,
BROWSER_BACK = 166,
BROWSER_FORWARD = 167,
BROWSER_REFRESH = 168,
BROWSER_STOP = 169,
BROWSER_SEARCH = 170,
BROWSER_FAVORITES = 171,
BROWSER_HOME = 172,
VOLUME_MUTE = 173,
VOLUME_DOWN = 174,
VOLUME_UP = 175,
MEDIA_NEXT_TRACK = 176,
MEDIA_PREV_TRACK = 177,
MEDIA_STOP = 178,
MEDIA_PLAY_PAUSE = 179,
LAUNCH_MAIL = 180,
LAUNCH_MEDIA_SELECT = 181,
LAUNCH_APP1 = 182,
LAUNCH_APP2 = 183,
OEM_1 = 186,
OEM_PLUS = 187,
OEM_COMMA = 188,
OEM_MINUS = 189,
OEM_PERIOD = 190,
OEM_2 = 191,
OEM_3 = 192,
GAMEPAD_A = 195,
GAMEPAD_B = 196,
GAMEPAD_X = 197,
GAMEPAD_Y = 198,
GAMEPAD_RIGHT_SHOULDER = 199,
GAMEPAD_LEFT_SHOULDER = 200,
GAMEPAD_LEFT_TRIGGER = 201,
GAMEPAD_RIGHT_TRIGGER = 202,
GAMEPAD_DPAD_UP = 203,
GAMEPAD_DPAD_DOWN = 204,
GAMEPAD_DPAD_LEFT = 205,
GAMEPAD_DPAD_RIGHT = 206,
GAMEPAD_MENU = 207,
GAMEPAD_VIEW = 208,
GAMEPAD_LEFT_THUMBSTICK_BUTTON = 209,
GAMEPAD_RIGHT_THUMBSTICK_BUTTON = 210,
GAMEPAD_LEFT_THUMBSTICK_UP = 211,
GAMEPAD_LEFT_THUMBSTICK_DOWN = 212,
GAMEPAD_LEFT_THUMBSTICK_RIGHT = 213,
GAMEPAD_LEFT_THUMBSTICK_LEFT = 214,
GAMEPAD_RIGHT_THUMBSTICK_UP = 215,
GAMEPAD_RIGHT_THUMBSTICK_DOWN = 216,
GAMEPAD_RIGHT_THUMBSTICK_RIGHT = 217,
GAMEPAD_RIGHT_THUMBSTICK_LEFT = 218,
OEM_4 = 219,
OEM_5 = 220,
OEM_6 = 221,
OEM_7 = 222,
OEM_8 = 223,
OEM_AX = 225,
OEM_102 = 226,
ICO_HELP = 227,
ICO_00 = 228,
PROCESSKEY = 229,
ICO_CLEAR = 230,
PACKET = 231,
OEM_RESET = 233,
OEM_JUMP = 234,
OEM_PA1 = 235,
OEM_PA2 = 236,
OEM_PA3 = 237,
OEM_WSCTRL = 238,
OEM_CUSEL = 239,
OEM_ATTN = 240,
OEM_FINISH = 241,
OEM_COPY = 242,
OEM_AUTO = 243,
OEM_ENLW = 244,
OEM_BACKTAB = 245,
ATTN = 246,
CRSEL = 247,
EXSEL = 248,
EREOF = 249,
PLAY = 250,
ZOOM = 251,
NONAME = 252,
PA1 = 253,
OEM_CLEAR = 254,
};
pub const VK_0 = VIRTUAL_KEY.@"0";
pub const VK_1 = VIRTUAL_KEY.@"1";
pub const VK_2 = VIRTUAL_KEY.@"2";
pub const VK_3 = VIRTUAL_KEY.@"3";
pub const VK_4 = VIRTUAL_KEY.@"4";
pub const VK_5 = VIRTUAL_KEY.@"5";
pub const VK_6 = VIRTUAL_KEY.@"6";
pub const VK_7 = VIRTUAL_KEY.@"7";
pub const VK_8 = VIRTUAL_KEY.@"8";
pub const VK_9 = VIRTUAL_KEY.@"9";
pub const VK_A = VIRTUAL_KEY.A;
pub const VK_B = VIRTUAL_KEY.B;
pub const VK_C = VIRTUAL_KEY.C;
pub const VK_D = VIRTUAL_KEY.D;
pub const VK_E = VIRTUAL_KEY.E;
pub const VK_F = VIRTUAL_KEY.F;
pub const VK_G = VIRTUAL_KEY.G;
pub const VK_H = VIRTUAL_KEY.H;
pub const VK_I = VIRTUAL_KEY.I;
pub const VK_J = VIRTUAL_KEY.J;
pub const VK_K = VIRTUAL_KEY.K;
pub const VK_L = VIRTUAL_KEY.L;
pub const VK_M = VIRTUAL_KEY.M;
pub const VK_N = VIRTUAL_KEY.N;
pub const VK_O = VIRTUAL_KEY.O;
pub const VK_P = VIRTUAL_KEY.P;
pub const VK_Q = VIRTUAL_KEY.Q;
pub const VK_R = VIRTUAL_KEY.R;
pub const VK_S = VIRTUAL_KEY.S;
pub const VK_T = VIRTUAL_KEY.T;
pub const VK_U = VIRTUAL_KEY.U;
pub const VK_V = VIRTUAL_KEY.V;
pub const VK_W = VIRTUAL_KEY.W;
pub const VK_X = VIRTUAL_KEY.X;
pub const VK_Y = VIRTUAL_KEY.Y;
pub const VK_Z = VIRTUAL_KEY.Z;
pub const VK_LBUTTON = VIRTUAL_KEY.LBUTTON;
pub const VK_RBUTTON = VIRTUAL_KEY.RBUTTON;
pub const VK_CANCEL = VIRTUAL_KEY.CANCEL;
pub const VK_MBUTTON = VIRTUAL_KEY.MBUTTON;
pub const VK_XBUTTON1 = VIRTUAL_KEY.XBUTTON1;
pub const VK_XBUTTON2 = VIRTUAL_KEY.XBUTTON2;
pub const VK_BACK = VIRTUAL_KEY.BACK;
pub const VK_TAB = VIRTUAL_KEY.TAB;
pub const VK_CLEAR = VIRTUAL_KEY.CLEAR;
pub const VK_RETURN = VIRTUAL_KEY.RETURN;
pub const VK_SHIFT = VIRTUAL_KEY.SHIFT;
pub const VK_CONTROL = VIRTUAL_KEY.CONTROL;
pub const VK_MENU = VIRTUAL_KEY.MENU;
pub const VK_PAUSE = VIRTUAL_KEY.PAUSE;
pub const VK_CAPITAL = VIRTUAL_KEY.CAPITAL;
pub const VK_KANA = VIRTUAL_KEY.KANA;
pub const VK_HANGEUL = VIRTUAL_KEY.KANA;
pub const VK_HANGUL = VIRTUAL_KEY.KANA;
pub const VK_IME_ON = VIRTUAL_KEY.IME_ON;
pub const VK_JUNJA = VIRTUAL_KEY.JUNJA;
pub const VK_FINAL = VIRTUAL_KEY.FINAL;
pub const VK_HANJA = VIRTUAL_KEY.HANJA;
pub const VK_KANJI = VIRTUAL_KEY.HANJA;
pub const VK_IME_OFF = VIRTUAL_KEY.IME_OFF;
pub const VK_ESCAPE = VIRTUAL_KEY.ESCAPE;
pub const VK_CONVERT = VIRTUAL_KEY.CONVERT;
pub const VK_NONCONVERT = VIRTUAL_KEY.NONCONVERT;
pub const VK_ACCEPT = VIRTUAL_KEY.ACCEPT;
pub const VK_MODECHANGE = VIRTUAL_KEY.MODECHANGE;
pub const VK_SPACE = VIRTUAL_KEY.SPACE;
pub const VK_PRIOR = VIRTUAL_KEY.PRIOR;
pub const VK_NEXT = VIRTUAL_KEY.NEXT;
pub const VK_END = VIRTUAL_KEY.END;
pub const VK_HOME = VIRTUAL_KEY.HOME;
pub const VK_LEFT = VIRTUAL_KEY.LEFT;
pub const VK_UP = VIRTUAL_KEY.UP;
pub const VK_RIGHT = VIRTUAL_KEY.RIGHT;
pub const VK_DOWN = VIRTUAL_KEY.DOWN;
pub const VK_SELECT = VIRTUAL_KEY.SELECT;
pub const VK_PRINT = VIRTUAL_KEY.PRINT;
pub const VK_EXECUTE = VIRTUAL_KEY.EXECUTE;
pub const VK_SNAPSHOT = VIRTUAL_KEY.SNAPSHOT;
pub const VK_INSERT = VIRTUAL_KEY.INSERT;
pub const VK_DELETE = VIRTUAL_KEY.DELETE;
pub const VK_HELP = VIRTUAL_KEY.HELP;
pub const VK_LWIN = VIRTUAL_KEY.LWIN;
pub const VK_RWIN = VIRTUAL_KEY.RWIN;
pub const VK_APPS = VIRTUAL_KEY.APPS;
pub const VK_SLEEP = VIRTUAL_KEY.SLEEP;
pub const VK_NUMPAD0 = VIRTUAL_KEY.NUMPAD0;
pub const VK_NUMPAD1 = VIRTUAL_KEY.NUMPAD1;
pub const VK_NUMPAD2 = VIRTUAL_KEY.NUMPAD2;
pub const VK_NUMPAD3 = VIRTUAL_KEY.NUMPAD3;
pub const VK_NUMPAD4 = VIRTUAL_KEY.NUMPAD4;
pub const VK_NUMPAD5 = VIRTUAL_KEY.NUMPAD5;
pub const VK_NUMPAD6 = VIRTUAL_KEY.NUMPAD6;
pub const VK_NUMPAD7 = VIRTUAL_KEY.NUMPAD7;
pub const VK_NUMPAD8 = VIRTUAL_KEY.NUMPAD8;
pub const VK_NUMPAD9 = VIRTUAL_KEY.NUMPAD9;
pub const VK_MULTIPLY = VIRTUAL_KEY.MULTIPLY;
pub const VK_ADD = VIRTUAL_KEY.ADD;
pub const VK_SEPARATOR = VIRTUAL_KEY.SEPARATOR;
pub const VK_SUBTRACT = VIRTUAL_KEY.SUBTRACT;
pub const VK_DECIMAL = VIRTUAL_KEY.DECIMAL;
pub const VK_DIVIDE = VIRTUAL_KEY.DIVIDE;
pub const VK_F1 = VIRTUAL_KEY.F1;
pub const VK_F2 = VIRTUAL_KEY.F2;
pub const VK_F3 = VIRTUAL_KEY.F3;
pub const VK_F4 = VIRTUAL_KEY.F4;
pub const VK_F5 = VIRTUAL_KEY.F5;
pub const VK_F6 = VIRTUAL_KEY.F6;
pub const VK_F7 = VIRTUAL_KEY.F7;
pub const VK_F8 = VIRTUAL_KEY.F8;
pub const VK_F9 = VIRTUAL_KEY.F9;
pub const VK_F10 = VIRTUAL_KEY.F10;
pub const VK_F11 = VIRTUAL_KEY.F11;
pub const VK_F12 = VIRTUAL_KEY.F12;
pub const VK_F13 = VIRTUAL_KEY.F13;
pub const VK_F14 = VIRTUAL_KEY.F14;
pub const VK_F15 = VIRTUAL_KEY.F15;
pub const VK_F16 = VIRTUAL_KEY.F16;
pub const VK_F17 = VIRTUAL_KEY.F17;
pub const VK_F18 = VIRTUAL_KEY.F18;
pub const VK_F19 = VIRTUAL_KEY.F19;
pub const VK_F20 = VIRTUAL_KEY.F20;
pub const VK_F21 = VIRTUAL_KEY.F21;
pub const VK_F22 = VIRTUAL_KEY.F22;
pub const VK_F23 = VIRTUAL_KEY.F23;
pub const VK_F24 = VIRTUAL_KEY.F24;
pub const VK_NAVIGATION_VIEW = VIRTUAL_KEY.NAVIGATION_VIEW;
pub const VK_NAVIGATION_MENU = VIRTUAL_KEY.NAVIGATION_MENU;
pub const VK_NAVIGATION_UP = VIRTUAL_KEY.NAVIGATION_UP;
pub const VK_NAVIGATION_DOWN = VIRTUAL_KEY.NAVIGATION_DOWN;
pub const VK_NAVIGATION_LEFT = VIRTUAL_KEY.NAVIGATION_LEFT;
pub const VK_NAVIGATION_RIGHT = VIRTUAL_KEY.NAVIGATION_RIGHT;
pub const VK_NAVIGATION_ACCEPT = VIRTUAL_KEY.NAVIGATION_ACCEPT;
pub const VK_NAVIGATION_CANCEL = VIRTUAL_KEY.NAVIGATION_CANCEL;
pub const VK_NUMLOCK = VIRTUAL_KEY.NUMLOCK;
pub const VK_SCROLL = VIRTUAL_KEY.SCROLL;
pub const VK_OEM_NEC_EQUAL = VIRTUAL_KEY.OEM_NEC_EQUAL;
pub const VK_OEM_FJ_JISHO = VIRTUAL_KEY.OEM_NEC_EQUAL;
pub const VK_OEM_FJ_MASSHOU = VIRTUAL_KEY.OEM_FJ_MASSHOU;
pub const VK_OEM_FJ_TOUROKU = VIRTUAL_KEY.OEM_FJ_TOUROKU;
pub const VK_OEM_FJ_LOYA = VIRTUAL_KEY.OEM_FJ_LOYA;
pub const VK_OEM_FJ_ROYA = VIRTUAL_KEY.OEM_FJ_ROYA;
pub const VK_LSHIFT = VIRTUAL_KEY.LSHIFT;
pub const VK_RSHIFT = VIRTUAL_KEY.RSHIFT;
pub const VK_LCONTROL = VIRTUAL_KEY.LCONTROL;
pub const VK_RCONTROL = VIRTUAL_KEY.RCONTROL;
pub const VK_LMENU = VIRTUAL_KEY.LMENU;
pub const VK_RMENU = VIRTUAL_KEY.RMENU;
pub const VK_BROWSER_BACK = VIRTUAL_KEY.BROWSER_BACK;
pub const VK_BROWSER_FORWARD = VIRTUAL_KEY.BROWSER_FORWARD;
pub const VK_BROWSER_REFRESH = VIRTUAL_KEY.BROWSER_REFRESH;
pub const VK_BROWSER_STOP = VIRTUAL_KEY.BROWSER_STOP;
pub const VK_BROWSER_SEARCH = VIRTUAL_KEY.BROWSER_SEARCH;
pub const VK_BROWSER_FAVORITES = VIRTUAL_KEY.BROWSER_FAVORITES;
pub const VK_BROWSER_HOME = VIRTUAL_KEY.BROWSER_HOME;
pub const VK_VOLUME_MUTE = VIRTUAL_KEY.VOLUME_MUTE;
pub const VK_VOLUME_DOWN = VIRTUAL_KEY.VOLUME_DOWN;
pub const VK_VOLUME_UP = VIRTUAL_KEY.VOLUME_UP;
pub const VK_MEDIA_NEXT_TRACK = VIRTUAL_KEY.MEDIA_NEXT_TRACK;
pub const VK_MEDIA_PREV_TRACK = VIRTUAL_KEY.MEDIA_PREV_TRACK;
pub const VK_MEDIA_STOP = VIRTUAL_KEY.MEDIA_STOP;
pub const VK_MEDIA_PLAY_PAUSE = VIRTUAL_KEY.MEDIA_PLAY_PAUSE;
pub const VK_LAUNCH_MAIL = VIRTUAL_KEY.LAUNCH_MAIL;
pub const VK_LAUNCH_MEDIA_SELECT = VIRTUAL_KEY.LAUNCH_MEDIA_SELECT;
pub const VK_LAUNCH_APP1 = VIRTUAL_KEY.LAUNCH_APP1;
pub const VK_LAUNCH_APP2 = VIRTUAL_KEY.LAUNCH_APP2;
pub const VK_OEM_1 = VIRTUAL_KEY.OEM_1;
pub const VK_OEM_PLUS = VIRTUAL_KEY.OEM_PLUS;
pub const VK_OEM_COMMA = VIRTUAL_KEY.OEM_COMMA;
pub const VK_OEM_MINUS = VIRTUAL_KEY.OEM_MINUS;
pub const VK_OEM_PERIOD = VIRTUAL_KEY.OEM_PERIOD;
pub const VK_OEM_2 = VIRTUAL_KEY.OEM_2;
pub const VK_OEM_3 = VIRTUAL_KEY.OEM_3;
pub const VK_GAMEPAD_A = VIRTUAL_KEY.GAMEPAD_A;
pub const VK_GAMEPAD_B = VIRTUAL_KEY.GAMEPAD_B;
pub const VK_GAMEPAD_X = VIRTUAL_KEY.GAMEPAD_X;
pub const VK_GAMEPAD_Y = VIRTUAL_KEY.GAMEPAD_Y;
pub const VK_GAMEPAD_RIGHT_SHOULDER = VIRTUAL_KEY.GAMEPAD_RIGHT_SHOULDER;
pub const VK_GAMEPAD_LEFT_SHOULDER = VIRTUAL_KEY.GAMEPAD_LEFT_SHOULDER;
pub const VK_GAMEPAD_LEFT_TRIGGER = VIRTUAL_KEY.GAMEPAD_LEFT_TRIGGER;
pub const VK_GAMEPAD_RIGHT_TRIGGER = VIRTUAL_KEY.GAMEPAD_RIGHT_TRIGGER;
pub const VK_GAMEPAD_DPAD_UP = VIRTUAL_KEY.GAMEPAD_DPAD_UP;
pub const VK_GAMEPAD_DPAD_DOWN = VIRTUAL_KEY.GAMEPAD_DPAD_DOWN;
pub const VK_GAMEPAD_DPAD_LEFT = VIRTUAL_KEY.GAMEPAD_DPAD_LEFT;
pub const VK_GAMEPAD_DPAD_RIGHT = VIRTUAL_KEY.GAMEPAD_DPAD_RIGHT;
pub const VK_GAMEPAD_MENU = VIRTUAL_KEY.GAMEPAD_MENU;
pub const VK_GAMEPAD_VIEW = VIRTUAL_KEY.GAMEPAD_VIEW;
pub const VK_GAMEPAD_LEFT_THUMBSTICK_BUTTON = VIRTUAL_KEY.GAMEPAD_LEFT_THUMBSTICK_BUTTON;
pub const VK_GAMEPAD_RIGHT_THUMBSTICK_BUTTON = VIRTUAL_KEY.GAMEPAD_RIGHT_THUMBSTICK_BUTTON;
pub const VK_GAMEPAD_LEFT_THUMBSTICK_UP = VIRTUAL_KEY.GAMEPAD_LEFT_THUMBSTICK_UP;
pub const VK_GAMEPAD_LEFT_THUMBSTICK_DOWN = VIRTUAL_KEY.GAMEPAD_LEFT_THUMBSTICK_DOWN;
pub const VK_GAMEPAD_LEFT_THUMBSTICK_RIGHT = VIRTUAL_KEY.GAMEPAD_LEFT_THUMBSTICK_RIGHT;
pub const VK_GAMEPAD_LEFT_THUMBSTICK_LEFT = VIRTUAL_KEY.GAMEPAD_LEFT_THUMBSTICK_LEFT;
pub const VK_GAMEPAD_RIGHT_THUMBSTICK_UP = VIRTUAL_KEY.GAMEPAD_RIGHT_THUMBSTICK_UP;
pub const VK_GAMEPAD_RIGHT_THUMBSTICK_DOWN = VIRTUAL_KEY.GAMEPAD_RIGHT_THUMBSTICK_DOWN;
pub const VK_GAMEPAD_RIGHT_THUMBSTICK_RIGHT = VIRTUAL_KEY.GAMEPAD_RIGHT_THUMBSTICK_RIGHT;
pub const VK_GAMEPAD_RIGHT_THUMBSTICK_LEFT = VIRTUAL_KEY.GAMEPAD_RIGHT_THUMBSTICK_LEFT;
pub const VK_OEM_4 = VIRTUAL_KEY.OEM_4;
pub const VK_OEM_5 = VIRTUAL_KEY.OEM_5;
pub const VK_OEM_6 = VIRTUAL_KEY.OEM_6;
pub const VK_OEM_7 = VIRTUAL_KEY.OEM_7;
pub const VK_OEM_8 = VIRTUAL_KEY.OEM_8;
pub const VK_OEM_AX = VIRTUAL_KEY.OEM_AX;
pub const VK_OEM_102 = VIRTUAL_KEY.OEM_102;
pub const VK_ICO_HELP = VIRTUAL_KEY.ICO_HELP;
pub const VK_ICO_00 = VIRTUAL_KEY.ICO_00;
pub const VK_PROCESSKEY = VIRTUAL_KEY.PROCESSKEY;
pub const VK_ICO_CLEAR = VIRTUAL_KEY.ICO_CLEAR;
pub const VK_PACKET = VIRTUAL_KEY.PACKET;
pub const VK_OEM_RESET = VIRTUAL_KEY.OEM_RESET;
pub const VK_OEM_JUMP = VIRTUAL_KEY.OEM_JUMP;
pub const VK_OEM_PA1 = VIRTUAL_KEY.OEM_PA1;
pub const VK_OEM_PA2 = VIRTUAL_KEY.OEM_PA2;
pub const VK_OEM_PA3 = VIRTUAL_KEY.OEM_PA3;
pub const VK_OEM_WSCTRL = VIRTUAL_KEY.OEM_WSCTRL;
pub const VK_OEM_CUSEL = VIRTUAL_KEY.OEM_CUSEL;
pub const VK_OEM_ATTN = VIRTUAL_KEY.OEM_ATTN;
pub const VK_OEM_FINISH = VIRTUAL_KEY.OEM_FINISH;
pub const VK_OEM_COPY = VIRTUAL_KEY.OEM_COPY;
pub const VK_OEM_AUTO = VIRTUAL_KEY.OEM_AUTO;
pub const VK_OEM_ENLW = VIRTUAL_KEY.OEM_ENLW;
pub const VK_OEM_BACKTAB = VIRTUAL_KEY.OEM_BACKTAB;
pub const VK_ATTN = VIRTUAL_KEY.ATTN;
pub const VK_CRSEL = VIRTUAL_KEY.CRSEL;
pub const VK_EXSEL = VIRTUAL_KEY.EXSEL;
pub const VK_EREOF = VIRTUAL_KEY.EREOF;
pub const VK_PLAY = VIRTUAL_KEY.PLAY;
pub const VK_ZOOM = VIRTUAL_KEY.ZOOM;
pub const VK_NONAME = VIRTUAL_KEY.NONAME;
pub const VK_PA1 = VIRTUAL_KEY.PA1;
pub const VK_OEM_CLEAR = VIRTUAL_KEY.OEM_CLEAR;
// ---------------------------
// Keyboard and mouse
// ---------------------------
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn GetFocus() callconv(@import("std").os.windows.WINAPI) ?HWND;
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn GetKBCodePage() callconv(@import("std").os.windows.WINAPI) u32;
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn GetKeyState(
nVirtKey: i32,
) callconv(@import("std").os.windows.WINAPI) i16;
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn GetAsyncKeyState(
vKey: i32,
) callconv(@import("std").os.windows.WINAPI) i16;
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn GetKeyboardState(
lpKeyState: *[256]u8,
) callconv(@import("std").os.windows.WINAPI) BOOL;
pub extern "user32" fn GetCapture() callconv(@import("std").os.windows.WINAPI) ?HWND;
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn SetCapture(
hWnd: ?HWND,
) callconv(@import("std").os.windows.WINAPI) ?HWND;
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn ReleaseCapture() callconv(@import("std").os.windows.WINAPI) BOOL;
// --------------------------
// GDI
// --------------------------
pub const MONITORENUMPROC = *const fn (
param0: ?HMONITOR,
param1: ?HDC,
param2: ?*RECT,
param3: LPARAM,
) callconv(@import("std").os.windows.WINAPI) BOOL;
pub const MONITORINFO = extern struct {
cbSize: u32,
rcMonitor: RECT,
rcWork: RECT,
dwFlags: u32,
};
pub const MONITOR_FROM_FLAGS = enum(u32) {
NEAREST = 2,
NULL = 0,
PRIMARY = 1,
};
pub const MONITOR_DEFAULTTONEAREST = MONITOR_FROM_FLAGS.NEAREST;
pub const MONITOR_DEFAULTTONULL = MONITOR_FROM_FLAGS.NULL;
pub const MONITOR_DEFAULTTOPRIMARY = MONITOR_FROM_FLAGS.PRIMARY;
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn MonitorFromPoint(
pt: POINT,
dwFlags: MONITOR_FROM_FLAGS,
) callconv(@import("std").os.windows.WINAPI) ?HMONITOR;
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn MonitorFromRect(
lprc: ?*RECT,
dwFlags: MONITOR_FROM_FLAGS,
) callconv(@import("std").os.windows.WINAPI) ?HMONITOR;
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn MonitorFromWindow(
hwnd: ?HWND,
dwFlags: MONITOR_FROM_FLAGS,
) callconv(@import("std").os.windows.WINAPI) ?HMONITOR;
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn GetMonitorInfoA(
hMonitor: ?HMONITOR,
lpmi: ?*MONITORINFO,
) callconv(@import("std").os.windows.WINAPI) BOOL;
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn GetMonitorInfoW(
hMonitor: ?HMONITOR,
lpmi: ?*MONITORINFO,
) callconv(@import("std").os.windows.WINAPI) BOOL;
// TODO: this type is limited to platform 'windows5.0'
pub extern "user32" fn EnumDisplayMonitors(
hdc: ?HDC,
lprcClip: ?*RECT,
lpfnEnum: ?MONITORENUMPROC,
dwData: LPARAM,
) callconv(@import("std").os.windows.WINAPI) BOOL;
pub const PROPERTYKEY = extern struct {
fmtid: Guid,
pid: u32,
};
pub const DECIMAL = extern struct {
wReserved: u16,
anon1: extern union {
anon: extern struct {
scale: u8,
sign: u8,
},
signscale: u16,
},
Hi32: u32,
anon2: extern union {
anon: extern struct {
Lo32: u32,
Mid32: u32,
},
Lo64: u64,
},
};
pub const LARGE_INTEGER = extern union {
anon: extern struct {
LowPart: u32,
HighPart: i32,
},
u: extern struct {
LowPart: u32,
HighPart: i32,
},
QuadPart: i64,
};
pub const ULARGE_INTEGER = extern union {
anon: extern struct {
LowPart: u32,
HighPart: u32,
},
u: extern struct {
LowPart: u32,
HighPart: u32,
},
QuadPart: u64,
};
pub const BSTR = *u16;
pub const PSTR = [*:0]u8;
pub const S_OK = 0;
pub const S_FALSE = 1;
pub const E_NOTIMPL = -2147467263;
pub const E_NOT_FOUND = -2147023728;
pub const E_OUTOFMEMORY = -2147024882;
pub const E_INVALIDARG = -2147024809;
pub const E_FAIL = -2147467259;
pub const E_UNEXPECTED = -2147418113;
pub const E_NOINTERFACE = -2147467262;
pub const E_POINTER = -2147467261;
pub const E_HANDLE = -2147024890;
pub const E_ABORT = -2147467260;
pub const E_ACCESSDENIED = -2147024891;
pub const E_BOUNDS = -2147483637;
pub const E_CHANGED_STATE = -2147483636;
pub const E_ILLEGAL_STATE_CHANGE = -2147483635;
pub const E_ILLEGAL_METHOD_CALL = -2147483634;
pub const CLASS_E_NOAGGREGATION = -2147221232;
pub const CLASS_E_CLASSNOTAVAILABLE = -2147221231;
pub const CLASS_E_NOTLICENSED = -2147221230;
pub const REGDB_E_CLASSNOTREG = -2147221164;
pub const RPC_E_CHANGED_MODE = -2147417850;
pub const SAFEARRAYBOUND = extern struct {
cElements: u32,
lLbound: i32,
};
pub const SAFEARRAY = extern struct {
cDims: u16,
fFeatures: u16,
cbElements: u32,
cLocks: u32,
pvData: ?*anyopaque,
rgsabound: [1]SAFEARRAYBOUND,
};
pub const CLIPDATA = extern struct {
cbSize: u32,
ulClipFmt: i32,
pClipData: ?*u8,
};
pub const VERSIONEDSTREAM = extern struct {
guidVersion: Guid,
pStream: ?*IStream,
};
pub const STREAM_SEEK = enum(u32) {
SET = 0,
CUR = 1,
END = 2,
};
pub const STATSTG = extern struct {
pwcsName: ?PWSTR,
type: u32,
cbSize: ULARGE_INTEGER,
mtime: FILETIME,
ctime: FILETIME,
atime: FILETIME,
grfMode: u32,
grfLocksSupported: u32,
clsid: Guid,
grfStateBits: u32,
reserved: u32,
};
pub const IStream = extern struct {
pub const VTable = extern struct {
base: ISequentialStream.VTable,
Seek: *const fn (
self: *const IStream,
dlibMove: LARGE_INTEGER,
dwOrigin: STREAM_SEEK,
plibNewPosition: ?*ULARGE_INTEGER,
) callconv(WINAPI) HRESULT,
SetSize: *const fn (
self: *const IStream,
libNewSize: ULARGE_INTEGER,
) callconv(WINAPI) HRESULT,
CopyTo: *const fn (
self: *const IStream,
pstm: ?*IStream,
cb: ULARGE_INTEGER,
pcbRead: ?*ULARGE_INTEGER,
pcbWritten: ?*ULARGE_INTEGER,
) callconv(WINAPI) HRESULT,
Commit: *const fn (
self: *const IStream,
grfCommitFlags: u32,
) callconv(WINAPI) HRESULT,
Revert: *const fn (
self: *const IStream,
) callconv(WINAPI) HRESULT,
LockRegion: *const fn (
self: *const IStream,
libOffset: ULARGE_INTEGER,
cb: ULARGE_INTEGER,
dwLockType: u32,
) callconv(WINAPI) HRESULT,
UnlockRegion: *const fn (
self: *const IStream,
libOffset: ULARGE_INTEGER,
cb: ULARGE_INTEGER,
dwLockType: u32,
) callconv(WINAPI) HRESULT,
Stat: *const fn (
self: *const IStream,
pstatstg: ?*STATSTG,
grfStatFlag: u32,
) callconv(WINAPI) HRESULT,
Clone: *const fn (
self: *const IStream,
ppstm: ?*?*IStream,
) callconv(WINAPI) HRESULT,
};
vtable: *const VTable,
};
pub const COINIT = u32;
pub const COINIT_MULTITHREADED = 0x0;
pub const COINIT_APARTMENTTHREADED = 0x2;
pub const COINIT_DISABLE_OLE1DDE = 0x4;
pub const COINIT_SPEED_OVER_MEMORY = 0x8;
pub const CLSCTX = u32;
pub const CLSCTX_ALL = 23;
pub extern "ole32" fn CoInitializeEx(
pvReserved: ?*anyopaque,
dwCoInit: COINIT,
) callconv(WINAPI) HRESULT;
pub extern "ole32" fn CoCreateInstance(
rclsid: ?*const Guid,
pUnkOuter: ?*IUnknown,
dwClsContext: CLSCTX,
riid: *const Guid,
ppv: ?*?*anyopaque,
) callconv(WINAPI) HRESULT;
pub extern "kernel32" fn CreateEventA(
lpEventAttributes: ?*SECURITY_ATTRIBUTES,
bManualReset: BOOL,
bInitialState: BOOL,
lpName: ?[*:0]const u8,
) callconv(WINAPI) ?*anyopaque;
pub extern "kernel32" fn WaitForSingleObject(
hHandle: ?*anyopaque,
dwMilliseconds: u32,
) callconv(WINAPI) u32;
pub extern "kernel32" fn GetModuleHandleA(
lpModuleName: ?[*:0]const u8,
) callconv(WINAPI) ?*anyopaque;
pub extern "kernel32" fn GetProcAddress(
hModule: ?*anyopaque,
lpProcName: ?[*:0]const u8,
) callconv(WINAPI) ?*const fn () callconv(WINAPI) isize;
pub const INFINITE = 4294967295;
pub const SECURITY_ATTRIBUTES = extern struct {
nLength: u32,
lpSecurityDescriptor: ?*anyopaque,
bInheritHandle: BOOL,
};
pub const ISequentialStream = extern struct {
pub const VTable = extern struct {
base: IUnknown.VTable,
Read: *const fn (
self: *const ISequentialStream,
pv: ?*anyopaque,
cb: u32,
pcbRead: ?*u32,
) callconv(WINAPI) HRESULT,
Write: *const fn (
self: *const ISequentialStream,
pv: ?*const anyopaque,
cb: u32,
pcbWritten: ?*u32,
) callconv(WINAPI) HRESULT,
};
vtable: *const VTable,
};
pub const CY = extern union {
anon: extern struct {
Lo: u32,
Hi: i32,
},
int64: i64,
};
pub const CAC = extern struct {
cElems: u32,
pElems: ?PSTR,
};
pub const CAUB = extern struct {
cElems: u32,
pElems: ?*u8,
};
pub const CAI = extern struct {
cElems: u32,
pElems: ?*i16,
};
pub const CAUI = extern struct {
cElems: u32,
pElems: ?*u16,
};
pub const CAL = extern struct {
cElems: u32,
pElems: ?*i32,
};
pub const CAUL = extern struct {
cElems: u32,
pElems: ?*u32,
};
pub const CAFLT = extern struct {
cElems: u32,
pElems: ?*f32,
};
pub const CADBL = extern struct {
cElems: u32,
pElems: ?*f64,
};
pub const CACY = extern struct {
cElems: u32,
pElems: ?*CY,
};
pub const CADATE = extern struct {
cElems: u32,
pElems: ?*f64,
};
pub const CABSTR = extern struct {
cElems: u32,
pElems: ?*?BSTR,
};
pub const BSTRBLOB = extern struct {
cbSize: u32,
pData: ?*u8,
};
pub const CABSTRBLOB = extern struct {
cElems: u32,
pElems: ?*BSTRBLOB,
};
pub const CABOOL = extern struct {
cElems: u32,
pElems: ?*i16,
};
pub const CASCODE = extern struct {
cElems: u32,
pElems: ?*i32,
};
pub const CAPROPVARIANT = extern struct {
cElems: u32,
pElems: ?*PROPVARIANT,
};
pub const CAH = extern struct {
cElems: u32,
pElems: ?*LARGE_INTEGER,
};
pub const CAUH = extern struct {
cElems: u32,
pElems: ?*ULARGE_INTEGER,
};
pub const CALPSTR = extern struct {
cElems: u32,
pElems: ?*?PSTR,
};
pub const CALPWSTR = extern struct {
cElems: u32,
pElems: ?*?PWSTR,
};
pub const CAFILETIME = extern struct {
cElems: u32,
pElems: ?*FILETIME,
};
pub const CACLIPDATA = extern struct {
cElems: u32,
pElems: ?*CLIPDATA,
};
pub const CACLSID = extern struct {
cElems: u32,
pElems: ?*Guid,
};
pub const BLOB = extern struct {
cbSize: u32,
pBlobData: ?*u8,
};
pub const INVOKEKIND = enum(i32) {
FUNC = 1,
PROPERTYGET = 2,
PROPERTYPUT = 4,
PROPERTYPUTREF = 8,
};
pub const IDLDESC = extern struct {
dwReserved: usize,
wIDLFlags: u16,
};
pub const VARIANT = extern struct {
anon: extern union {
anon: extern struct {
vt: u16,
wReserved1: u16,
wReserved2: u16,
wReserved3: u16,
anon: extern union {
llVal: i64,
lVal: i32,
bVal: u8,
iVal: i16,
fltVal: f32,
dblVal: f64,
boolVal: i16,
__OBSOLETE__VARIANT_BOOL: i16,
scode: i32,
cyVal: CY,
date: f64,
bstrVal: ?BSTR,
punkVal: ?*IUnknown,
pdispVal: ?*IDispatch,
parray: ?*SAFEARRAY,
pbVal: ?*u8,
piVal: ?*i16,
plVal: ?*i32,
pllVal: ?*i64,
pfltVal: ?*f32,
pdblVal: ?*f64,
pboolVal: ?*i16,
__OBSOLETE__VARIANT_PBOOL: ?*i16,
pscode: ?*i32,
pcyVal: ?*CY,
pdate: ?*f64,
pbstrVal: ?*?BSTR,
ppunkVal: ?*?*IUnknown,
ppdispVal: ?*?*IDispatch,
pparray: ?*?*SAFEARRAY,
pvarVal: ?*VARIANT,
byref: ?*anyopaque,
cVal: CHAR,
uiVal: u16,
ulVal: u32,
ullVal: u64,
intVal: i32,
uintVal: u32,
pdecVal: ?*DECIMAL,
pcVal: ?PSTR,
puiVal: ?*u16,
pulVal: ?*u32,
pullVal: ?*u64,
pintVal: ?*i32,
puintVal: ?*u32,
anon: extern struct {
pvRecord: ?*anyopaque,
pRecInfo: ?*IRecordInfo,
},
},
},
decVal: DECIMAL,
},
};
pub const IRecordInfo = extern struct {
pub const VTable = extern struct {
base: IUnknown.VTable,
RecordInit: *const fn (
self: *const IRecordInfo,
pvNew: ?*anyopaque,
) callconv(WINAPI) HRESULT,
RecordClear: *const fn (
self: *const IRecordInfo,
pvExisting: ?*anyopaque,
) callconv(WINAPI) HRESULT,
RecordCopy: *const fn (
self: *const IRecordInfo,
pvExisting: ?*anyopaque,
pvNew: ?*anyopaque,
) callconv(WINAPI) HRESULT,
GetGuid: *const fn (
self: *const IRecordInfo,
pguid: ?*Guid,
) callconv(WINAPI) HRESULT,
GetName: *const fn (
self: *const IRecordInfo,
pbstrName: ?*?BSTR,
) callconv(WINAPI) HRESULT,
GetSize: *const fn (
self: *const IRecordInfo,
pcbSize: ?*u32,
) callconv(WINAPI) HRESULT,
GetTypeInfo: *const fn (
self: *const IRecordInfo,
ppTypeInfo: ?*?*ITypeInfo,
) callconv(WINAPI) HRESULT,
GetField: *const fn (
self: *const IRecordInfo,
pvData: ?*anyopaque,
szFieldName: ?[*:0]const u16,
pvarField: ?*VARIANT,
) callconv(WINAPI) HRESULT,
GetFieldNoCopy: *const fn (
self: *const IRecordInfo,
pvData: ?*anyopaque,
szFieldName: ?[*:0]const u16,
pvarField: ?*VARIANT,
ppvDataCArray: ?*?*anyopaque,
) callconv(WINAPI) HRESULT,
PutField: *const fn (
self: *const IRecordInfo,
wFlags: u32,
pvData: ?*anyopaque,
szFieldName: ?[*:0]const u16,
pvarField: ?*VARIANT,
) callconv(WINAPI) HRESULT,
PutFieldNoCopy: *const fn (
self: *const IRecordInfo,
wFlags: u32,
pvData: ?*anyopaque,
szFieldName: ?[*:0]const u16,
pvarField: ?*VARIANT,
) callconv(WINAPI) HRESULT,
GetFieldNames: *const fn (
self: *const IRecordInfo,
pcNames: ?*u32,
rgBstrNames: [*]?BSTR,
) callconv(WINAPI) HRESULT,
IsMatchingType: *const fn (
self: *const IRecordInfo,
pRecordInfo: ?*IRecordInfo,
) callconv(WINAPI) BOOL,
RecordCreate: *const fn (
self: *const IRecordInfo,
) callconv(WINAPI) ?*anyopaque,
RecordCreateCopy: *const fn (
self: *const IRecordInfo,
pvSource: ?*anyopaque,
ppvDest: ?*?*anyopaque,
) callconv(WINAPI) HRESULT,
RecordDestroy: *const fn (
self: *const IRecordInfo,
pvRecord: ?*anyopaque,
) callconv(WINAPI) HRESULT,
};
vtable: *const VTable,
};
pub const PARAMDESCEX = extern struct {
cBytes: u32,
varDefaultValue: VARIANT,
};
pub const PARAMDESC = extern struct {
pparamdescex: ?*PARAMDESCEX,
wParamFlags: u16,
};
pub const ARRAYDESC = extern struct {
tdescElem: TYPEDESC,
cDims: u16,
rgbounds: [1]SAFEARRAYBOUND,
};
pub const TYPEDESC = extern struct {
anon: extern union {
lptdesc: ?*TYPEDESC,
lpadesc: ?*ARRAYDESC,
hreftype: u32,
},
vt: u16,
};
pub const ELEMDESC = extern struct {
tdesc: TYPEDESC,
anon: extern union {
idldesc: IDLDESC,
paramdesc: PARAMDESC,
},
};
pub const CALLCONV = enum(i32) {
FASTCALL = 0,
CDECL = 1,
MSCPASCAL = 2,
MACPASCAL = 3,
STDCALL = 4,
FPFASTCALL = 5,
SYSCALL = 6,
MPWCDECL = 7,
MPWPASCAL = 8,
MAX = 9,
};
pub const FUNCKIND = enum(i32) {
VIRTUAL = 0,
PUREVIRTUAL = 1,
NONVIRTUAL = 2,
STATIC = 3,
DISPATCH = 4,
};
pub const FUNCDESC = extern struct {
memid: i32,
lprgscode: ?*i32,
lprgelemdescParam: ?*ELEMDESC,
funckind: FUNCKIND,
invkind: INVOKEKIND,
@"callconv": CALLCONV,
cParams: i16,
cParamsOpt: i16,
oVft: i16,
cScodes: i16,
elemdescFunc: ELEMDESC,
wFuncFlags: u16,
};
pub const TYPEATTR = extern struct {
guid: Guid,
lcid: u32,
dwReserved: u32,
memidConstructor: i32,
memidDestructor: i32,
lpstrSchema: ?PWSTR,
cbSizeInstance: u32,
typekind: TYPEKIND,
cFuncs: u16,
cVars: u16,
cImplTypes: u16,
cbSizeVft: u16,
cbAlignment: u16,
wTypeFlags: u16,
wMajorVerNum: u16,
wMinorVerNum: u16,
tdescAlias: TYPEDESC,
idldescType: IDLDESC,
};
pub const TYPEKIND = enum(i32) {
ENUM = 0,
RECORD = 1,
MODULE = 2,
INTERFACE = 3,
DISPATCH = 4,
COCLASS = 5,
ALIAS = 6,
UNION = 7,
MAX = 8,
};
pub const DESCKIND = enum(i32) {
NONE = 0,
FUNCDESC = 1,
VARDESC = 2,
TYPECOMP = 3,
IMPLICITAPPOBJ = 4,
MAX = 5,
};
pub const BINDPTR = extern union {
lpfuncdesc: ?*FUNCDESC,
lpvardesc: ?*VARDESC,
lptcomp: ?*ITypeComp,
};
pub const VARDESC = extern struct {
memid: i32,
lpstrSchema: ?PWSTR,
anon: extern union {
oInst: u32,
lpvarValue: ?*VARIANT,
},
elemdescVar: ELEMDESC,
wVarFlags: u16,
varkind: VARKIND,
};
pub const VARKIND = enum(i32) {
PERINSTANCE = 0,
STATIC = 1,
CONST = 2,
DISPATCH = 3,
};
pub const ITypeComp = extern struct {
pub const VTable = extern struct {
base: IUnknown.VTable,
Bind: *const fn (
self: *const ITypeComp,
szName: ?PWSTR,
lHashVal: u32,
wFlags: u16,
ppTInfo: ?*?*ITypeInfo,
pDescKind: ?*DESCKIND,
pBindPtr: ?*BINDPTR,
) callconv(WINAPI) HRESULT,
BindType: *const fn (
self: *const ITypeComp,
szName: ?PWSTR,
lHashVal: u32,
ppTInfo: ?*?*ITypeInfo,
ppTComp: ?*?*ITypeComp,
) callconv(WINAPI) HRESULT,
};
vtable: *const VTable,
};
pub const DISPPARAMS = extern struct {
rgvarg: ?*VARIANT,
rgdispidNamedArgs: ?*i32,
cArgs: u32,
cNamedArgs: u32,
};
pub const EXCEPINFO = extern struct {
wCode: u16,
wReserved: u16,
bstrSource: ?BSTR,
bstrDescription: ?BSTR,
bstrHelpFile: ?BSTR,
dwHelpContext: u32,
pvReserved: ?*anyopaque,
pfnDeferredFillIn: ?LPEXCEPFINO_DEFERRED_FILLIN,
scode: i32,
};
pub const LPEXCEPFINO_DEFERRED_FILLIN = *const fn (
pExcepInfo: ?*EXCEPINFO,
) callconv(WINAPI) HRESULT;
pub const ITypeInfo = extern struct {
pub const VTable = extern struct {
base: IUnknown.VTable,
GetTypeAttr: *const fn (
self: *const ITypeInfo,
ppTypeAttr: ?*?*TYPEATTR,
) callconv(WINAPI) HRESULT,
GetTypeComp: *const fn (
self: *const ITypeInfo,
ppTComp: ?*?*ITypeComp,
) callconv(WINAPI) HRESULT,
GetFuncDesc: *const fn (
self: *const ITypeInfo,
index: u32,
ppFuncDesc: ?*?*FUNCDESC,
) callconv(WINAPI) HRESULT,
GetVarDesc: *const fn (
self: *const ITypeInfo,
index: u32,
ppVarDesc: ?*?*VARDESC,
) callconv(WINAPI) HRESULT,
GetNames: *const fn (
self: *const ITypeInfo,
memid: i32,
rgBstrNames: [*]?BSTR,
cMaxNames: u32,
pcNames: ?*u32,
) callconv(WINAPI) HRESULT,
GetRefTypeOfImplType: *const fn (
self: *const ITypeInfo,
index: u32,
pRefType: ?*u32,
) callconv(WINAPI) HRESULT,
GetImplTypeFlags: *const fn (
self: *const ITypeInfo,
index: u32,
pImplTypeFlags: ?*i32,
) callconv(WINAPI) HRESULT,
GetIDsOfNames: *const fn (
self: *const ITypeInfo,
rgszNames: [*]?PWSTR,
cNames: u32,
pMemId: [*]i32,
) callconv(WINAPI) HRESULT,
Invoke: *const fn (
self: *const ITypeInfo,
pvInstance: ?*anyopaque,
memid: i32,
wFlags: u16,
pDispParams: ?*DISPPARAMS,
pVarResult: ?*VARIANT,
pExcepInfo: ?*EXCEPINFO,
puArgErr: ?*u32,
) callconv(WINAPI) HRESULT,
GetDocumentation: *const fn (
self: *const ITypeInfo,
memid: i32,
pBstrName: ?*?BSTR,
pBstrDocString: ?*?BSTR,
pdwHelpContext: ?*u32,
pBstrHelpFile: ?*?BSTR,
) callconv(WINAPI) HRESULT,
GetDllEntry: *const fn (
self: *const ITypeInfo,
memid: i32,
invKind: INVOKEKIND,
pBstrDllName: ?*?BSTR,
pBstrName: ?*?BSTR,
pwOrdinal: ?*u16,
) callconv(WINAPI) HRESULT,
GetRefTypeInfo: *const fn (
self: *const ITypeInfo,
hRefType: u32,
ppTInfo: ?*?*ITypeInfo,
) callconv(WINAPI) HRESULT,
AddressOfMember: *const fn (
self: *const ITypeInfo,
memid: i32,
invKind: INVOKEKIND,
ppv: ?*?*anyopaque,
) callconv(WINAPI) HRESULT,
CreateInstance: *const fn (
self: *const ITypeInfo,
pUnkOuter: ?*IUnknown,
riid: ?*const Guid,
ppvObj: ?*?*anyopaque,
) callconv(WINAPI) HRESULT,
GetMops: *const fn (
self: *const ITypeInfo,
memid: i32,
pBstrMops: ?*?BSTR,
) callconv(WINAPI) HRESULT,
GetContainingTypeLib: *const fn (
self: *const ITypeInfo,
ppTLib: ?*?*ITypeLib,
pIndex: ?*u32,
) callconv(WINAPI) HRESULT,
ReleaseTypeAttr: *const fn (
self: *const ITypeInfo,
pTypeAttr: ?*TYPEATTR,
) callconv(WINAPI) void,
ReleaseFuncDesc: *const fn (
self: *const ITypeInfo,
pFuncDesc: ?*FUNCDESC,
) callconv(WINAPI) void,
ReleaseVarDesc: *const fn (
self: *const ITypeInfo,
pVarDesc: ?*VARDESC,
) callconv(WINAPI) void,
};
vtable: *const VTable,
};
pub const SYSKIND = enum(i32) {
WIN16 = 0,
WIN32 = 1,
MAC = 2,
WIN64 = 3,
};
pub const TLIBATTR = extern struct {
guid: Guid,
lcid: u32,
syskind: SYSKIND,
wMajorVerNum: u16,
wMinorVerNum: u16,
wLibFlags: u16,
};
pub const ITypeLib = extern struct {
pub const VTable = extern struct {
base: IUnknown.VTable,
GetTypeInfoCount: *const fn (
self: *const ITypeLib,
) callconv(WINAPI) u32,
GetTypeInfo: *const fn (
self: *const ITypeLib,
index: u32,
ppTInfo: ?*?*ITypeInfo,
) callconv(WINAPI) HRESULT,
GetTypeInfoType: *const fn (
self: *const ITypeLib,
index: u32,
pTKind: ?*TYPEKIND,
) callconv(WINAPI) HRESULT,
GetTypeInfoOfGuid: *const fn (
self: *const ITypeLib,
guid: ?*const Guid,
ppTinfo: ?*?*ITypeInfo,
) callconv(WINAPI) HRESULT,
GetLibAttr: *const fn (
self: *const ITypeLib,
ppTLibAttr: ?*?*TLIBATTR,
) callconv(WINAPI) HRESULT,
GetTypeComp: *const fn (
self: *const ITypeLib,
ppTComp: ?*?*ITypeComp,
) callconv(WINAPI) HRESULT,
GetDocumentation: *const fn (
self: *const ITypeLib,
index: i32,
pBstrName: ?*?BSTR,
pBstrDocString: ?*?BSTR,
pdwHelpContext: ?*u32,
pBstrHelpFile: ?*?BSTR,
) callconv(WINAPI) HRESULT,
IsName: *const fn (
self: *const ITypeLib,
szNameBuf: ?PWSTR,
lHashVal: u32,
pfName: ?*BOOL,
) callconv(WINAPI) HRESULT,
FindName: *const fn (
self: *const ITypeLib,
szNameBuf: ?PWSTR,
lHashVal: u32,
ppTInfo: [*]?*ITypeInfo,
rgMemId: [*]i32,
pcFound: ?*u16,
) callconv(WINAPI) HRESULT,
ReleaseTLibAttr: *const fn (
self: *const ITypeLib,
pTLibAttr: ?*TLIBATTR,
) callconv(WINAPI) void,
};
vtable: *const VTable,
};
pub const IDispatch = extern struct {
pub const VTable = extern struct {
base: IUnknown.VTable,
GetTypeInfoCount: *const fn (
self: *const IDispatch,
pctinfo: ?*u32,
) callconv(WINAPI) HRESULT,
GetTypeInfo: *const fn (
self: *const IDispatch,
iTInfo: u32,
lcid: u32,
ppTInfo: ?*?*ITypeInfo,
) callconv(WINAPI) HRESULT,
GetIDsOfNames: *const fn (
self: *const IDispatch,
riid: ?*const Guid,
rgszNames: [*]?PWSTR,
cNames: u32,
lcid: u32,
rgDispId: [*]i32,
) callconv(WINAPI) HRESULT,
Invoke: *const fn (
self: *const IDispatch,
dispIdMember: i32,
riid: ?*const Guid,
lcid: u32,
wFlags: u16,
pDispParams: ?*DISPPARAMS,
pVarResult: ?*VARIANT,
pExcepInfo: ?*EXCEPINFO,
puArgErr: ?*u32,
) callconv(WINAPI) HRESULT,
};
vtable: *const VTable,
};
pub const IEnumSTATSTG = extern struct {
pub const VTable = extern struct {
base: IUnknown.VTable,
Next: *const fn (
self: *const IEnumSTATSTG,
celt: u32,
rgelt: [*]STATSTG,
pceltFetched: ?*u32,
) callconv(WINAPI) HRESULT,
Skip: *const fn (
self: *const IEnumSTATSTG,
celt: u32,
) callconv(WINAPI) HRESULT,
Reset: *const fn (
self: *const IEnumSTATSTG,
) callconv(WINAPI) HRESULT,
Clone: *const fn (
self: *const IEnumSTATSTG,
ppenum: ?*?*IEnumSTATSTG,
) callconv(WINAPI) HRESULT,
};
vtable: *const VTable,
};
pub const IStorage = extern struct {
pub const VTable = extern struct {
base: IUnknown.VTable,
CreateStream: *const fn (
self: *const IStorage,
pwcsName: ?[*:0]const u16,
grfMode: u32,
reserved1: u32,
reserved2: u32,
ppstm: ?*?*IStream,
) callconv(WINAPI) HRESULT,
OpenStream: *const fn (
self: *const IStorage,
pwcsName: ?[*:0]const u16,
reserved1: ?*anyopaque,
grfMode: u32,
reserved2: u32,
ppstm: ?*?*IStream,
) callconv(WINAPI) HRESULT,
CreateStorage: *const fn (
self: *const IStorage,
pwcsName: ?[*:0]const u16,
grfMode: u32,
reserved1: u32,
reserved2: u32,
ppstg: ?*?*IStorage,
) callconv(WINAPI) HRESULT,
OpenStorage: *const fn (
self: *const IStorage,
pwcsName: ?[*:0]const u16,
pstgPriority: ?*IStorage,
grfMode: u32,
snbExclude: ?*?*u16,
reserved: u32,
ppstg: ?*?*IStorage,
) callconv(WINAPI) HRESULT,
CopyTo: *const fn (
self: *const IStorage,
ciidExclude: u32,
rgiidExclude: ?[*]const Guid,
snbExclude: ?*?*u16,
pstgDest: ?*IStorage,
) callconv(WINAPI) HRESULT,
MoveElementTo: *const fn (
self: *const IStorage,
pwcsName: ?[*:0]const u16,
pstgDest: ?*IStorage,
pwcsNewName: ?[*:0]const u16,
grfFlags: u32,
) callconv(WINAPI) HRESULT,
Commit: *const fn (
self: *const IStorage,
grfCommitFlags: u32,
) callconv(WINAPI) HRESULT,
Revert: *const fn (
self: *const IStorage,
) callconv(WINAPI) HRESULT,
EnumElements: *const fn (
self: *const IStorage,
reserved1: u32,
reserved2: ?*anyopaque,
reserved3: u32,
ppenum: ?*?*IEnumSTATSTG,
) callconv(WINAPI) HRESULT,
DestroyElement: *const fn (
self: *const IStorage,
pwcsName: ?[*:0]const u16,
) callconv(WINAPI) HRESULT,
RenameElement: *const fn (
self: *const IStorage,
pwcsOldName: ?[*:0]const u16,
pwcsNewName: ?[*:0]const u16,
) callconv(WINAPI) HRESULT,
SetElementTimes: *const fn (
self: *const IStorage,
pwcsName: ?[*:0]const u16,
pctime: ?*const FILETIME,
patime: ?*const FILETIME,
pmtime: ?*const FILETIME,
) callconv(WINAPI) HRESULT,
SetClass: *const fn (
self: *const IStorage,
clsid: ?*const Guid,
) callconv(WINAPI) HRESULT,
SetStateBits: *const fn (
self: *const IStorage,
grfStateBits: u32,
grfMask: u32,
) callconv(WINAPI) HRESULT,
Stat: *const fn (
self: *const IStorage,
pstatstg: ?*STATSTG,
grfStatFlag: u32,
) callconv(WINAPI) HRESULT,
};
vtable: *const VTable,
};
pub const PROPVARIANT = extern struct {
anon: extern union {
anon: extern struct {
vt: u16,
wReserved1: u16,
wReserved2: u16,
wReserved3: u16,
anon: extern union {
cVal: CHAR,
bVal: u8,
iVal: i16,
uiVal: u16,
lVal: i32,
ulVal: u32,
intVal: i32,
uintVal: u32,
hVal: LARGE_INTEGER,
uhVal: ULARGE_INTEGER,
fltVal: f32,
dblVal: f64,
boolVal: i16,
__OBSOLETE__VARIANT_BOOL: i16,
scode: i32,
cyVal: CY,
date: f64,
filetime: FILETIME,
puuid: ?*Guid,
pclipdata: ?*CLIPDATA,
bstrVal: ?BSTR,
bstrblobVal: BSTRBLOB,
blob: BLOB,
pszVal: ?PSTR,
pwszVal: ?PWSTR,
punkVal: ?*IUnknown,
pdispVal: ?*IDispatch,
pStream: ?*IStream,
pStorage: ?*IStorage,
pVersionedStream: ?*VERSIONEDSTREAM,
parray: ?*SAFEARRAY,
cac: CAC,
caub: CAUB,
cai: CAI,
caui: CAUI,
cal: CAL,
caul: CAUL,
cah: CAH,
cauh: CAUH,
caflt: CAFLT,
cadbl: CADBL,
cabool: CABOOL,
cascode: CASCODE,
cacy: CACY,
cadate: CADATE,
cafiletime: CAFILETIME,
cauuid: CACLSID,
caclipdata: CACLIPDATA,
cabstr: CABSTR,
cabstrblob: CABSTRBLOB,
calpstr: CALPSTR,
calpwstr: CALPWSTR,
capropvar: CAPROPVARIANT,
pcVal: ?PSTR,
pbVal: ?*u8,
piVal: ?*i16,
puiVal: ?*u16,
plVal: ?*i32,
pulVal: ?*u32,
pintVal: ?*i32,
puintVal: ?*u32,
pfltVal: ?*f32,
pdblVal: ?*f64,
pboolVal: ?*i16,
pdecVal: ?*DECIMAL,
pscode: ?*i32,
pcyVal: ?*CY,
pdate: ?*f64,
pbstrVal: ?*?BSTR,
ppunkVal: ?*?*IUnknown,
ppdispVal: ?*?*IDispatch,
pparray: ?*?*SAFEARRAY,
pvarVal: ?*PROPVARIANT,
},
},
decVal: DECIMAL,
},
};
pub const WAVEFORMATEX = extern struct {
wFormatTag: u16 align(1),
nChannels: u16 align(1),
nSamplesPerSec: u32 align(1),
nAvgBytesPerSec: u32 align(1),
nBlockAlign: u16 align(1),
wBitsPerSample: u16 align(1),
cbSize: u16 align(1),
};
pub const WAVEFORMATEXTENSIBLE = extern struct {
Format: WAVEFORMATEX align(1),
Samples: extern union {
wValidBitsPerSample: u16 align(1),
wSamplesPerBlock: u16 align(1),
wReserved: u16 align(1),
},
dwChannelMask: u32 align(1),
SubFormat: Guid align(1),
};
pub const CLSID_MMDeviceEnumerator = &Guid.initString("bcde0395-e52f-467c-8e3d-c4579291692e");
pub const DIRECTX_AUDIO_ACTIVATION_PARAMS = extern struct {
cbDirectXAudioActivationParams: u32,
guidAudioSession: Guid,
dwAudioStreamFlags: u32,
};
pub const DataFlow = enum(i32) {
render = 0,
capture = 1,
all = 2,
};
pub const Role = enum(i32) {
console = 0,
multimedia = 1,
communications = 2,
};
pub const AUDCLNT_SHAREMODE = enum(i32) {
SHARED = 0,
EXCLUSIVE = 1,
};
pub const IID_IAudioClient = &Guid.initString("1cb9ad4c-dbfa-4c32-b178-c2f568a703b2");
pub const IAudioClient = extern struct {
pub const VTable = extern struct {
base: IUnknown.VTable,
Initialize: *const fn (
self: *const IAudioClient,
ShareMode: AUDCLNT_SHAREMODE,
StreamFlags: u32,
hnsBufferDuration: i64,
hnsPeriodicity: i64,
pFormat: ?*const WAVEFORMATEX,
AudioSessionGuid: ?*const Guid,
) callconv(WINAPI) HRESULT,
GetBufferSize: *const fn (
self: *const IAudioClient,
pNumBufferFrames: ?*u32,
) callconv(WINAPI) HRESULT,
GetStreamLatency: *const fn (
self: *const IAudioClient,
phnsLatency: ?*i64,
) callconv(WINAPI) HRESULT,
GetCurrentPadding: *const fn (
self: *const IAudioClient,
pNumPaddingFrames: ?*u32,
) callconv(WINAPI) HRESULT,
IsFormatSupported: *const fn (
self: *const IAudioClient,
ShareMode: AUDCLNT_SHAREMODE,
pFormat: ?*const WAVEFORMATEX,
ppClosestMatch: ?*?*WAVEFORMATEX,
) callconv(WINAPI) HRESULT,
GetMixFormat: *const fn (
self: *const IAudioClient,
ppDeviceFormat: ?*?*WAVEFORMATEX,
) callconv(WINAPI) HRESULT,
GetDevicePeriod: *const fn (
self: *const IAudioClient,
phnsDefaultDevicePeriod: ?*i64,
phnsMinimumDevicePeriod: ?*i64,
) callconv(WINAPI) HRESULT,
Start: *const fn (
self: *const IAudioClient,
) callconv(WINAPI) HRESULT,
Stop: *const fn (
self: *const IAudioClient,
) callconv(WINAPI) HRESULT,
Reset: *const fn (
self: *const IAudioClient,
) callconv(WINAPI) HRESULT,
SetEventHandle: *const fn (
self: *const IAudioClient,
eventHandle: ?*anyopaque,
) callconv(WINAPI) HRESULT,
GetService: *const fn (
self: *const IAudioClient,
riid: ?*const Guid,
ppv: ?*?*anyopaque,
) callconv(WINAPI) HRESULT,
};
vtable: *const VTable,
pub fn MethodMixin(comptime T: type) type {
return struct {
pub usingnamespace IUnknown.MethodMixin(T);
pub inline fn Initialize(self: *const T, ShareMode: AUDCLNT_SHAREMODE, StreamFlags: u32, hnsBufferDuration: i64, hnsPeriodicity: i64, pFormat: ?*const WAVEFORMATEX, AudioSessionGuid: ?*const Guid) HRESULT {
return @as(*const IAudioClient.VTable, @ptrCast(self.vtable)).Initialize(@as(*const IAudioClient, @ptrCast(self)), ShareMode, StreamFlags, hnsBufferDuration, hnsPeriodicity, pFormat, AudioSessionGuid);
}
pub inline fn GetBufferSize(self: *const T, pNumBufferFrames: ?*u32) HRESULT {
return @as(*const IAudioClient.VTable, @ptrCast(self.vtable)).GetBufferSize(@as(*const IAudioClient, @ptrCast(self)), pNumBufferFrames);
}
pub inline fn GetStreamLatency(self: *const T, phnsLatency: ?*i64) HRESULT {
return @as(*const IAudioClient.VTable, @ptrCast(self.vtable)).GetStreamLatency(@as(*const IAudioClient, @ptrCast(self)), phnsLatency);
}
pub inline fn GetCurrentPadding(self: *const T, pNumPaddingFrames: ?*u32) HRESULT {
return @as(*const IAudioClient.VTable, @ptrCast(self.vtable)).GetCurrentPadding(@as(*const IAudioClient, @ptrCast(self)), pNumPaddingFrames);
}
pub inline fn IsFormatSupported(self: *const T, ShareMode: AUDCLNT_SHAREMODE, pFormat: ?*const WAVEFORMATEX, ppClosestMatch: ?*?*WAVEFORMATEX) HRESULT {
return @as(*const IAudioClient.VTable, @ptrCast(self.vtable)).IsFormatSupported(@as(*const IAudioClient, @ptrCast(self)), ShareMode, pFormat, ppClosestMatch);
}
pub inline fn GetMixFormat(self: *const T, ppDeviceFormat: ?*?*WAVEFORMATEX) HRESULT {
return @as(*const IAudioClient.VTable, @ptrCast(self.vtable)).GetMixFormat(@as(*const IAudioClient, @ptrCast(self)), ppDeviceFormat);
}
pub inline fn GetDevicePeriod(self: *const T, phnsDefaultDevicePeriod: ?*i64, phnsMinimumDevicePeriod: ?*i64) HRESULT {
return @as(*const IAudioClient.VTable, @ptrCast(self.vtable)).GetDevicePeriod(@as(*const IAudioClient, @ptrCast(self)), phnsDefaultDevicePeriod, phnsMinimumDevicePeriod);
}
pub inline fn Start(self: *const T) HRESULT {
return @as(*const IAudioClient.VTable, @ptrCast(self.vtable)).Start(@as(*const IAudioClient, @ptrCast(self)));
}
pub inline fn Stop(self: *const T) HRESULT {
return @as(*const IAudioClient.VTable, @ptrCast(self.vtable)).Stop(@as(*const IAudioClient, @ptrCast(self)));
}
pub inline fn Reset(self: *const T) HRESULT {
return @as(*const IAudioClient.VTable, @ptrCast(self.vtable)).Reset(@as(*const IAudioClient, @ptrCast(self)));
}
pub inline fn SetEventHandle(self: *const T, eventHandle: ?*anyopaque) HRESULT {
return @as(*const IAudioClient.VTable, @ptrCast(self.vtable)).SetEventHandle(@as(*const IAudioClient, @ptrCast(self)), eventHandle);
}
pub inline fn GetService(self: *const T, riid: ?*const Guid, ppv: ?*?*anyopaque) HRESULT {
return @as(*const IAudioClient.VTable, @ptrCast(self.vtable)).GetService(@as(*const IAudioClient, @ptrCast(self)), riid, ppv);
}
};
}
pub usingnamespace MethodMixin(@This());
};
pub const AUDCLNT_STREAMOPTIONS = enum(u32) {
NONE = 0,
RAW = 1,
MATCH_FORMAT = 2,
AMBISONICS = 4,
};
pub const AudioClientProperties = extern struct {
cbSize: u32,
bIsOffload: BOOL,
eCategory: AUDIO_STREAM_CATEGORY,
Options: AUDCLNT_STREAMOPTIONS,
};
pub const AUDIO_STREAM_CATEGORY = enum(i32) {
Other = 0,
ForegroundOnlyMedia = 1,
Communications = 3,
Alerts = 4,
SoundEffects = 5,
GameEffects = 6,
GameMedia = 7,
GameChat = 8,
Speech = 9,
Movie = 10,
Media = 11,
FarFieldSpeech = 12,
UniformSpeech = 13,
VoiceTyping = 14,
};
const IID_IAudioClient2 = &Guid.initString("726778cd-f60a-4eda-82de-e47610cd78aa");
pub const IAudioClient2 = extern struct {
pub const VTable = extern struct {
base: IAudioClient.VTable,
IsOffloadCapable: *const fn (
self: *const IAudioClient2,
Category: AUDIO_STREAM_CATEGORY,
pbOffloadCapable: ?*BOOL,
) callconv(WINAPI) HRESULT,
SetClientProperties: *const fn (
self: *const IAudioClient2,
pProperties: ?*const AudioClientProperties,
) callconv(WINAPI) HRESULT,
GetBufferSizeLimits: *const fn (
self: *const IAudioClient2,
pFormat: ?*const WAVEFORMATEX,
bEventDriven: BOOL,
phnsMinBufferDuration: ?*i64,
phnsMaxBufferDuration: ?*i64,
) callconv(WINAPI) HRESULT,
};
vtable: *const VTable,
pub fn MethodMixin(comptime T: type) type {
return struct {
pub usingnamespace IAudioClient.MethodMixin(T);
pub inline fn IsOffloadCapable(self: *const T, Category: AUDIO_STREAM_CATEGORY, pbOffloadCapable: ?*BOOL) HRESULT {
return @as(*const IAudioClient2.VTable, @ptrCast(self.vtable)).IsOffloadCapable(@as(*const IAudioClient2, @ptrCast(self)), Category, pbOffloadCapable);
}
pub inline fn SetClientProperties(self: *const T, pProperties: ?*const AudioClientProperties) HRESULT {
return @as(*const IAudioClient2.VTable, @ptrCast(self.vtable)).SetClientProperties(@as(*const IAudioClient2, @ptrCast(self)), pProperties);
}
pub inline fn GetBufferSizeLimits(self: *const T, pFormat: ?*const WAVEFORMATEX, bEventDriven: BOOL, phnsMinBufferDuration: ?*i64, phnsMaxBufferDuration: ?*i64) HRESULT {
return @as(*const IAudioClient2.VTable, @ptrCast(self.vtable)).GetBufferSizeLimits(@as(*const IAudioClient2, @ptrCast(self)), pFormat, bEventDriven, phnsMinBufferDuration, phnsMaxBufferDuration);
}
};
}
pub usingnamespace MethodMixin(@This());
};
pub const IID_IAudioClient3 = &Guid.initString("7ed4ee07-8e67-4cd4-8c1a-2b7a5987ad42");
pub const IAudioClient3 = extern struct {
pub const VTable = extern struct {
base: IAudioClient2.VTable,
GetSharedModeEnginePeriod: *const fn (
self: *const IAudioClient3,
pFormat: ?*const WAVEFORMATEX,
pDefaultPeriodInFrames: ?*u32,
pFundamentalPeriodInFrames: ?*u32,
pMinPeriodInFrames: ?*u32,
pMaxPeriodInFrames: ?*u32,
) callconv(WINAPI) HRESULT,
GetCurrentSharedModeEnginePeriod: *const fn (
self: *const IAudioClient3,
ppFormat: ?*?*WAVEFORMATEX,
pCurrentPeriodInFrames: ?*u32,
) callconv(WINAPI) HRESULT,
InitializeSharedAudioStream: *const fn (
self: *const IAudioClient3,
StreamFlags: u32,
PeriodInFrames: u32,
pFormat: ?*const WAVEFORMATEX,
AudioSessionGuid: ?*const Guid,
) callconv(WINAPI) HRESULT,
};
vtable: *const VTable,
pub fn MethodMixin(comptime T: type) type {
return struct {
pub usingnamespace IAudioClient2.MethodMixin(T);
pub inline fn GetSharedModeEnginePeriod(self: *const T, pFormat: ?*const WAVEFORMATEX, pDefaultPeriodInFrames: ?*u32, pFundamentalPeriodInFrames: ?*u32, pMinPeriodInFrames: ?*u32, pMaxPeriodInFrames: ?*u32) HRESULT {
return @as(*const IAudioClient3.VTable, @ptrCast(self.vtable)).GetSharedModeEnginePeriod(@as(*const IAudioClient3, @ptrCast(self)), pFormat, pDefaultPeriodInFrames, pFundamentalPeriodInFrames, pMinPeriodInFrames, pMaxPeriodInFrames);
}
pub inline fn GetCurrentSharedModeEnginePeriod(self: *const T, ppFormat: ?*?*WAVEFORMATEX, pCurrentPeriodInFrames: ?*u32) HRESULT {
return @as(*const IAudioClient3.VTable, @ptrCast(self.vtable)).GetCurrentSharedModeEnginePeriod(@as(*const IAudioClient3, @ptrCast(self)), ppFormat, pCurrentPeriodInFrames);
}
pub inline fn InitializeSharedAudioStream(self: *const T, StreamFlags: u32, PeriodInFrames: u32, pFormat: ?*const WAVEFORMATEX, AudioSessionGuid: ?*const Guid) HRESULT {
return @as(*const IAudioClient3.VTable, @ptrCast(self.vtable)).InitializeSharedAudioStream(@as(*const IAudioClient3, @ptrCast(self)), StreamFlags, PeriodInFrames, pFormat, AudioSessionGuid);
}
};
}
pub usingnamespace MethodMixin(@This());
};
pub extern "ole32" fn CoTaskMemFree(pv: ?*anyopaque) callconv(WINAPI) void;
pub const IID_IAudioRenderClient = &Guid.initString("f294acfc-3146-4483-a7bf-addca7c260e2");
pub const IAudioRenderClient = extern struct {
pub const VTable = extern struct {
base: IUnknown.VTable,
GetBuffer: *const fn (
self: *const IAudioRenderClient,
NumFramesRequested: u32,
ppData: ?*?*u8,
) callconv(WINAPI) HRESULT,
ReleaseBuffer: *const fn (
self: *const IAudioRenderClient,
NumFramesWritten: u32,
dwFlags: u32,
) callconv(WINAPI) HRESULT,
};
vtable: *const VTable,
pub fn MethodMixin(comptime T: type) type {
return struct {
pub usingnamespace IUnknown.MethodMixin(T);
pub inline fn GetBuffer(self: *const T, NumFramesRequested: u32, ppData: ?*?*u8) HRESULT {
return @as(*const IAudioRenderClient.VTable, @ptrCast(self.vtable)).GetBuffer(@as(*const IAudioRenderClient, @ptrCast(self)), NumFramesRequested, ppData);
}
pub inline fn ReleaseBuffer(self: *const T, NumFramesWritten: u32, dwFlags: u32) HRESULT {
return @as(*const IAudioRenderClient.VTable, @ptrCast(self.vtable)).ReleaseBuffer(@as(*const IAudioRenderClient, @ptrCast(self)), NumFramesWritten, dwFlags);
}
};
}
pub usingnamespace MethodMixin(@This());
};
pub const IID_IAudioCaptureClient = &Guid.initString("c8adbd64-e71e-48a0-a4de-185c395cd317");
pub const IAudioCaptureClient = extern struct {
pub const VTable = extern struct {
base: IUnknown.VTable,
GetBuffer: *const fn (
self: *const IAudioCaptureClient,
ppData: ?*?*u8,
pNumFramesToRead: ?*u32,
pdwFlags: ?*u32,
pu64DevicePosition: ?*u64,
pu64QPCPosition: ?*u64,
) callconv(WINAPI) HRESULT,
ReleaseBuffer: *const fn (
self: *const IAudioCaptureClient,
NumFramesRead: u32,
) callconv(WINAPI) HRESULT,
GetNextPacketSize: *const fn (
self: *const IAudioCaptureClient,
pNumFramesInNextPacket: ?*u32,
) callconv(WINAPI) HRESULT,
};
vtable: *const VTable,
pub fn MethodMixin(comptime T: type) type {
return struct {
pub usingnamespace IUnknown.MethodMixin(T);
pub inline fn GetBuffer(self: *const T, ppData: ?*?*u8, pNumFramesToRead: ?*u32, pdwFlags: ?*u32, pu64DevicePosition: ?*u64, pu64QPCPosition: ?*u64) HRESULT {
return @as(*const IAudioCaptureClient.VTable, @ptrCast(self.vtable)).GetBuffer(@as(*const IAudioCaptureClient, @ptrCast(self)), ppData, pNumFramesToRead, pdwFlags, pu64DevicePosition, pu64QPCPosition);
}
pub inline fn ReleaseBuffer(self: *const T, NumFramesRead: u32) HRESULT {
return @as(*const IAudioCaptureClient.VTable, @ptrCast(self.vtable)).ReleaseBuffer(@as(*const IAudioCaptureClient, @ptrCast(self)), NumFramesRead);
}
pub inline fn GetNextPacketSize(self: *const T, pNumFramesInNextPacket: ?*u32) HRESULT {
return @as(*const IAudioCaptureClient.VTable, @ptrCast(self.vtable)).GetNextPacketSize(@as(*const IAudioCaptureClient, @ptrCast(self)), pNumFramesInNextPacket);
}
};
}
pub usingnamespace MethodMixin(@This());
};
pub const IID_ISimpleAudioVolume = &Guid.initString("87ce5498-68d6-44e5-9215-6da47ef883d8");
pub const ISimpleAudioVolume = extern struct {
pub const VTable = extern struct {
base: IUnknown.VTable,
SetMasterVolume: *const fn (
self: *const ISimpleAudioVolume,
fLevel: f32,
EventContext: ?*const Guid,
) callconv(WINAPI) HRESULT,
GetMasterVolume: *const fn (
self: *const ISimpleAudioVolume,
pfLevel: ?*f32,
) callconv(WINAPI) HRESULT,
SetMute: *const fn (
self: *const ISimpleAudioVolume,
bMute: BOOL,
EventContext: ?*const Guid,
) callconv(WINAPI) HRESULT,
GetMute: *const fn (
self: *const ISimpleAudioVolume,
pbMute: ?*BOOL,
) callconv(WINAPI) HRESULT,
};
vtable: *const VTable,
pub fn MethodMixin(comptime T: type) type {
return struct {
pub usingnamespace IUnknown.MethodMixin(T);
pub inline fn SetMasterVolume(self: *const T, fLevel: f32, EventContext: ?*const Guid) HRESULT {
return @as(*const ISimpleAudioVolume.VTable, @ptrCast(self.vtable)).SetMasterVolume(@as(*const ISimpleAudioVolume, @ptrCast(self)), fLevel, EventContext);
}
pub inline fn GetMasterVolume(self: *const T, pfLevel: ?*f32) HRESULT {
return @as(*const ISimpleAudioVolume.VTable, @ptrCast(self.vtable)).GetMasterVolume(@as(*const ISimpleAudioVolume, @ptrCast(self)), pfLevel);
}
pub inline fn SetMute(self: *const T, bMute: BOOL, EventContext: ?*const Guid) HRESULT {
return @as(*const ISimpleAudioVolume.VTable, @ptrCast(self.vtable)).SetMute(@as(*const ISimpleAudioVolume, @ptrCast(self)), bMute, EventContext);
}
pub inline fn GetMute(self: *const T, pbMute: ?*BOOL) HRESULT {
return @as(*const ISimpleAudioVolume.VTable, @ptrCast(self.vtable)).GetMute(@as(*const ISimpleAudioVolume, @ptrCast(self)), pbMute);
}
};
}
pub usingnamespace MethodMixin(@This());
};
pub const IPropertyStore = extern struct {
pub const VTable = extern struct {
base: IUnknown.VTable,
GetCount: *const fn (
self: *const IPropertyStore,
cProps: ?*u32,
) callconv(WINAPI) HRESULT,
GetAt: *const fn (
self: *const IPropertyStore,
iProp: u32,
pkey: ?*PROPERTYKEY,
) callconv(WINAPI) HRESULT,
GetValue: *const fn (
self: *const IPropertyStore,
key: ?*const PROPERTYKEY,
pv: ?*PROPVARIANT,
) callconv(WINAPI) HRESULT,
SetValue: *const fn (
self: *const IPropertyStore,
key: ?*const PROPERTYKEY,
propvar: ?*const PROPVARIANT,
) callconv(WINAPI) HRESULT,
Commit: *const fn (
self: *const IPropertyStore,
) callconv(WINAPI) HRESULT,
};
vtable: *const VTable,
pub fn MethodMixin(comptime T: type) type {
return struct {
pub usingnamespace IUnknown.MethodMixin(T);
pub inline fn GetCount(self: *const T, cProps: ?*u32) HRESULT {
return @as(*const IPropertyStore.VTable, @ptrCast(self.vtable)).GetCount(@as(*const IPropertyStore, @ptrCast(self)), cProps);
}
pub inline fn GetAt(self: *const T, iProp: u32, pkey: ?*PROPERTYKEY) HRESULT {
return @as(*const IPropertyStore.VTable, @ptrCast(self.vtable)).GetAt(@as(*const IPropertyStore, @ptrCast(self)), iProp, pkey);
}
pub inline fn GetValue(self: *const T, key: ?*const PROPERTYKEY, pv: ?*PROPVARIANT) HRESULT {
return @as(*const IPropertyStore.VTable, @ptrCast(self.vtable)).GetValue(@as(*const IPropertyStore, @ptrCast(self)), key, pv);
}
pub inline fn SetValue(self: *const T, key: ?*const PROPERTYKEY, propvar: ?*const PROPVARIANT) HRESULT {
return @as(*const IPropertyStore.VTable, @ptrCast(self.vtable)).SetValue(@as(*const IPropertyStore, @ptrCast(self)), key, propvar);
}
pub inline fn Commit(self: *const T) HRESULT {
return @as(*const IPropertyStore.VTable, @ptrCast(self.vtable)).Commit(@as(*const IPropertyStore, @ptrCast(self)));
}
};
}
pub usingnamespace MethodMixin(@This());
};
const IID_IMMDevice = &Guid.initString("d666063f-1587-4e43-81f1-b948e807363f");
pub const IMMDevice = extern struct {
pub const VTable = extern struct {
base: IUnknown.VTable,
Activate: *const fn (
self: *const IMMDevice,
iid: ?*const Guid,
dwClsCtx: u32,
pActivationParams: ?*PROPVARIANT,
ppInterface: ?*?*anyopaque,
) callconv(WINAPI) HRESULT,
OpenPropertyStore: *const fn (
self: *const IMMDevice,
stgmAccess: u32,
ppProperties: ?*?*IPropertyStore,
) callconv(WINAPI) HRESULT,
GetId: *const fn (
self: *const IMMDevice,
ppstrId: ?*?PWSTR,
) callconv(WINAPI) HRESULT,
GetState: *const fn (
self: *const IMMDevice,
pdwState: ?*u32,
) callconv(WINAPI) HRESULT,
};
vtable: *const VTable,
pub fn MethodMixin(comptime T: type) type {
return struct {
pub usingnamespace IUnknown.MethodMixin(T);
pub inline fn Activate(self: *const T, iid: ?*const Guid, dwClsCtx: u32, pActivationParams: ?*PROPVARIANT, ppInterface: ?*?*anyopaque) HRESULT {
return @as(*const IMMDevice.VTable, @ptrCast(self.vtable)).Activate(@as(*const IMMDevice, @ptrCast(self)), iid, dwClsCtx, pActivationParams, ppInterface);
}
pub inline fn OpenPropertyStore(self: *const T, stgmAccess: u32, ppProperties: ?*?*IPropertyStore) HRESULT {
return @as(*const IMMDevice.VTable, @ptrCast(self.vtable)).OpenPropertyStore(@as(*const IMMDevice, @ptrCast(self)), stgmAccess, ppProperties);
}
pub inline fn GetId(self: *const T, ppstrId: ?*?PWSTR) HRESULT {
return @as(*const IMMDevice.VTable, @ptrCast(self.vtable)).GetId(@as(*const IMMDevice, @ptrCast(self)), ppstrId);
}
pub inline fn GetState(self: *const T, pdwState: ?*u32) HRESULT {
return @as(*const IMMDevice.VTable, @ptrCast(self.vtable)).GetState(@as(*const IMMDevice, @ptrCast(self)), pdwState);
}
};
}
pub usingnamespace MethodMixin(@This());
};
pub const IID_IMMNotificationClient = &Guid.initString("7991eec9-7e89-4d85-8390-6c703cec60c0");
pub const IMMNotificationClient = extern struct {
pub const VTable = extern struct {
base: IUnknown.VTable,
OnDeviceStateChanged: *const fn (
self: *const IMMNotificationClient,
pwstrDeviceId: ?[*:0]const u16,
dwNewState: u32,
) callconv(WINAPI) HRESULT,
OnDeviceAdded: *const fn (
self: *const IMMNotificationClient,
pwstrDeviceId: ?[*:0]const u16,
) callconv(WINAPI) HRESULT,
OnDeviceRemoved: *const fn (
self: *const IMMNotificationClient,
pwstrDeviceId: ?[*:0]const u16,
) callconv(WINAPI) HRESULT,
OnDefaultDeviceChanged: *const fn (
self: *const IMMNotificationClient,
flow: DataFlow,
role: Role,
pwstrDefaultDeviceId: ?[*:0]const u16,
) callconv(WINAPI) HRESULT,
OnPropertyValueChanged: *const fn (
self: *const IMMNotificationClient,
pwstrDeviceId: ?[*:0]const u16,
key: PROPERTYKEY,
) callconv(WINAPI) HRESULT,
};
vtable: *const VTable,
pub fn MethodMixin(comptime T: type) type {
return struct {
pub usingnamespace IUnknown.MethodMixin(T);
pub inline fn OnDeviceStateChanged(self: *const T, pwstrDeviceId: ?[*:0]const u16, dwNewState: u32) HRESULT {
return @as(*const IMMNotificationClient.VTable, @ptrCast(self.vtable)).OnDeviceStateChanged(@as(*const IMMNotificationClient, @ptrCast(self)), pwstrDeviceId, dwNewState);
}
pub inline fn OnDeviceAdded(self: *const T, pwstrDeviceId: ?[*:0]const u16) HRESULT {
return @as(*const IMMNotificationClient.VTable, @ptrCast(self.vtable)).OnDeviceAdded(@as(*const IMMNotificationClient, @ptrCast(self)), pwstrDeviceId);
}
pub inline fn OnDeviceRemoved(self: *const T, pwstrDeviceId: ?[*:0]const u16) HRESULT {
return @as(*const IMMNotificationClient.VTable, @ptrCast(self.vtable)).OnDeviceRemoved(@as(*const IMMNotificationClient, @ptrCast(self)), pwstrDeviceId);
}
pub inline fn OnDefaultDeviceChanged(self: *const T, flow: DataFlow, role: Role, pwstrDefaultDeviceId: ?[*:0]const u16) HRESULT {
return @as(*const IMMNotificationClient.VTable, @ptrCast(self.vtable)).OnDefaultDeviceChanged(@as(*const IMMNotificationClient, @ptrCast(self)), flow, role, pwstrDefaultDeviceId);
}
pub inline fn OnPropertyValueChanged(self: *const T, pwstrDeviceId: ?[*:0]const u16, key: PROPERTYKEY) HRESULT {
return @as(*const IMMNotificationClient.VTable, @ptrCast(self.vtable)).OnPropertyValueChanged(@as(*const IMMNotificationClient, @ptrCast(self)), pwstrDeviceId, key);
}
};
}
pub usingnamespace MethodMixin(@This());
};
pub const IID_IMMDeviceCollection = &Guid.initString("0bd7a1be-7a1a-44db-8397-cc5392387b5e");
pub const IMMDeviceCollection = extern struct {
pub const VTable = extern struct {
base: IUnknown.VTable,
GetCount: *const fn (
self: *const IMMDeviceCollection,
pcDevices: ?*u32,
) callconv(WINAPI) HRESULT,
Item: *const fn (
self: *const IMMDeviceCollection,
nDevice: u32,
ppDevice: ?*?*IMMDevice,
) callconv(WINAPI) HRESULT,
};
vtable: *const VTable,
pub fn MethodMixin(comptime T: type) type {
return struct {
pub usingnamespace IUnknown.MethodMixin(T);
pub inline fn GetCount(self: *const T, pcDevices: ?*u32) HRESULT {
return @as(*const IMMDeviceCollection.VTable, @ptrCast(self.vtable)).GetCount(@as(*const IMMDeviceCollection, @ptrCast(self)), pcDevices);
}
pub inline fn Item(self: *const T, nDevice: u32, ppDevice: ?*?*IMMDevice) HRESULT {
return @as(*const IMMDeviceCollection.VTable, @ptrCast(self.vtable)).Item(@as(*const IMMDeviceCollection, @ptrCast(self)), nDevice, ppDevice);
}
};
}
pub usingnamespace MethodMixin(@This());
};
pub const IID_IMMDeviceEnumerator = &Guid.initString("a95664d2-9614-4f35-a746-de8db63617e6");
pub const IMMDeviceEnumerator = extern struct {
pub const VTable = extern struct {
base: IUnknown.VTable,
EnumAudioEndpoints: *const fn (
self: *const IMMDeviceEnumerator,
dataFlow: DataFlow,
dwStateMask: u32,
ppDevices: ?*?*IMMDeviceCollection,
) callconv(WINAPI) HRESULT,
GetDefaultAudioEndpoint: *const fn (
self: *const IMMDeviceEnumerator,
dataFlow: DataFlow,
role: Role,
ppEndpoint: ?*?*IMMDevice,
) callconv(WINAPI) HRESULT,
GetDevice: *const fn (
self: *const IMMDeviceEnumerator,
pwstrId: ?[*:0]const u16,
ppDevice: ?*?*IMMDevice,
) callconv(WINAPI) HRESULT,
RegisterEndpointNotificationCallback: *const fn (
self: *const IMMDeviceEnumerator,
pClient: ?*IMMNotificationClient,
) callconv(WINAPI) HRESULT,
UnregisterEndpointNotificationCallback: *const fn (
self: *const IMMDeviceEnumerator,
pClient: ?*IMMNotificationClient,
) callconv(WINAPI) HRESULT,
};
vtable: *const VTable,
pub fn MethodMixin(comptime T: type) type {
return struct {
pub usingnamespace IUnknown.MethodMixin(T);
pub inline fn EnumAudioEndpoints(self: *const T, dataFlow: DataFlow, dwStateMask: u32, ppDevices: ?*?*IMMDeviceCollection) HRESULT {
return @as(*const IMMDeviceEnumerator.VTable, @ptrCast(self.vtable)).EnumAudioEndpoints(@as(*const IMMDeviceEnumerator, @ptrCast(self)), dataFlow, dwStateMask, ppDevices);
}
pub inline fn GetDefaultAudioEndpoint(self: *const T, dataFlow: DataFlow, role: Role, ppEndpoint: ?*?*IMMDevice) HRESULT {
return @as(*const IMMDeviceEnumerator.VTable, @ptrCast(self.vtable)).GetDefaultAudioEndpoint(@as(*const IMMDeviceEnumerator, @ptrCast(self)), dataFlow, role, ppEndpoint);
}
pub inline fn GetDevice(self: *const T, pwstrId: ?[*:0]const u16, ppDevice: ?*?*IMMDevice) HRESULT {
return @as(*const IMMDeviceEnumerator.VTable, @ptrCast(self.vtable)).GetDevice(@as(*const IMMDeviceEnumerator, @ptrCast(self)), pwstrId, ppDevice);
}
pub inline fn RegisterEndpointNotificationCallback(self: *const T, pClient: ?*IMMNotificationClient) HRESULT {
return @as(*const IMMDeviceEnumerator.VTable, @ptrCast(self.vtable)).RegisterEndpointNotificationCallback(@as(*const IMMDeviceEnumerator, @ptrCast(self)), pClient);
}
pub inline fn UnregisterEndpointNotificationCallback(self: *const T, pClient: ?*IMMNotificationClient) HRESULT {
return @as(*const IMMDeviceEnumerator.VTable, @ptrCast(self.vtable)).UnregisterEndpointNotificationCallback(@as(*const IMMDeviceEnumerator, @ptrCast(self)), pClient);
}
};
}
pub usingnamespace MethodMixin(@This());
};
pub const IID_IMMEndpoint = &Guid.initString("1be09788-6894-4089-8586-9a2a6c265ac5");
pub const IMMEndpoint = extern struct {
pub const VTable = extern struct {
base: IUnknown.VTable,
GetDataFlow: *const fn (
self: *const IMMEndpoint,
pDataFlow: ?*DataFlow,
) callconv(WINAPI) HRESULT,
};
vtable: *const VTable,
pub fn MethodMixin(comptime T: type) type {
return struct {
pub usingnamespace IUnknown.MethodMixin(T);
pub inline fn GetDataFlow(self: *const T, pDataFlow: ?*DataFlow) HRESULT {
return @as(*const IMMEndpoint.VTable, @ptrCast(self.vtable)).GetDataFlow(@as(*const IMMEndpoint, @ptrCast(self)), pDataFlow);
}
};
}
pub usingnamespace MethodMixin(@This());
};
pub const AUDCLNT_STREAMFLAGS_CROSSPROCESS = 65536;
pub const AUDCLNT_STREAMFLAGS_LOOPBACK = 131072;
pub const AUDCLNT_STREAMFLAGS_EVENTCALLBACK = 262144;
pub const AUDCLNT_STREAMFLAGS_NOPERSIST = 524288;
pub const AUDCLNT_STREAMFLAGS_RATEADJUST = 1048576;
pub const AUDCLNT_STREAMFLAGS_SRC_DEFAULT_QUALITY = 134217728;
pub const AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM = 2147483648;
pub const AUDCLNT_SESSIONFLAGS_EXPIREWHENUNOWNED = 268435456;
pub const PKEY_Device_FriendlyName = PROPERTYKEY{ .fmtid = Guid.initString("a45c254e-df1c-4efd-8020-67d146a850e0"), .pid = 14 };
pub const CLSID_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT = &Guid.initString("00000003-0000-0010-8000-00aa00389b71");
pub const SPEAKER_FRONT_LEFT = 1;
pub const SPEAKER_FRONT_RIGHT = 2;
pub const SPEAKER_FRONT_CENTER = 4;
pub const SPEAKER_LOW_FREQUENCY = 8;
pub const SPEAKER_BACK_LEFT = 16;
pub const SPEAKER_BACK_RIGHT = 32;
pub const SPEAKER_FRONT_LEFT_OF_CENTER = 64;
pub const SPEAKER_FRONT_RIGHT_OF_CENTER = 128;
pub const SPEAKER_BACK_CENTER = 256;
pub const SPEAKER_SIDE_LEFT = 512;
pub const SPEAKER_SIDE_RIGHT = 1024;
pub const SPEAKER_TOP_CENTER = 2048;
pub const SPEAKER_TOP_FRONT_LEFT = 4096;
pub const SPEAKER_TOP_FRONT_CENTER = 8192;
pub const SPEAKER_TOP_FRONT_RIGHT = 16384;
pub const SPEAKER_TOP_BACK_LEFT = 32768;
pub const SPEAKER_TOP_BACK_CENTER = 65536;
pub const SPEAKER_TOP_BACK_RIGHT = 131072;
pub const SPEAKER_RESERVED = @as(u32, 2147221504);
pub const SPEAKER_ALL = @as(u32, 2147483648);
pub const CLSID_KSDATAFORMAT_SUBTYPE_PCM = &Guid.initString("00000001-0000-0010-8000-00aa00389b71");
pub const INPLACE_S_TRUNCATED = 262560;
pub const PKEY_AudioEngine_DeviceFormat = PROPERTYKEY{ .fmtid = Guid.initString("f19f064d-082c-4e27-bc73-6882a1bb8e4c"), .pid = 0 };
pub const WAVE_FORMAT_EXTENSIBLE = 65534;
pub const STGM_READ = 0;
pub const DEVICE_STATE_ACTIVE = 1;
pub const AUDCLNT_E_NOT_INITIALIZED = -2004287487;
pub const AUDCLNT_E_ALREADY_INITIALIZED = -2004287486;
pub const AUDCLNT_E_WRONG_ENDPOINT_TYPE = -2004287485;
pub const AUDCLNT_E_DEVICE_INVALIDATED = -2004287484;
pub const AUDCLNT_E_NOT_STOPPED = -2004287483;
pub const AUDCLNT_E_BUFFER_TOO_LARGE = -2004287482;
pub const AUDCLNT_E_OUT_OF_ORDER = -2004287481;
pub const AUDCLNT_E_UNSUPPORTED_FORMAT = -2004287480;
pub const AUDCLNT_E_INVALID_SIZE = -2004287479;
pub const AUDCLNT_E_DEVICE_IN_USE = -2004287478;
pub const AUDCLNT_E_BUFFER_OPERATION_PENDING = -2004287477;
pub const AUDCLNT_E_THREAD_NOT_REGISTERED = -2004287476;
pub const AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED = -2004287474;
pub const AUDCLNT_E_ENDPOINT_CREATE_FAILED = -2004287473;
pub const AUDCLNT_E_SERVICE_NOT_RUNNING = -2004287472;
pub const AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED = -2004287471;
pub const AUDCLNT_E_EXCLUSIVE_MODE_ONLY = -2004287470;
pub const AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL = -2004287469;
pub const AUDCLNT_E_EVENTHANDLE_NOT_SET = -2004287468;
pub const AUDCLNT_E_INCORRECT_BUFFER_SIZE = -2004287467;
pub const AUDCLNT_E_BUFFER_SIZE_ERROR = -2004287466;
pub const AUDCLNT_E_CPUUSAGE_EXCEEDED = -2004287465;
pub const AUDCLNT_E_BUFFER_ERROR = -2004287464;
pub const AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED = -2004287463;
pub const AUDCLNT_E_INVALID_DEVICE_PERIOD = -2004287456;
pub const AUDCLNT_E_INVALID_STREAM_FLAG = -2004287455;
pub const AUDCLNT_E_ENDPOINT_OFFLOAD_NOT_CAPABLE = -2004287454;
pub const AUDCLNT_E_OUT_OF_OFFLOAD_RESOURCES = -2004287453;
pub const AUDCLNT_E_OFFLOAD_MODE_ONLY = -2004287452;
pub const AUDCLNT_E_NONOFFLOAD_MODE_ONLY = -2004287451;
pub const AUDCLNT_E_RESOURCES_INVALIDATED = -2004287450;
pub const AUDCLNT_E_RAW_MODE_UNSUPPORTED = -2004287449;
pub const AUDCLNT_E_ENGINE_PERIODICITY_LOCKED = -2004287448;
pub const AUDCLNT_E_ENGINE_FORMAT_LOCKED = -2004287447;
pub const AUDCLNT_E_HEADTRACKING_ENABLED = -2004287440;
pub const AUDCLNT_E_HEADTRACKING_UNSUPPORTED = -2004287424;
pub const AUDCLNT_E_EFFECT_NOT_AVAILABLE = -2004287423;
pub const AUDCLNT_E_EFFECT_STATE_READ_ONLY = -2004287422;