mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 15:18:49 +00:00
sys/windows: added rudimentary User32.lib bindings
This commit is contained in:
+116
-30
@@ -21,7 +21,15 @@ HINSTANCE :: HANDLE
|
|||||||
HMODULE :: distinct HINSTANCE
|
HMODULE :: distinct HINSTANCE
|
||||||
HRESULT :: distinct LONG
|
HRESULT :: distinct LONG
|
||||||
HWND :: distinct HANDLE
|
HWND :: distinct HANDLE
|
||||||
|
HDC :: distinct HANDLE
|
||||||
HMONITOR :: distinct HANDLE
|
HMONITOR :: distinct HANDLE
|
||||||
|
HICON :: distinct HANDLE
|
||||||
|
HCURSOR :: distinct HANDLE
|
||||||
|
HMENU :: distinct HANDLE
|
||||||
|
HBRUSH :: distinct HANDLE
|
||||||
|
WPARAM :: distinct UINT_PTR
|
||||||
|
LPARAM :: distinct LONG_PTR
|
||||||
|
LRESULT :: distinct LONG_PTR
|
||||||
BOOL :: distinct b32
|
BOOL :: distinct b32
|
||||||
BYTE :: distinct u8
|
BYTE :: distinct u8
|
||||||
BOOLEAN :: distinct b8
|
BOOLEAN :: distinct b8
|
||||||
@@ -42,6 +50,7 @@ PULONG_PTR :: ^ULONG_PTR
|
|||||||
LPULONG_PTR :: ^ULONG_PTR
|
LPULONG_PTR :: ^ULONG_PTR
|
||||||
DWORD_PTR :: ULONG_PTR
|
DWORD_PTR :: ULONG_PTR
|
||||||
LONG_PTR :: int
|
LONG_PTR :: int
|
||||||
|
UINT_PTR :: uintptr
|
||||||
ULONG :: c_ulong
|
ULONG :: c_ulong
|
||||||
UCHAR :: BYTE
|
UCHAR :: BYTE
|
||||||
NTSTATUS :: c.long
|
NTSTATUS :: c.long
|
||||||
@@ -178,6 +187,83 @@ GetFileExInfoStandard: GET_FILEEX_INFO_LEVELS : 0
|
|||||||
GetFileExMaxInfoLevel: GET_FILEEX_INFO_LEVELS : 1
|
GetFileExMaxInfoLevel: GET_FILEEX_INFO_LEVELS : 1
|
||||||
|
|
||||||
|
|
||||||
|
WNDPROC :: #type proc "stdcall" (HWND, UINT, WPARAM, LPARAM) -> LRESULT
|
||||||
|
|
||||||
|
WNDCLASSA :: struct {
|
||||||
|
style: UINT,
|
||||||
|
lpfnWndProc: WNDPROC,
|
||||||
|
cbClsExtra: c_int,
|
||||||
|
cbWndExtra: c_int,
|
||||||
|
hInstance: HINSTANCE,
|
||||||
|
hIcon: HICON,
|
||||||
|
hCursor: HCURSOR,
|
||||||
|
hbrBackground: HBRUSH,
|
||||||
|
lpszMenuName: LPCSTR,
|
||||||
|
lpszClassName: LPCSTR,
|
||||||
|
}
|
||||||
|
|
||||||
|
WNDCLASSW :: struct {
|
||||||
|
style: UINT,
|
||||||
|
lpfnWndProc: WNDPROC,
|
||||||
|
cbClsExtra: c_int,
|
||||||
|
cbWndExtra: c_int,
|
||||||
|
hInstance: HINSTANCE,
|
||||||
|
hIcon: HICON,
|
||||||
|
hCursor: HCURSOR,
|
||||||
|
hbrBackground: HBRUSH,
|
||||||
|
lpszMenuName: LPCWSTR,
|
||||||
|
lpszClassName: LPCWSTR,
|
||||||
|
}
|
||||||
|
|
||||||
|
WNDCLASSEXA :: struct {
|
||||||
|
cbSize: UINT,
|
||||||
|
style: UINT,
|
||||||
|
lpfnWndProc: WNDPROC,
|
||||||
|
cbClsExtra: c_int,
|
||||||
|
cbWndExtra: c_int,
|
||||||
|
hInstance: HINSTANCE,
|
||||||
|
hIcon: HICON,
|
||||||
|
hCursor: HCURSOR,
|
||||||
|
hbrBackground: HBRUSH,
|
||||||
|
lpszMenuName: LPCSTR,
|
||||||
|
lpszClassName: LPCSTR,
|
||||||
|
hIconSm: HICON,
|
||||||
|
}
|
||||||
|
|
||||||
|
WNDCLASSEXW :: struct {
|
||||||
|
cbSize: UINT,
|
||||||
|
style: UINT,
|
||||||
|
lpfnWndProc: WNDPROC,
|
||||||
|
cbClsExtra: c_int,
|
||||||
|
cbWndExtra: c_int,
|
||||||
|
hInstance: HINSTANCE,
|
||||||
|
hIcon: HICON,
|
||||||
|
hCursor: HCURSOR,
|
||||||
|
hbrBackground: HBRUSH,
|
||||||
|
lpszMenuName: LPCWSTR,
|
||||||
|
lpszClassName: LPCWSTR,
|
||||||
|
hIconSm: HICON,
|
||||||
|
}
|
||||||
|
|
||||||
|
MSG :: struct {
|
||||||
|
hwnd: HWND,
|
||||||
|
message: UINT,
|
||||||
|
wParam: WPARAM,
|
||||||
|
lParam: LPARAM,
|
||||||
|
time: DWORD,
|
||||||
|
pt: POINT,
|
||||||
|
}
|
||||||
|
|
||||||
|
PAINTSTRUCT :: struct {
|
||||||
|
hdc: HDC,
|
||||||
|
fErase: BOOL,
|
||||||
|
rcPaint: RECT,
|
||||||
|
fRestore: BOOL,
|
||||||
|
fIncUpdate: BOOL,
|
||||||
|
rgbReserved: [32]BYTE,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
WIN32_FIND_DATAW :: struct {
|
WIN32_FIND_DATAW :: struct {
|
||||||
dwFileAttributes: DWORD,
|
dwFileAttributes: DWORD,
|
||||||
ftCreationTime: FILETIME,
|
ftCreationTime: FILETIME,
|
||||||
@@ -784,17 +870,17 @@ SYSTEM_INFO :: struct {
|
|||||||
|
|
||||||
// https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/ns-wdm-_osversioninfoexw
|
// https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/ns-wdm-_osversioninfoexw
|
||||||
OSVERSIONINFOEXW :: struct {
|
OSVERSIONINFOEXW :: struct {
|
||||||
dwOSVersionInfoSize: ULONG,
|
dwOSVersionInfoSize: ULONG,
|
||||||
dwMajorVersion: ULONG,
|
dwMajorVersion: ULONG,
|
||||||
dwMinorVersion: ULONG,
|
dwMinorVersion: ULONG,
|
||||||
dwBuildNumber: ULONG,
|
dwBuildNumber: ULONG,
|
||||||
dwPlatformId: ULONG,
|
dwPlatformId: ULONG,
|
||||||
szCSDVersion: [128]WCHAR,
|
szCSDVersion: [128]WCHAR,
|
||||||
wServicePackMajor: USHORT,
|
wServicePackMajor: USHORT,
|
||||||
wServicePackMinor: USHORT,
|
wServicePackMinor: USHORT,
|
||||||
wSuiteMask: USHORT,
|
wSuiteMask: USHORT,
|
||||||
wProductType: UCHAR,
|
wProductType: UCHAR,
|
||||||
wReserved: UCHAR,
|
wReserved: UCHAR,
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-quota_limits
|
// https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-quota_limits
|
||||||
@@ -837,24 +923,24 @@ PROFILEINFOW :: struct {
|
|||||||
lpDefaultPath: LPWSTR,
|
lpDefaultPath: LPWSTR,
|
||||||
lpServerName: LPWSTR,
|
lpServerName: LPWSTR,
|
||||||
lpPolicyPath: LPWSTR,
|
lpPolicyPath: LPWSTR,
|
||||||
hProfile: HANDLE,
|
hProfile: HANDLE,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Used in LookupAccountNameW
|
// Used in LookupAccountNameW
|
||||||
SID_NAME_USE :: distinct DWORD
|
SID_NAME_USE :: distinct DWORD
|
||||||
|
|
||||||
SID_TYPE :: enum SID_NAME_USE {
|
SID_TYPE :: enum SID_NAME_USE {
|
||||||
User = 1,
|
User = 1,
|
||||||
Group,
|
Group,
|
||||||
Domain,
|
Domain,
|
||||||
Alias,
|
Alias,
|
||||||
WellKnownGroup,
|
WellKnownGroup,
|
||||||
DeletedAccount,
|
DeletedAccount,
|
||||||
Invalid,
|
Invalid,
|
||||||
Unknown,
|
Unknown,
|
||||||
Computer,
|
Computer,
|
||||||
Label,
|
Label,
|
||||||
LogonSession,
|
LogonSession,
|
||||||
}
|
}
|
||||||
|
|
||||||
SECURITY_MAX_SID_SIZE :: 68
|
SECURITY_MAX_SID_SIZE :: 68
|
||||||
@@ -869,7 +955,7 @@ SID :: struct #packed {
|
|||||||
#assert(size_of(SID) == SECURITY_MAX_SID_SIZE)
|
#assert(size_of(SID) == SECURITY_MAX_SID_SIZE)
|
||||||
|
|
||||||
SID_IDENTIFIER_AUTHORITY :: struct #packed {
|
SID_IDENTIFIER_AUTHORITY :: struct #packed {
|
||||||
Value: [6]u8,
|
Value: [6]u8,
|
||||||
}
|
}
|
||||||
|
|
||||||
// For NetAPI32
|
// For NetAPI32
|
||||||
@@ -901,11 +987,11 @@ USER_INFO_FLAG :: enum DWORD {
|
|||||||
Passwd_Cant_Change = 6, // 1 << 6: 0x0040,
|
Passwd_Cant_Change = 6, // 1 << 6: 0x0040,
|
||||||
Encrypted_Text_Password_Allowed = 7, // 1 << 7: 0x0080,
|
Encrypted_Text_Password_Allowed = 7, // 1 << 7: 0x0080,
|
||||||
|
|
||||||
Temp_Duplicate_Account = 8, // 1 << 8: 0x0100,
|
Temp_Duplicate_Account = 8, // 1 << 8: 0x0100,
|
||||||
Normal_Account = 9, // 1 << 9: 0x0200,
|
Normal_Account = 9, // 1 << 9: 0x0200,
|
||||||
InterDomain_Trust_Account = 11, // 1 << 11: 0x0800,
|
InterDomain_Trust_Account = 11, // 1 << 11: 0x0800,
|
||||||
Workstation_Trust_Account = 12, // 1 << 12: 0x1000,
|
Workstation_Trust_Account = 12, // 1 << 12: 0x1000,
|
||||||
Server_Trust_Account = 13, // 1 << 13: 0x2000,
|
Server_Trust_Account = 13, // 1 << 13: 0x2000,
|
||||||
}
|
}
|
||||||
USER_INFO_FLAGS :: distinct bit_set[USER_INFO_FLAG]
|
USER_INFO_FLAGS :: distinct bit_set[USER_INFO_FLAG]
|
||||||
|
|
||||||
@@ -1252,4 +1338,4 @@ SYSTEMTIME :: struct {
|
|||||||
minute: WORD,
|
minute: WORD,
|
||||||
second: WORD,
|
second: WORD,
|
||||||
milliseconds: WORD,
|
milliseconds: WORD,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,82 @@
|
|||||||
|
// +build windows
|
||||||
|
package sys_windows
|
||||||
|
|
||||||
|
foreign import user32 "system:User32.lib"
|
||||||
|
|
||||||
|
@(default_calling_convention="stdcall")
|
||||||
|
foreign user32 {
|
||||||
|
RegisterClassA :: proc(lpWndClass: ^WNDCLASSA) -> ATOM ---
|
||||||
|
RegisterClassW :: proc(lpWndClass: ^WNDCLASSW) -> ATOM ---
|
||||||
|
RegisterClassExA :: proc(^WNDCLASSEXA) -> ATOM ---
|
||||||
|
RegisterClassExW :: proc(^WNDCLASSEXW) -> ATOM ---
|
||||||
|
|
||||||
|
CreateWindowExA :: proc(
|
||||||
|
dwExStyle: DWORD,
|
||||||
|
lpClassName: LPCSTR,
|
||||||
|
lpWindowName: LPCSTR,
|
||||||
|
dwStyle: DWORD,
|
||||||
|
X: c_int,
|
||||||
|
Y: c_int,
|
||||||
|
nWidth: c_int,
|
||||||
|
nHeight: c_int,
|
||||||
|
hWndParent: HWND,
|
||||||
|
hMenu: HMENU,
|
||||||
|
hInstance: HINSTANCE,
|
||||||
|
lpParam: LPVOID,
|
||||||
|
) -> HWND ---
|
||||||
|
CreateWindowExW :: proc(
|
||||||
|
dwExStyle: DWORD,
|
||||||
|
lpClassName: LPCWSTR,
|
||||||
|
lpWindowName: LPCWSTR,
|
||||||
|
dwStyle: DWORD,
|
||||||
|
X: c_int,
|
||||||
|
Y: c_int,
|
||||||
|
nWidth: c_int,
|
||||||
|
nHeight: c_int,
|
||||||
|
hWndParent: HWND,
|
||||||
|
hMenu: HMENU,
|
||||||
|
hInstance: HINSTANCE,
|
||||||
|
lpParam: LPVOID,
|
||||||
|
) -> HWND ---
|
||||||
|
|
||||||
|
DestroyWindow :: proc(hWnd: HWND) -> BOOL ---
|
||||||
|
ShowWindow :: proc(hWnd: HWND, nCmdShow: c_int) -> BOOL ---
|
||||||
|
|
||||||
|
GetMessageA :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT) -> BOOL ---
|
||||||
|
GetMessageW :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT) -> BOOL ---
|
||||||
|
|
||||||
|
TranslateMessage :: proc(lpMsg: ^MSG) -> BOOL ---
|
||||||
|
DispatchMessageA :: proc(lpMsg: ^MSG) -> LRESULT ---
|
||||||
|
DispatchMessageW :: proc(lpMsg: ^MSG) -> LRESULT ---
|
||||||
|
|
||||||
|
PeekMessageA :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT, wRemoveMsg: UINT) -> BOOL ---
|
||||||
|
PeekMessageW :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT, wRemoveMsg: UINT) -> BOOL ---
|
||||||
|
|
||||||
|
PostMessageA :: proc(hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> BOOL ---
|
||||||
|
PostMessageW :: proc(hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> BOOL ---
|
||||||
|
SendMessageA :: proc(hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> LRESULT ---
|
||||||
|
SendMessageW :: proc(hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> LRESULT ---
|
||||||
|
|
||||||
|
PostThreadMessageA :: proc(idThread: DWORD, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> BOOL ---
|
||||||
|
PostThreadMessageW :: proc(idThread: DWORD, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> BOOL ---
|
||||||
|
|
||||||
|
DefWindowProcA :: proc(hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> LRESULT ---
|
||||||
|
DefWindowProcW :: proc(hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> LRESULT ---
|
||||||
|
|
||||||
|
FindWindowExA :: proc(hWndParent: HWND, hWndChildAfter: HWND, lpszClass: LPCSTR, lpszWindow: LPCSTR) -> HWND ---
|
||||||
|
FindWindowExW :: proc(hWndParent: HWND, hWndChildAfter: HWND, lpszClass: LPCWSTR, lpszWindow: LPCWSTR) -> HWND ---
|
||||||
|
|
||||||
|
LoadIconA :: proc(hInstance: HINSTANCE, lpIconName: LPCSTR) -> HICON ---
|
||||||
|
LoadIconW :: proc(hInstance: HINSTANCE, lpIconName: LPCWSTR) -> HICON ---
|
||||||
|
LoadCursorA :: proc(hInstance: HINSTANCE, lpCursorName: LPCSTR) -> HCURSOR ---
|
||||||
|
LoadCursorW :: proc(hInstance: HINSTANCE, lpCursorName: LPCWSTR) -> HCURSOR ---
|
||||||
|
|
||||||
|
GetClientRect :: proc(hWnd: HWND, lpRect: ^RECT) -> BOOL ---
|
||||||
|
|
||||||
|
GetWindowDC :: proc(hWnd: HWND) -> HDC ---
|
||||||
|
GetDC :: proc(hWnd: HWND) -> HDC ---
|
||||||
|
ReleaseDC :: proc(hWnd: HWND, hDC: HDC) -> c_int ---
|
||||||
|
|
||||||
|
BeginPaint :: proc(hWnd: HWND, lpPaint: ^PAINTSTRUCT) -> HDC ---
|
||||||
|
EndPaint :: proc(hWnd: HWND, lpPaint: ^PAINTSTRUCT) -> BOOL ---
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user