1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 03:28:20 +02:00
Beef/BeefLibs/corlib/src/Windows.bf
2024-07-24 09:41:08 +02:00

1900 lines
69 KiB
Beef

#if BF_PLATFORM_WINDOWS
using System.IO;
using System.Collections;
using System.Text;
namespace System
{
class Windows
{
public struct COM_IUnknown
{
public enum ClsContext : uint32
{
NONE = 0,
INPROC_SERVER = 0x1,
INPROC_HANDLER = 0x2,
LOCAL_SERVER = 0x4,
INPROC_SERVER16 = 0x8,
REMOTE_SERVER = 0x10,
INPROC_HANDLER16 = 0x20,
RESERVED1 = 0x40,
RESERVED2 = 0x80,
RESERVED3 = 0x100,
RESERVED4 = 0x200,
NO_CODE_DOWNLOAD = 0x400,
RESERVED5 = 0x800,
NO_CUSTOM_MARSHAL = 0x1000,
ENABLE_CODE_DOWNLOAD = 0x2000,
NO_FAILURE_LOG = 0x4000,
DISABLE_AAA = 0x8000,
ENABLE_AAA = 0x10000,
FROM_DEFAULT_CONTEXT = 0x20000,
ACTIVATE_X86_SERVER = 0x40000,
#unwarn
ACTIVATE_32_BIT_SERVER = ACTIVATE_X86_SERVER,
ACTIVATE_64_BIT_SERVER = 0x80000,
ENABLE_CLOAKING = 0x100000,
APPCONTAINER = 0x400000,
ACTIVATE_AAA_AS_IU = 0x800000,
RESERVED6 = 0x01000000,
ACTIVATE_ARM32_SERVER = 0x02000000,
PS_DLL = 0x80000000,
ALL = INPROC_SERVER | INPROC_HANDLER | LOCAL_SERVER | REMOTE_SERVER
}
public struct VTable
{
public function [CallingConvention(.Stdcall)] HResult(COM_IUnknown* self, ref Guid riid, void** result) QueryInterface;
public function [CallingConvention(.Stdcall)] uint32(COM_IUnknown* self) AddRef;
public function [CallingConvention(.Stdcall)] uint32(COM_IUnknown* self) Release;
}
public enum HResult : int32
{
case OK;
public const HResult NOERROR = (.)0;
public const HResult E_INVALIDARG = (.)0x80000003L;
public const HResult E_ABORT = (.)0x80004004L;
public const HResult E_FAIL = (.)0x80004005L;
public const HResult E_ACCESSDENIED = (.)0x80070005L;
public bool Failed
{
get
{
return this != .OK;
}
}
}
protected VTable* mVT;
public VTable* VT
{
get
{
return (.)mVT;
}
}
[Import("ole32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern HResult CoCreateInstanceFromApp(ref Guid clsid, COM_IUnknown* unkOuter, ClsContext clsCtx, void* reserved, uint32 count, MULTI_QI* result);
struct MULTI_QI
{
public Guid* mIID;
public COM_IUnknown* mItf;
public HResult mHR;
}
[Import("ole32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern HResult CoCreateInstance(ref Guid clsId, COM_IUnknown* unkOuter, ClsContext clsCtx, ref Guid iid, void** result);
[Import("ole32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern void CoTaskMemFree(void* ptr);
}
public struct COM_IBindCtx;
public function int WndProc(HWnd hWnd, int32 msg, int wParam, int lParam);
public delegate IntBool EnumThreadWindowsCallback(HWnd hWnd, void* extraParameter);
public struct Rect : this(int32 left, int32 top, int32 right, int32 bottom)
{
public int32 Width => right - left;
public int32 Height => bottom - top;
}
[CRepr]
public struct OpenFileName
{
public int32 mStructSize = (int32)sizeof(OpenFileName); //ndirect.DllLib.sizeOf(this);
public HWnd mHwndOwner;
public HInstance mHInstance;
public char16* mFilter; // use embedded nulls to separate filters
public int mCustomFilter = 0;
public int32 nMaxCustFilter = 0;
public int32 nFilterIndex;
public char16* mFile;
public int32 nMaxFile = Windows.MAX_PATH;
public int mFileTitle = 0;
public int32 mMaxFileTitle = Windows.MAX_PATH;
public char16* mInitialDir;
public char16* mTitle;
public int32 mFlags;
public int16 mFileOffset = 0;
public int16 mFileExtension = 0;
public char16* mDefExt;
public int mCustData = 0;
public WndProc mHook;
public char16* mTemplateName = null;
public int mReserved1 = 0;
public int32 mReserved2 = 0;
public int32 mFlagsEx;
}
public enum BrowseInfos
{
NewDialogStyle = 0x0040, // Use the new dialog layout with the ability to resize
HideNewFolderButton = 0x0200 // Don't display the 'New Folder' button
}
[CRepr]
public struct BrowseInfo
{
public HWnd mHWndOwner;
public int mIdlRoot;
public char8* mDisplayName;
public char8* mTitle;
public int32 mFlags;
public WndProc mCallback;
public int mLParam;
public int32 mImage;
}
[CRepr]
public struct SHFileInfo
{
public Handle mHIcon; // out: icon
public int32 mIIcon; // out: icon index
public uint32 mAttributes; // out: SFGAO_ flags
public char16[Windows.MAX_PATH] mDisplayName; // out: display name (or path)
public char16[80] mTypeName; // out: type name
}
public const int32 SHGFI_ICON = 0x00000100; // get icon
public const int32 SHGFI_DISPLAYNAME = 0x00000200; // get display name
public const int32 SHGFI_TYPENAME = 0x00000400; // get type name
public const int32 SHGFI_ATTRIBUTES = 0x00000800; // get attributes
public const int32 SHGFI_ICONLOCATION = 0x00001000; // get icon location
public const int32 SHGFI_EXETYPE = 0x00002000; // return exe type
public const int32 SHGFI_SYSICONINDEX = 0x00004000; // get system icon index
public const int32 SHGFI_LINKOVERLAY = 0x00008000; // put a link overlay on icon
public const int32 SHGFI_SELECTED = 0x00010000; // show icon in selected state
public const int32 SHGFI_ATTR_SPECIFIED = 0x00020000; // get only specified attributes
public const int32 SHGFI_LARGEICON = 0x00000000; // get large icon
public const int32 SHGFI_SMALLICON = 0x00000001; // get small icon
public const int32 SHGFI_OPENICON = 0x00000002; // get open icon
public const int32 SHGFI_SHELLICONSIZE = 0x00000004; // get shell size icon
public const int32 SHGFI_PIDL = 0x00000008; // pszPath is a pidl
public const int32 SHGFI_USEFILEATTRIBUTES = 0x00000010; // use passed dwFileAttribute
public const int32 SHGFI_ADDOVERLAYS = 0x00000020; // apply the appropriate overlays
public const int32 SHGFI_OVERLAYINDEX = 0x00000040; // Get the index of the overlay
public const int32 REG_NONE = 0; // No value type
public const int32 REG_SZ = 1; // Unicode nul terminated string
public const int32 REG_EXPAND_SZ = 2; // Unicode nul terminated string
// (with environment variable references)
public const int32 REG_BINARY = 3; // Free form binary
public const int32 REG_DWORD = 4; // 32-bit number
public const int32 REG_DWORD_LITTLE_ENDIAN = 4; // 32-bit number (same as REG_DWORD)
public const int32 REG_DWORD_BIG_ENDIAN = 5; // 32-bit number
public const int32 REG_LINK = 6; // Symbolic Link (unicode)
public const int32 REG_MULTI_SZ = 7; // Multiple Unicode strings
public const int32 REG_RESOURCE_LIST = 8; // Resource list in the resource map
public const int32 REG_FULL_RESOURCE_DESCRIPTOR = 9; // Resource list in the hardware description
public const int32 REG_RESOURCE_REQUIREMENTS_LIST = 10;
public const int32 REG_QWORD = 11; // 64-bit number
public const int32 REG_QWORD_LITTLE_ENDIAN = 11; // 64-bit number (same as REG_QWORD)
public const int32 REG_OPTION_NON_VOLATILE = 0;
public const int32 MB_OK = 0;
public const int32 MB_OKCANCEL = 1;
public const int32 MB_YESNO = 4;
public const int32 MB_ICONHAND = 0x10;
public const int32 MB_ICONQUESTION = 0x20;
public const int32 IDOK = 1;
public const int32 IDYES = 6;
public const int32 LOAD_LIBRARY_AS_DATAFILE = 0x00000002;
public const int32 LOAD_STRING_MAX_LENGTH = 500;
public const int32 MUI_PREFERRED_UI_LANGUAGES = 0x10;
public const int32 SECTION_QUERY = 0x0001;
public const int32 SECTION_MAP_WRITE = 0x0002;
public const int32 SECTION_MAP_READ = 0x0004;
public const int32 SECTION_MAP_EXECUTE = 0x0008;
public const int32 SECTION_EXTEND_SIZE = 0x0010;
public const int32 FILE_MAP_WRITE = SECTION_MAP_WRITE;
public const int32 FILE_MAP_READ = SECTION_MAP_READ;
//public const int32 FILE_MAP_ALL_ACCESS = SECTION_ALL_ACCESS;
public enum FOS : uint32
{
FOS_OVERWRITEPROMPT = 0x00000002,
FOS_STRICTFILETYPES = 0x00000004,
FOS_NOCHANGEDIR = 0x00000008,
FOS_PICKFOLDERS = 0x00000020,
FOS_FORCEFILESYSTEM = 0x00000040,
FOS_ALLNONSTORAGEITEMS = 0x00000080,
FOS_NOVALIDATE = 0x00000100,
FOS_ALLOWMULTISELECT = 0x00000200,
FOS_PATHMUSTEXIST = 0x00000800,
FOS_FILEMUSTEXIST = 0x00001000,
FOS_CREATEPROMPT = 0x00002000,
FOS_SHAREAWARE = 0x00004000,
FOS_NOREADONLYRETURN = 0x00008000,
FOS_NOTESTFILECREATE = 0x00010000,
FOS_HIDEMRUPLACES = 0x00020000,
FOS_HIDEPINNEDPLACES = 0x00040000,
FOS_NODEREFERENCELINKS = 0x00100000,
FOS_DONTADDTORECENT = 0x02000000,
FOS_FORCESHOWHIDDEN = 0x10000000,
FOS_DEFAULTNOMINIMODE = 0x20000000
}
public struct Handle : int
{
public const Handle InvalidHandle = (Handle)-1;
public const Handle NullHandle = (Handle)+0;
public bool IsInvalid
{
get
{
return ((int)this == (int)(-1)) || ((int)this == (int)0);
}
}
public void Close()
{
Windows.CloseHandle(this);
}
}
public struct HKey : int
{
public bool IsInvalid
{
get
{
return ((int)this == (int)(-1)) || ((int)this == (int)0);
}
}
public void Close()
{
Windows.RegCloseKey(this);
}
protected Result<void> GetValue(StringView name, delegate void(uint32 regType, Span<uint8> regData) onData)
{
uint8[4096] buffer;
uint8* bufPtr = &buffer;
int bufSize = sizeof(decltype(buffer));
defer
{
if (bufPtr != &buffer)
delete bufPtr;
}
while (true)
{
uint32 regType = 0;
uint32 newBufSize = (uint32)bufSize;
int ret = Windows.RegQueryValueExW(this, name.ToScopedNativeWChar!(), null, &regType, bufPtr, &newBufSize);
if (ret == 0)
{
onData(regType, .(bufPtr, (int)newBufSize));
break;
}
if (ret != ERROR_MORE_DATA)
return .Err;
bufSize = (.)newBufSize;
let newBuf = new uint8[bufSize]*;
if (bufPtr != &buffer)
delete bufPtr;
bufPtr = newBuf;
}
return .Ok;
}
public Result<Variant> GetValue(StringView name)
{
Variant val = default;
GetValue(name, scope [&] (regType, regData) =>
{
switch (regType)
{
case Windows.REG_DWORD:
val = Variant.Create<int32>(*(int32*)regData.Ptr);
case Windows.REG_SZ:
var span = Span<char16>((char16*)regData.Ptr, regData.Length / 2);
if ((span.Length > 0) && (span[span.Length - 1] == 0))
span.RemoveFromEnd(1);
String str = scope String(span);
val = Variant.Create<String>(str);
case Windows.REG_QWORD:
val = Variant.Create<int64>(*(int64*)regData.Ptr);
default:
Runtime.NotImplemented();
}
}).IgnoreError();
if (!val.HasValue)
return .Err;
return val;
}
public Result<void> GetValue(StringView name, List<uint8> outData)
{
bool gotData = false;
GetValue(name, scope [?] (regType, regData) =>
{
if (regType == Windows.REG_BINARY)
{
gotData = true;
outData.AddRange(regData);
}
}).IgnoreError();
if (!gotData)
return .Err;
return .Ok;
}
public Result<void> GetValue(StringView name, String outData)
{
bool gotData = false;
GetValue(name, scope [?] (regType, regData) =>
{
if ((regType == Windows.REG_SZ) || (regType == Windows.REG_EXPAND_SZ))
{
gotData = true;
var span = Span<char16>((char16*)regData.Ptr, regData.Length / 2);
if ((span.Length > 0) && (span[span.Length - 1] == 0))
span.RemoveFromEnd(1);
outData.Append(span);
}
}).IgnoreError();
if (!gotData)
return .Err;
return .Ok;
}
public Result<void> GetValueT<T>(StringView name, ref T data)
{
bool gotData = false;
int sizeofT = sizeof(T);
GetValue(name, scope [&] (regType, regData) =>
{
if ((regType == Windows.REG_BINARY) && (regData.Length == sizeofT))
{
Internal.MemCpy(&data, regData.Ptr, sizeofT);
gotData = true;
}
}).IgnoreError();
if (!gotData)
return .Err;
return .Ok;
}
public Result<Variant> EnumValue(int idx, String outName)
{
char16[2048] nameBuffer;
uint8[4096] buffer;
char16* namePtr = &nameBuffer;
uint8* bufPtr = &buffer;
uint32 nameSize = sizeof(decltype(nameBuffer));
uint32 bufSize = sizeof(decltype(buffer));
defer
{
if (bufPtr != &buffer)
delete bufPtr;
if (namePtr != &nameBuffer)
delete namePtr;
}
while (true)
{
uint32 regType = 0;
uint32 newNameSize = (.)nameSize;
uint32 newBufSize = (.)bufSize;
int ret = Windows.RegEnumValueW(this, (.)idx, namePtr, &newNameSize, null, &regType, bufPtr, &newBufSize);
if (ret == 0)
break;
if (ret != ERROR_MORE_DATA)
return .Err;
if (newNameSize > nameSize)
{
nameSize = newNameSize;
let newBuf = new uint8*[(.)nameSize]*;
if (namePtr != &nameBuffer)
delete namePtr;
namePtr = (char16*)newBuf;
}
if (newBufSize > bufSize)
{
bufSize = newBufSize;
let newBuf = new uint8[(.)bufSize]*;
if (bufPtr != &buffer)
delete bufPtr;
bufPtr = newBuf;
}
}
Runtime.NotImplemented();
//return Variant.Create<int>(1234);
}
public Result<void> SetValue(StringView name, uint32 val)
{
var val;
let result = Windows.RegSetValueExA(this, name.ToScopeCStr!(), 0, Windows.REG_DWORD, &val, 4);
if (result != 0)
return .Err;
return .Ok;
}
public Result<void> SetValue(StringView name, StringView strValue)
{
let result = Windows.RegSetValueExA(this, name.ToScopeCStr!(), 0, Windows.REG_SZ, strValue.ToScopeCStr!(), (uint32)strValue.Length + 1);
if (result != 0)
return .Err;
return .Ok;
}
public Result<void> SetValueExpand(StringView name, StringView strValue)
{
let result = Windows.RegSetValueExA(this, name.ToScopeCStr!(), 0, Windows.REG_EXPAND_SZ, strValue.ToScopeCStr!(), (uint32)strValue.Length + 1);
if (result != 0)
return .Err;
return .Ok;
}
}
public struct HWnd : int
{
public const HWnd Broadcast = (.)0xFFFF;
}
public struct HModule : int
{
public bool IsInvalid
{
get
{
return ((int)this == (int)(-1)) || ((int)this == (int)0);
}
}
}
public struct HInstance : HModule
{
}
public struct FindHandle : int
{
public const FindHandle InvalidHandle = (FindHandle)-1;
public const FindHandle NullHandle = (FindHandle)+0;
public bool IsInvalid
{
get
{
return ((int)this == (int)(-1)) || ((int)this == (int)0);
}
}
public void Close()
{
Windows.FindClose(this);
}
}
public struct IntBool : int32
{
public static implicit operator IntBool(bool value)
{
return (IntBool)(value ? 1 : 0);
}
public static implicit operator bool(IntBool value)
{
return value != 0;
}
}
public struct FileHandle : Handle
{
public new const FileHandle InvalidHandle = (FileHandle)-1;
}
public struct EventHandle : Handle
{
}
public struct ProcessHandle : Handle
{
}
public struct IOCompletionHandle : Handle
{
public new const IOCompletionHandle NullHandle = (IOCompletionHandle)+0;
}
[CRepr]
public struct FileNotifyInformation
{
public int32 mNextEntryOffset;
public int32 mAction;
public int32 mFileNameLength;
public uint16 mFileName;
}
[CRepr]
public struct Overlapped
{
public int mInternal;
public int mInternalHigh;
public uint32 mOffset;
public uint32 mOffsetHigh;
public Handle mHEvent;
}
[CRepr]
public struct ShellExecuteInfo
{
public uint32 mSize = (uint32)sizeof(ShellExecuteInfo);
public uint32 mMask;
public Handle mHWnd;
public char8* mVerb;
public char8* mFile;
public char8* mParameters;
public char8* mDirectory;
public int32 mShow;
public Handle mInstApp;
public void* mIDList;
public char8* mClass;
public Handle mHKeyClass;
public uint32 mHotKey;
public Handle mMonitorOrIcon;
public ProcessHandle mProcess;
}
[CRepr]
public struct StartupInfo
{
public int32 mCb = (int32)sizeof(StartupInfo);
public char8* mReserved;
public char8* mDesktop;
public char8* mTitle;
public int32 mX;
public int32 mY;
public int32 mXSize;
public int32 mYSize;
public int32 mXCountChars;
public int32 mYCountChars;
public int32 mFillAttribute;
public int32 mFlags;
public int16 mShowWindow;
public int16 mReserved2;
public uint8* mReserved3;
public FileHandle mStdInput;
public FileHandle mStdOutput;
public FileHandle mStdError;
}
[CRepr]
public struct ProcessInformation
{
public ProcessHandle mProcess;
public Handle mThread;
public int32 mProcessId;
public int32 mThreadId;
}
[CRepr]
public struct SystemTime
{
public uint16 mYear;
public uint16 mMonth;
public uint16 mDayOfWeek;
public uint16 mDay;
public uint16 mHour;
public uint16 mMinute;
public uint16 mSecond;
public uint16 mMilliseconds;
}
[CRepr]
public struct TimeZoneInformation
{
public int32 mBias;
public char16[32] mStandardName;
public SystemTime mStandardDate;
public int32 mStandardBias;
public char16[32] mDaylightName;
public SystemTime mDaylightDate;
public int32 mDaylightBias;
public this()
{
this = default;
}
public this(DynamicTimeZoneInformation dtzi)
{
mBias = dtzi.mBias;
mStandardName = dtzi.mStandardName;
mStandardDate = dtzi.mStandardDate;
mStandardBias = dtzi.mStandardBias;
mDaylightName = dtzi.mDaylightName;
mDaylightDate = dtzi.mDaylightDate;
mDaylightBias = dtzi.mDaylightBias;
}
}
[CRepr]
public struct RegistryTimeZoneInformation
{
public int32 mBias;
public int32 mStandardBias;
public int32 mDaylightBias;
public SystemTime mStandardDate;
public SystemTime mDaylightDate;
public this()
{
this = default;
}
public this(TimeZoneInformation tzi)
{
mBias = tzi.mBias;
mStandardDate = tzi.mStandardDate;
mStandardBias = tzi.mStandardBias;
mDaylightDate = tzi.mDaylightDate;
mDaylightBias = tzi.mDaylightBias;
}
}
[CRepr]
public struct DynamicTimeZoneInformation
{
public int32 mBias;
public char16[32] mStandardName;
public SystemTime mStandardDate;
public int32 mStandardBias;
public char16[32] mDaylightName;
public SystemTime mDaylightDate;
public int32 mDaylightBias;
public char16[128] mTimeZoneKeyName;
public IntBool mDynamicDaylightTimeDisabled;
}
public struct Int64_Rev
{
public int32 mHigh;
public int32 mLow;
public int64 Value
{
get
{
return ((int64)mHigh<<32) | mLow;
}
set mut
{
mLow = (int32)value;
mHigh = (int32)(value >> 32);
}
}
}
[CRepr, Packed]
public struct FileAttributeData
{
public int32 mFileAttributes;
public uint64 mCreationTime;
public uint64 mLastAccessTime;
public uint64 mLastWriteTime;
public Int64_Rev mFileSize;
public void PopulateFrom(NativeFindDataA findData) mut
{
// Copy the information to data
mFileAttributes = findData.mFileAttributes;
mCreationTime = findData.mCreationTime;
mLastAccessTime = findData.mLastAccessTime;
mLastWriteTime = findData.mLastWriteTime;
mFileSize = findData.mFileSize;
}
public void PopulateFrom(NativeFindData findData) mut
{
// Copy the information to data
mFileAttributes = findData.mFileAttributes;
mCreationTime = findData.mCreationTime;
mLastAccessTime = findData.mLastAccessTime;
mLastWriteTime = findData.mLastWriteTime;
mFileSize = findData.mFileSize;
}
}
[CRepr, Packed]
public struct NativeFindDataA
{
public int32 mFileAttributes;
public uint64 mCreationTime;
public uint64 mLastAccessTime;
public uint64 mLastWriteTime;
public Int64_Rev mFileSize;
public int32 mReserved0;
public int32 mReserved1;
public char8[260] mFileName;
public char8[14] mAlternateFileName;
}
[CRepr, Packed]
public struct NativeFindData
{
public int32 mFileAttributes;
public uint64 mCreationTime;
public uint64 mLastAccessTime;
public uint64 mLastWriteTime;
public Int64_Rev mFileSize;
public int32 mReserved0;
public int32 mReserved1;
public char16[260] mFileName;
public char16[14] mAlternateFileName;
}
public const int32 S_OK = 0;
public const int32 MAX_PATH = 260;
public const int32 SEE_MASK_DEFAULT = 0;
public const int32 SEE_MASK_NOCLOSEPROCESS = 0x40;
public const int32 SEE_MASK_FLAG_NO_UI = 0x400;
public const int32 SEE_MASK_FLAG_DDEWAIT = 0x100;
public const int32 FILE_ATTRIBUTE_READONLY = 0x00000001;
public const int32 FILE_ATTRIBUTE_DIRECTORY = 0x00000010;
public const int32 FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400;
public const int32 GENERIC_READ = (.)0x80000000;
public const int32 GENERIC_WRITE = 0x40000000;
public const int32 GENERIC_EXECUTE = 0x20000000;
public const int32 GENERIC_ALL = 0x10000000;
public const int32 SW_HIDE = 0;
public const int32 SW_MAXIMIZE = 3;
public const int32 SW_MINIMIZE = 6;
public const int32 SW_RESTORE = 9;
public const int32 SW_SHOW = 5;
public const int32 SW_SHOWDEFAULT = 10;
public const int32 SW_SHOWMAXIMIZED = 3;
public const int32 SW_SHOWMINIMIZED = 2;
public const int32 SW_SHOWMINNOACTIVE = 7;
public const int32 SW_SHOWNA = 8;
public const int32 SW_SHOWNOACTIVATE = 4;
public const int32 SW_SHOWNORMAL = 1;
public const int32 GW_OWNER = 4;
public const int32 STD_INPUT_HANDLE = -10;
public const int32 STD_OUTPUT_HANDLE = -11;
public const int32 STD_ERROR_HANDLE = -12;
public const int32 CREATE_SUSPENDED = 0x00000004;
public const int32 CREATE_NO_WINDOW = 0x08000000;
// From WinBase.h
public const int32 FILE_TYPE_DISK = 0x0001;
public const int32 FILE_TYPE_CHAR = 0x0002;
public const int32 FILE_TYPE_PIPE = 0x0003;
public const int32 FILE_READ_DATA = (0x0001);
public const int32 FILE_WRITE_DATA = (0x0002);
public const int32 FILE_LIST_DIRECTORY = (0x0001);
public const int32 FILE_SHARE_READ = 0x00000001;
public const int32 FILE_SHARE_WRITE = 0x00000002;
public const int32 FILE_SHARE_DELETE = 0x00000004;
public const int32 FILE_BEGIN = 0;
public const int32 FILE_CURRENT = 1;
public const int32 FILE_END = 2;
public const int32 FILE_FLAG_OVERLAPPED = 0x40000000;
public const int32 FILE_FLAG_BACKUP_SEMANTICS = 0x02000000;
public const int32 FILE_FLAG_FIRST_PIPE_INSTANCE = 0x00080000;
public const int32 FILE_FLAG_WRITE_THROUGH = (int32)0x80000000;
public const int32 DUPLICATE_CLOSE_SOURCE = 0x1;
public const int32 DUPLICATE_SAME_ACCESS = 0x2;
public const int32 WAIT_ABANDONED = 0x80;
public const int32 WAIT_OBJECT_0 = 0;
public const int32 WAIT_TIMEOUT = 0x102;
public const int32 WAIT_FAILED = -1;
public const int32 STARTF_USESTDHANDLES = 0x00000100;
public const int32 ERROR_BAD_EXE_FORMAT = 193;
public const int32 ERROR_EXE_MACHINE_TYPE_MISMATCH = 216;
public const int32 ERROR_ABANDONED_WAIT_0 = 735;
public const int32 ERROR_PIPE_CONNECTED = 535;
public const int32 ERROR_BROKEN_PIPE = 109;
public const int32 ERROR_MORE_DATA = 234;
public const int32 ERROR_NO_DATA = 232;
public const int32 ERROR_NO_MORE_ITEMS = 259;
public const int32 PROCESS_QUERY_INFORMATION = 0x0400;
public const int32 STATUS_PENDING = 0x00000103;
public const int32 STILL_ACTIVE = STATUS_PENDING;
public const int32 SYNCHRONIZE = 0x00100000;
public const int32 SEM_FAILCRITICALERRORS = 1;
public const int32 ERROR_SUCCESS = 0x0;
public const int32 ERROR_INVALID_FUNCTION = 0x1;
public const int32 ERROR_FILE_NOT_FOUND = 0x2;
public const int32 ERROR_PATH_NOT_FOUND = 0x3;
public const int32 ERROR_ACCESS_DENIED = 0x5;
public const int32 ERROR_INVALID_HANDLE = 0x6;
public const int32 ERROR_NOT_ENOUGH_MEMORY = 0x8;
public const int32 ERROR_INVALID_DATA = 0xd;
public const int32 ERROR_INVALID_DRIVE = 0xf;
public const int32 ERROR_NO_MORE_FILES = 0x12;
public const int32 ERROR_NOT_READY = 0x15;
public const int32 ERROR_SHARING_VIOLATION = 32;
public const int32 ERROR_ALREADY_EXISTS = 0xB7;
public const int32 GetFileExInfoStandard = 0;
public const int32 GWL_WNDPROC = (-4);
public const int32 GWL_HWNDPARENT = (-8);
public const int32 GWL_STYLE = (-16);
public const int32 GWL_EXSTYLE = (-20);
public const int32 GWL_ID = (-12);
public const int32 GW_HWNDFIRST = 0;
public const int32 GW_HWNDLAST = 1;
public const int32 GW_HWNDNEXT = 2;
public const int32 GW_HWNDPREV = 3;
public const int32 OFN_READONLY = 0x00000001;
public const int32 OFN_OVERWRITEPROMPT = 0x00000002;
public const int32 OFN_HIDEREADONLY = 0x00000004;
public const int32 OFN_NOCHANGEDIR = 0x00000008;
public const int32 OFN_SHOWHELP = 0x00000010;
public const int32 OFN_ENABLEHOOK = 0x00000020;
public const int32 OFN_NOVALIDATE = 0x00000100;
public const int32 OFN_ALLOWMULTISELECT = 0x00000200;
public const int32 OFN_PATHMUSTEXIST = 0x00000800;
public const int32 OFN_FILEMUSTEXIST = 0x00001000;
public const int32 OFN_CREATEPROMPT = 0x00002000;
public const int32 OFN_EXPLORER = 0x00080000;
public const int32 OFN_NODEREFERENCELINKS = 0x00100000;
public const int32 OFN_ENABLESIZING = 0x00800000;
public const int32 OFN_USESHELLITEM = 0x01000000;
public const int32 CSIDL_DESKTOP = 0x0000;
public const int32 CSIDL_PROGRAMS = 0x0002; // Start Menu\Programs
public const int32 CSIDL_PERSONAL = 0x0005; // My Documents
public const int32 CSIDL_STARTUP = 0x0007; // Start Menu\Programs\Startup
public const int32 CSIDL_LOCAL_APPDATA = 0x001c;// <user name>\Local Settings\Applicaiton Data (non roaming)
public const int32 CSIDL_COMMON_APPDATA = 0x0023; // All Users\Application Data
public const int32 CSIDL_PROGRAM_FILES = 0x0026; // C:\Program Files
public const int32 WM_CLOSE = 0x0010;
public const int32 WM_DESTROY = 0x0002;
public const int32 WM_INITDIALOG = 0x0110;
public const int32 WM_SETFOCUS = 0x0007;
public const int32 WM_USER = 0x0400;
public const int32 WM_KEYDOWN = 0x0100;
public const int32 WM_KEYUP = 0x0101;
public const int32 WM_CHAR = 0x0102;
public const int32 WM_SETTINGCHANGE = 0x001A;
public const int32 BFFM_INITIALIZED = 1;
public const int32 BFFM_SELCHANGED = 2;
public const int32 BFFM_SETSELECTIONA = 0x400 + 102;
public const int32 BFFM_SETSELECTIONW = 0x400 + 103;
public const int32 BFFM_ENABLEOK = 0x400 + 101;
public const int32 STANDARD_RIGHTS_REQUIRED = 0x000F0000;
public const int32 PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF;
public const uint32 STATUS_INFO_LENGTH_MISMATCH = 0xC0000004;
public const int32 PIPE_ACCESS_DUPLEX = 0x00000003;
public const int32 PIPE_ACCESS_INBOUND = 0x00000001;
public const int32 PIPE_ACCESS_OUTBOUND = 0x00000002;
public const int32 WRITE_DAC = 0x00040000;
public const int32 WRITE_OWNER = 0x00080000;
public const int32 ACCESS_SYSTEM_SECURITY = 0x01000000;
public const int32 PIPE_TYPE_BYTE = 0x00000000;
public const int32 PIPE_TYPE_MESSAGE = 0x00000004;
public const int32 PIPE_READMODE_BYTE = 0x00000000;
public const int32 PIPE_READMODE_MESSAGE = 0x00000002;
public const int32 PIPE_WAIT = 0x00000000;
public const int32 PIPE_NOWAIT = 0x00000001;
public const int32 PIPE_ACCEPT_REMOTE_CLIENTS = 0x00000000;
public const int32 PIPE_REJECT_REMOTE_CLIENTS = 0x00000008;
public const int32 PIPE_UNLIMITED_INSTANCES = 255;
public const int32 MEM_COMMIT = 0x1000;
public const int32 MEM_RESERVE = 0x2000;
public const int32 MEM_DECOMMIT = 0x4000;
public const int32 MEM_RELEASE = 0x8000;
public const int32 PAGE_NOACCESS = 0x01;
public const int32 PAGE_READONLY = 0x02;
public const int32 PAGE_READWRITE = 0x04;
public const int32 PAGE_WRITECOPY = 0x08;
public const int32 KEY_EXECUTE = (0x20019);
public const int32 KEY_READ = (0x20019);
public const int32 KEY_WRITE = (0x20006);
public const int32 KEY_ALL_ACCESS = (0xf003f);
public const int32 KEY_QUERY_VALUE = (0x0001);
public const int32 KEY_SET_VALUE = (0x0002);
public const int32 KEY_CREATE_SUB_KEY = (0x0004);
public const int32 KEY_ENUMERATE_SUB_KEYS = (0x0008);
public const int32 KEY_NOTIFY = (0x0010);
public const int32 KEY_CREATE_LINK = (0x0020);
public const int32 KEY_WOW64_32KEY = (0x0200);
public const int32 KEY_WOW64_64KEY = (0x0100);
public const int32 KEY_WOW64_RES = (0x0300);
public const HKey HKEY_CLASSES_ROOT = (HKey)0x80000000;
public const HKey HKEY_CURRENT_USER = (HKey)0x80000001;
public const HKey HKEY_LOCAL_MACHINE = (HKey)0x80000002;
public const HKey HKEY_USERS = (HKey)0x80000003;
public const HKey HKEY_PERFORMANCE_DATA = (HKey)0x80000004;
public const HKey HKEY_PERFORMANCE_TEXT = (HKey)0x80000050;
public const HKey HKEY_PERFORMANCE_NLSTEXT = (HKey)0x80000060;
public const HKey HKEY_CURRENT_CONFIG = (HKey)0x80000005;
public const HKey HKEY_DYN_DATA = (HKey)0x80000006;
public const HKey HKEY_CURRENT_USER_LOCAL_SETTINGS = (HKey)0x80000007;
public const int32 NtQueryProcessBasicInfo = 0;
public const int32 NtQuerySystemProcessInformation = 5;
public const int32 TIME_ZONE_ID_INVALID = -1;
public const int32 OBJECT_INHERIT_ACE = 1;
public const int32 CONTAINER_INHERIT_ACE = 2;
public const int32 NO_PROPAGATE_INHERIT_ACE = 4;
public const int32 INHERIT_ONLY_ACE = 8;
public const int32 INHERITED_ACE = 0x10;
public const int32 VALID_INHERIT_FLAGS = 0x1F;
public const int32 SMTO_NORMAL = 0x0000;
public const int32 SMTO_BLOCK = 0x0001;
public const int32 SMTO_ABORTIFHUNG = 0x0002;
public const int32 VS_FF_DEBUG = 0x00000001;
public const int32 VS_FF_PRERELEASE = 0x00000002;
public const int32 VS_FF_PATCHED = 0x00000004;
public const int32 VS_FF_PRIVATEBUILD = 0x00000008;
public const int32 VS_FF_INFOINFERRED = 0x00000010;
public const int32 VS_FF_SPECIALBUILD = 0x00000020L;
[CRepr]
public struct VS_FIXEDFILEINFO
{
public uint32 dwSignature; /* e.g. 0xfeef04bd */
public uint32 dwStrucVersion; /* e.g. 0x00000042 = "0.42" */
public uint32 dwFileVersionMS; /* e.g. 0x00030075 = "3.75" */
public uint32 dwFileVersionLS; /* e.g. 0x00000031 = "0.31" */
public uint32 dwProductVersionMS; /* e.g. 0x00030010 = "3.10" */
public uint32 dwProductVersionLS; /* e.g. 0x00000031 = "0.31" */
public uint32 dwFileFlagsMask; /* = 0x3F for version "0.42" */
public uint32 dwFileFlags; /* e.g. VFF_DEBUG | VFF_PRERELEASE */
public uint32 dwFileOS; /* e.g. VOS_DOS_WINDOWS16 */
public uint32 dwFileType; /* e.g. VFT_DRIVER */
public uint32 dwFileSubtype; /* e.g. VFT2_DRV_KEYBOARD */
public uint32 dwFileDateMS; /* e.g. 0 */
public uint32 dwFileDateLS; /* e.g. 0 */
}
enum SECURITY_INFORMATION : int32
{
DACL_SECURITY_INFORMATION = 4
}
enum SE_OBJECT_TYPE : int32
{
SE_UNKNOWN_OBJECT_TYPE,
SE_FILE_OBJECT,
SE_SERVICE,
SE_PRINTER,
SE_REGISTRY_KEY,
SE_LMSHARE,
SE_KERNEL_OBJECT,
SE_WINDOW_OBJECT,
SE_DS_OBJECT,
SE_DS_OBJECT_ALL,
SE_PROVIDER_DEFINED_OBJECT,
SE_WMIGUID_OBJECT,
SE_REGISTRY_WOW64_32KEY,
SE_REGISTRY_WOW64_64KEY
}
public struct SID;
public struct SECURITY_DESCRIPTOR;
[CRepr]
public struct ACL
{
uint8 AclRevision;
uint8 Sbz1;
uint16 AclSize;
uint16 AceCount;
uint16 Sbz2;
}
public enum ACCESS_MODE : int32
{
NOT_USED_ACCESS = 0,
GRANT_ACCESS,
SET_ACCESS,
DENY_ACCESS,
REVOKE_ACCESS,
SET_AUDIT_SUCCESS,
SET_AUDIT_FAILURE
}
public enum MULTIPLE_TRUSTEE_OPERATION : int32
{
NO_MULTIPLE_TRUSTEE,
TRUSTEE_IS_IMPERSONATE,
}
public enum TRUSTEE_FORM : int32
{
TRUSTEE_IS_SID,
TRUSTEE_IS_NAME,
TRUSTEE_BAD_FORM,
TRUSTEE_IS_OBJECTS_AND_SID,
TRUSTEE_IS_OBJECTS_AND_NAME
}
public enum TRUSTEE_TYPE : int32
{
TRUSTEE_IS_UNKNOWN,
TRUSTEE_IS_USER,
TRUSTEE_IS_GROUP,
TRUSTEE_IS_DOMAIN,
TRUSTEE_IS_ALIAS,
TRUSTEE_IS_WELL_KNOWN_GROUP,
TRUSTEE_IS_DELETED,
TRUSTEE_IS_INVALID,
TRUSTEE_IS_COMPUTER
}
[CRepr]
public struct TRUSTEE_W
{
TRUSTEE_W* pMultipleTrustee;
MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
TRUSTEE_FORM TrusteeForm;
TRUSTEE_TYPE TrusteeType;
char16* ptstrName;
}
[CRepr]
public struct EXPLICIT_ACCESS_W
{
uint32 grfAccessPermissions;
ACCESS_MODE grfAccessMode;
uint32 grfInheritance;
TRUSTEE_W Trustee;
}
struct COM_IFileDialogEvents : Windows.COM_IUnknown
{
struct FDE_SHAREVIOLATION_RESPONSE;
struct FDE_OVERWRITE_RESPONSE;
public struct VTable : Windows.COM_IUnknown.VTable
{
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialogEvents* self, COM_IFileDialog* fileDialog) OnFileOk;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialogEvents* self, COM_IFileDialog* fileDialog, COM_IShellItem* psiFolder) OnFolderChanging;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialogEvents* self, COM_IFileDialog* fileDialog) OnFolderChange;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialogEvents* self, COM_IFileDialog* fileDialog) OnSelectionChange;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialogEvents* self, COM_IFileDialog* fileDialog, FDE_SHAREVIOLATION_RESPONSE* pResponse) OnShareViolation;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialogEvents* self, COM_IFileDialog* fileDialog) OnTypeChange;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialogEvents* self, COM_IFileDialog* fileDialog, COM_IShellItem* shellItem, FDE_OVERWRITE_RESPONSE* response) OnOverwrite;
}
}
public struct COM_IShellItem : Windows.COM_IUnknown
{
public static Guid sIID = .(0x43826d1e, 0xe718, 0x42ee, 0xbc, 0x55, 0xa1, 0xe2, 0x61, 0xc3, 0x7b, 0xfe);
public enum SIGDN : uint32
{
NORMALDISPLAY = 0x00000000, // SHGDN_NORMAL
PARENTRELATIVEPARSING = 0x80018001, // SHGDN_INFOLDER | SHGDN_FORPARSING
DESKTOPABSOLUTEPARSING = 0x80028000, // SHGDN_FORPARSING
PARENTRELATIVEEDITING = 0x80031001, // SHGDN_INFOLDER | SHGDN_FOREDITING
DESKTOPABSOLUTEEDITING = 0x8004c000, // SHGDN_FORPARSING | SHGDN_FORADDRESSBAR
FILESYSPATH = 0x80058000, // SHGDN_FORPARSING
URL = 0x80068000, // SHGDN_FORPARSING
PARENTRELATIVEFORADDRESSBAR = 0x8007c001, // SHGDN_INFOLDER | SHGDN_FORPARSING | SHGDN_FORADDRESSBAR
PARENTRELATIVE = 0x80080001 // SHGDN_INFOLDER
}
public struct VTable : Windows.COM_IUnknown.VTable
{
public function [CallingConvention(.Stdcall)] HResult(COM_IShellItem* self, void* pbc, ref Guid bhid, ref Guid riid, void** ppv) BindToHandler;
public function [CallingConvention(.Stdcall)] HResult(COM_IShellItem* self, out COM_IShellItem* ppsi) GetParent;
public function [CallingConvention(.Stdcall)] HResult(COM_IShellItem* self, SIGDN sigdnName, out char16* ppszName) GetDisplayName;
public function [CallingConvention(.Stdcall)] HResult(COM_IShellItem* self, uint sfgaoMask, out uint psfgaoAttribs) GetAttributes;
public function [CallingConvention(.Stdcall)] HResult(COM_IShellItem* self, COM_IShellItem* psi, uint32 hint, out int32 piOrder) Compare;
}
public new VTable* VT
{
get
{
return (.)mVT;
}
}
}
public struct COM_IShellItemArray : Windows.COM_IUnknown
{
public enum GETPROPERTYSTOREFLAGS : uint
{
DEFAULT = 0x00000000,
HANDLERPROPERTIESONLY = 0x00000001,
READWRITE = 0x00000002,
TEMPORARY = 0x00000004,
FASTPROPERTIESONLY = 0x00000008,
OPENSLOWITEM = 0x00000010,
DELAYCREATION = 0x00000020,
BESTEFFORT = 0x00000040,
NO_OPLOCK = 0x00000080,
PREFERQUERYPROPERTIES = 0x00000100,
EXTRINSICPROPERTIES = 0x00000200,
EXTRINSICPROPERTIESONLY = 0x00000400,
VOLATILEPROPERTIES = 0x00000800,
VOLATILEPROPERTIESONLY = 0x00001000,
MASK_VALID = 0x00001FFF
}
[AllowDuplicates]
public enum SIATTRIBFLAGS : uint
{
AND = 0x1,
OR = 0x2,
APPCOMPAT = 0x3,
MASK = 0x3,
ALLITEMS = 0x4000
}
public struct PROPERTYKEY;
public static Guid sIID = .(0xB63EA76D, 0x1F85, 0x456F, 0xA1, 0x9C, 0x48, 0x15, 0x9E, 0xFA, 0x85, 0x8B);
public struct VTable : Windows.COM_IUnknown.VTable
{
public function [CallingConvention(.Stdcall)] HResult(COM_IShellItemArray* self, void* pbc, ref Guid rbhid, ref Guid riid, out void* ppvOut) BindToHandler;
public function [CallingConvention(.Stdcall)] HResult(COM_IShellItemArray* self, GETPROPERTYSTOREFLAGS flags, ref Guid riid, out void* ppv) GetPropertyStore;
public function [CallingConvention(.Stdcall)] HResult(COM_IShellItemArray* self, ref PROPERTYKEY keyType, ref Guid riid, out void* ppv) GetPropertyDescriptionList;
public function [CallingConvention(.Stdcall)] HResult(COM_IShellItemArray* self, SIATTRIBFLAGS dwAttribFlags, uint32 sfgaoMask, out uint32 psfgaoAttribs) GetAttributes;
public function [CallingConvention(.Stdcall)] HResult(COM_IShellItemArray* self, out uint32 pdwNumItems) GetCount;
public function [CallingConvention(.Stdcall)] HResult(COM_IShellItemArray* self, uint32 dwIndex, out COM_IShellItem* ppsi) GetItemAt;
public function [CallingConvention(.Stdcall)] HResult(COM_IShellItemArray* self, out void* ppenumShellItems) EnumItems;
}
public new VTable* VT
{
get
{
return (.)mVT;
}
}
}
public struct COMDLG_FILTERSPEC
{
public char16* pszName;
public char16* pszSpec;
}
enum FDAP : uint32
{
FDAP_BOTTOM = 0x00000000,
FDAP_TOP = 0x00000001,
}
public struct COM_IFileDialog : Windows.COM_IUnknown
{
public static Guid sIID = .(0x42f85136, 0xdb7e, 0x439c, 0x85, 0xf1, 0xe4, 0x07, 0x5d, 0x13, 0x5f, 0xc8);
public static Guid sCLSID = .(0xdc1c5a9c, 0xe88a, 0x4dde, 0xa5, 0xa1, 0x60, 0xf8, 0x2a, 0x20, 0xae, 0xf7);
///s
public enum FOS : uint32
{
OVERWRITEPROMPT = 0x00000002,
STRICTFILETYPES = 0x00000004,
NOCHANGEDIR = 0x00000008,
PICKFOLDERS = 0x00000020,
FORCEFILESYSTEM = 0x00000040,
ALLNONSTORAGEITEMS = 0x00000080,
NOVALIDATE = 0x00000100,
ALLOWMULTISELECT = 0x00000200,
PATHMUSTEXIST = 0x00000800,
FILEMUSTEXIST = 0x00001000,
CREATEPROMPT = 0x00002000,
SHAREAWARE = 0x00004000,
NOREADONLYRETURN = 0x00008000,
NOTESTFILECREATE = 0x00010000,
HIDEMRUPLACES = 0x00020000,
HIDEPINNEDPLACES = 0x00040000,
NODEREFERENCELINKS = 0x00100000,
DONTADDTORECENT = 0x02000000,
FORCESHOWHIDDEN = 0x10000000,
DEFAULTNOMINIMODE = 0x20000000
}
public struct VTable : Windows.COM_IUnknown.VTable
{
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, Windows.HWnd parent) Show;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, uint cFileTypes, COMDLG_FILTERSPEC* rgFilterSpec) SetFileTypes;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, uint iFileType) SetFileTypeIndex;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, out uint piFileType) GetFileTypeIndex;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, COM_IFileDialogEvents* pfde, out uint pdwCookie) Advise;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, uint dwCookie) Unadvise;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, FOS fos) SetOptions;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, out FOS pfos) GetOptions;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, COM_IShellItem* psi) SetDefaultFolder;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, COM_IShellItem* psi) SetFolder;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, out COM_IShellItem* ppsi) GetFolder;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, out COM_IShellItem* ppsi) GetCurrentSelection;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, char16* pszName) SetFileName;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, out char16* pszName) GetFileName;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, char16* pszTitle) SetTitle;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, char16* pszText) SetOkButtonLabel;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, char16* pszLabel) SetFileNameLabel;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, out COM_IShellItem* ppsi) GetResult;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, COM_IShellItem* psi, FDAP fdap) AddPlace;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, char16* pszDefaultExtension) SetDefaultExtension;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, int hr) Close;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, ref Guid guid) SetClientGuid;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self) ClearClientData;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileDialog* self, void* pFilter) SetFilter;
}
public new VTable* VT
{
get
{
return (.)mVT;
}
}
}
public struct COM_IFileSaveDialog : COM_IFileDialog
{
public static new Guid sIID = .(0x84BCCD23, 0x5FDE, 0x4CDB, 0xAE, 0xA4, 0xAF, 0x64, 0xB8, 0x3D, 0x78, 0xAB);
public static new Guid sCLSID = .(0xC0B4E2F3, 0xBA21, 0x4773, 0x8D, 0xBA, 0x33, 0x5E, 0xC9, 0x46, 0xEB, 0x8B);
}
public struct COM_IFileOpenDialog : COM_IFileDialog
{
public static new Guid sIID = .(0xD57C7288, 0xD4AD, 0x4768, 0xBE, 0x02, 0x9D, 0x96, 0x95, 0x32, 0xD9, 0x60);
public struct VTable : COM_IFileDialog.VTable
{
public function [CallingConvention(.Stdcall)] HResult(COM_IFileOpenDialog* self, out COM_IShellItemArray* ppenum) GetResults;
public function [CallingConvention(.Stdcall)] HResult(COM_IFileOpenDialog* self, out COM_IShellItemArray* ppsai) GetSelectedItems;
}
public new VTable* VT
{
get
{
return (.)mVT;
}
}
}
[Import("version.lib"), CLink, CallingConvention(.Stdcall)]
public static extern IntBool GetFileVersionInfoW(char16* lptstrFilename, uint32 dwHandle, uint32 dwLen, void* lpData);
[Import("version.lib"), CLink, CallingConvention(.Stdcall)]
public static extern uint32 GetFileVersionInfoSizeW(char16* lptstrFilename, out uint32 lpdwHandle);
[Import("version.lib"), CLink, CallingConvention(.Stdcall)]
public static extern IntBool VerQueryValueW(void* pBlock, char16* lpSubBlock, ref void* lplpBuffer, out int32 puLen);
[Import("version.lib"), CLink, CallingConvention(.Stdcall)]
public static extern uint32 VerLanguageNameW(uint32 wLang, char16* szLang, uint32 cchLang);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern uint32 GetNamedSecurityInfoW(
char16* pObjectName,
SE_OBJECT_TYPE ObjectType,
SECURITY_INFORMATION SecurityInfo,
SID** ppsidOwner,
SID** ppsidGroup,
ACL** ppDacl,
ACL** ppSacl,
SECURITY_DESCRIPTOR* *ppSecurityDescriptor
);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern void BuildExplicitAccessWithNameW(
EXPLICIT_ACCESS_W* pExplicitAccess,
char16* pTrusteeName,
uint32 AccessPermissions,
ACCESS_MODE AccessMode,
uint32 Inheritance
);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern uint32 SetEntriesInAclW(
uint32 cCountOfExplicitEntries,
EXPLICIT_ACCESS_W* pListOfExplicitEntries,
ACL* OldAcl,
ACL** NewAcl
);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern uint32 SetNamedSecurityInfoW(
char16* pObjectName,
SE_OBJECT_TYPE ObjectType,
SECURITY_INFORMATION SecurityInfo,
SID* psidOwner,
SID* psidGroup,
ACL* pDacl,
ACL* pSacl
);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern uint32 GetExplicitEntriesFromAclW(
ACL* pacl,
uint32* pcCountOfExplicitEntries,
EXPLICIT_ACCESS_W** pListOfExplicitEntries
);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern uint32 GetEffectiveRightsFromAclW(
ACL* pacl,
TRUSTEE_W* pTrustee,
uint32* pAccessRights
);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern IntBool LookupAccountSidW(
char16* lpSystemName,
SID* Sid,
char16* Name,
uint32* cchName,
char16* ReferencedDomainName,
uint32* cchReferencedDomainName,
int* peUse
);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern IntBool ConvertStringSidToSidW(
char16* StringSid,
SID** Sid
);
[CLink, CallingConvention(.Stdcall)]
public static extern void LocalFree(void* ptr);
[CLink, CallingConvention(.Stdcall)]
public static extern int32 GetTimeZoneInformation(out TimeZoneInformation dynamicTimeZoneInformation);
[CLink, CallingConvention(.Stdcall)]
public static extern int32 GetDynamicTimeZoneInformation(out DynamicTimeZoneInformation dynamicTimeZoneInformation);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 RegOpenKeyExW(HKey hKey, char16* lpSubKey, uint32 ulOptions, uint32 samDesired, out HKey phkResult);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 RegOpenKeyExA(HKey hKey, char8* lpSubKey, uint32 ulOptions, uint32 samDesired, out HKey phkResult);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 RegCreateKeyExW(HKey hKey, char16* lpSubKey, uint32 reserved, char16* lpClass, uint32 dwOptions, uint32 samDesired,
SecurityAttributes* lpSecurityAttributes, out HKey phkResult, uint32* lpdwDisposition);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 RegCreateKeyExA(HKey hKey, char8* lpSubKey, uint32 reserved, char8* lpClass, uint32 dwOptions, uint32 samDesired,
SecurityAttributes* lpSecurityAttributes, out HKey phkResult, uint32* lpdwDisposition);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 RegCloseKey(HKey hKey);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 RegDeleteKeyW(HKey hKey, char16* lpSubKey);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 RegDeleteKeyA(HKey hKey, char8* lpSubKey);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 RegDeleteValueW(HKey hKey, char16* lpSubKey);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 RegDeleteValueA(HKey hKey, char8* lpSubKey);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 RegQueryValueExW(HKey hKey, char16* lpValueName, uint32* lpReserved, uint32* lpType, void* lpData, uint32* lpcbData);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 RegQueryValueExA(HKey hKey, char8* lpValueName, uint32* lpReserved, uint32* lpType, void* lpData, uint32* lpcbData);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 RegEnumValueW(HKey hKey, int32 dwIndex, char16* lpValueName, uint32* lpcchValueName, uint32* lpReserved, uint32* lpType, void* lpData, uint32* lpcbData);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 RegEnumValueA(HKey hKey, int32 dwIndex, char8* lpValueName, uint32* lpcchValueName, uint32* lpReserved, uint32* lpType, void* lpData, uint32* lpcbData);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 RegGetValueW(HKey hkey, char16* lpSubKey, char16* lpValue, uint32 dwFlags, uint32* pdwType, void* pvData, uint32* pcbData);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 RegGetValueA(HKey hkey, char8* lpSubKey, char8* lpValue, uint32 dwFlags, uint32* pdwType, void* pvData, uint32* pcbData);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 RegSetValueExW(HKey hkey, char16* lpValue, uint32 reserved, uint32 dwType, void* pvData, uint32 cbData);
[Import("advapi32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 RegSetValueExA(HKey hkey, char8* lpValue, uint32 reserved, uint32 dwType, void* pvData, uint32 cbData);
[Import("shell32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 SHGetSpecialFolderLocation(HWnd hwnd, int32 csidl, ref int ppidl);
[Import("shell32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern bool SHGetPathFromIDList(int pidl, char8* path);
[Import("shell32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int SHBrowseForFolder(ref BrowseInfo bi);
[Import("shell32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern COM_IUnknown.HResult SHCreateItemFromParsingName(char16* pszPath, COM_IBindCtx *pbc, Guid riid, void **ppv);
[CLink, CallingConvention(.Stdcall)]
public static extern int32 GetLastError();
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool GetExitCodeProcess(ProcessHandle process, out int32 exitCode);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool GetExitCodeThread(Handle process, out int32 exitCode);
[Import("psapi.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 GetModuleFileNameExW(Handle process, Handle module, char16* filename, int32 size);
[CLink, CallingConvention(.Stdcall)]
public static extern int32 ResumeThread(Handle thread);
[CLink, CallingConvention(.Stdcall)]
public static extern ProcessHandle GetCurrentProcess();
[CLink, CallingConvention(.Stdcall)]
public static extern int32 GetCurrentProcessId();
[CLink, CallingConvention(.Stdcall)]
public static extern ProcessHandle OpenProcess(int32 desiredAccess, IntBool inheritHandle, int32 processId);
[CLink, CallingConvention(.Stdcall)]
public static extern Handle CreateRemoteThread(ProcessHandle process, SecurityAttributes* threadAttributes, int stackSize, void* startAddress, void* parameter, int32 creationFlags, int32* threadId);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool ReadProcessMemory(ProcessHandle process, void* baseAddress, void* buffer, int size, int* numberOfBytesRead);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool WriteProcessMemory(ProcessHandle process, void* baseAddress, void* buffer, int size, int* numberOfBytesWritten);
[CLink, CallingConvention(.Stdcall)]
public static extern void* GetProcAddress(HModule module, char8* procName);
[CLink, CallingConvention(.Stdcall)]
public static extern void* VirtualAllocEx(ProcessHandle process, void* address, int size, int32 allocationType, int32 protect);
[CLink, CallingConvention(.Stdcall)]
public static extern void* VirtualFreeEx(ProcessHandle process, void* address, int size, int32 allocationType);
[CLink, CallingConvention(.Stdcall)]
public static extern FileHandle GetStdHandle(int32 stdHandle);
[CLink, CallingConvention(.Stdcall)]
public static extern Handle ShellExecuteW(Handle hwnd, char16* operation, char16* file, char16* parameters, char16* directory, int32 showCmd);
[CLink, CallingConvention(.Stdcall)]
public static extern Handle ShellExecuteA(Handle hwnd, char8* operation, char8* file, char8* parameters, char8* directory, int32 showCmd);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool ShellExecuteExA(ShellExecuteInfo* shellExecuteInfo);
[CLink, CallingConvention(.Stdcall)]
public static extern void GetStartupInfoA(StartupInfo* startupInfo);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool CreateProcessW(char16* applicationName, char16* commandLine, SecurityAttributes* processAttributes, SecurityAttributes* threadAttributes,
IntBool inheritHandles, int32 creationFlags, void* environment, char16* currentDirectory, StartupInfo* startupInfo, ProcessInformation* processInformation);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool CreateProcessA(char8* applicationName, char8* commandLine, SecurityAttributes* processAttributes, SecurityAttributes* threadAttributes,
IntBool inheritHandles, int32 creationFlags, void* environment, char8* currentDirectory, StartupInfo* startupInfo, ProcessInformation* processInformation);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool TerminateProcess(ProcessHandle process);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool CreatePipe(out Handle readPipe, out Handle writePipe, SecurityAttributes* pipeAttributes, int32 size);
[CLink, CallingConvention(.Stdcall)]
public static extern Handle CreateNamedPipeA(char8* lpName, uint32 dwOpenMode, uint32 dwPipeMode, uint32 nMaxInstances, uint32 nOutBufferSize, uint32 nInBufferSize,
uint32 nDefaultTimeOut, SecurityAttributes* lpSecurityAttributes);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool ConnectNamedPipe(Handle handle, Overlapped* overlapped);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool CallNamedPipeA(char8* name, void* inBuffer, int32 inBufferSize, void* outBuffer, int32 outBufferSize, int32* bytesRead, int32 timeOut);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool DisconnectNamedPipe(Handle handle);
[CLink, CallingConvention(.Stdcall)]
public static extern EventHandle CreateEventA(SecurityAttributes* eventAttribuetes, IntBool manualReset, IntBool initialState, char8* name);
[CLink, CallingConvention(.Stdcall)]
public static extern EventHandle OpenEventA(uint32 dwDesiredAccess, IntBool bInheritHandle, char8* lpName);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool SetEvent(EventHandle eventHandle);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool ResetEvent(EventHandle eventHandle);
[CLink, CallingConvention(.Stdcall)]
public static extern int32 WaitForSingleObject(Handle handle, int32 milliseconds);
[CLink, CallingConvention(.Stdcall)]
public static extern int32 WaitForMultipleObjects(int32 count, Handle* handles, IntBool waitAll, int32 milliseconds);
[CLink, CallingConvention(.Stdcall)]
public static extern IOCompletionHandle CreateIoCompletionPort(FileHandle fileHandle, IOCompletionHandle existingCompletionPort, int completionKey, int32 numberOfConcurrentThreads);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool GetQueuedCompletionStatus(IOCompletionHandle completionPort, out int32 numberOfBytes, out int completionKey, out Overlapped* overlapped, int32 milliseconds);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool PostQueuedCompletionStatus(IOCompletionHandle completionPort, int32 numberOfBytes, int completionKey, Overlapped* overlapped);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool DuplicateHandle(Handle sourceProcessHandle, Handle sourceHandle, Handle targetProcessHandle, Handle* targetHandle, int32 desiredAccess, IntBool inheritHandle, int32 options);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool CloseHandle(Handle handle);
[CLink, CallingConvention(.Stdcall)]
public static extern int32 GetFileType(FileHandle handle);
[CLink, CallingConvention(.Stdcall)]
public static extern int32 GetFileSize(FileHandle handle, int32* sizeHigh);
[CLink, CallingConvention(.Stdcall)]
public static extern FileHandle CreateFileA(char8* lpFileName,
int32 dwDesiredAccess, System.IO.FileShare dwShareMode,
SecurityAttributes* securityAttrs, System.IO.FileMode dwCreationDisposition,
int32 dwFlagsAndAttributes, Handle hTemplateFile);
[CLink, CallingConvention(.Stdcall)]
public static extern FileHandle CreateFileW(char16* lpFileName,
int32 dwDesiredAccess, System.IO.FileShare dwShareMode,
SecurityAttributes* securityAttrs, System.IO.FileMode dwCreationDisposition,
int32 dwFlagsAndAttributes, Handle hTemplateFile);
[CLink, CallingConvention(.Stdcall)]
public static extern uint32 GetWindowsDirectoryW(char16* lpBuffer, uint32 uSize);
[CLink, CallingConvention(.Stdcall)]
public static extern uint32 GetWindowsDirectoryA(char8* lpBuffer, uint32 uSize);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool CreateDirectoryW(char16* pathName, SecurityAttributes* securityAttributes);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool CreateDirectoryA(char8* pathName, SecurityAttributes* securityAttributes);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool RemoveDirectoryW(char16* pathName);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool RemoveDirectoryA(char8* pathName);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool DeleteFileW(char16* pathName);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool DeleteFileA(char8* pathName);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool CopyFileW(char16* srcName, char16* dstName, IntBool failIfExists);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool CopyFileA(char8* srcName, char8* dstName, IntBool failIfExists);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool MoveFileW(char16* srcName, char16* dstName);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool MoveFileA(char8* srcName, char8* dstName);
[CLink, CallingConvention(.Stdcall)]
public static extern int32 ReadFile(Handle handle, uint8* bytes, int32 numBytesToRead, out int32 numBytesRead, Overlapped* overlapped);
[CLink, CallingConvention(.Stdcall)]
public static extern int32 WriteFile(Handle handle, uint8* bytes, int32 numBytesToWrite, out int32 numBytesWritten, Overlapped* overlapped);
[CLink, CallingConvention(.Stdcall)]
public static extern Handle OpenFileMappingA(uint32 dwDesiredAccess, IntBool bInheritHandle, char8* lpName);
[CLink, CallingConvention(.Stdcall)]
public static extern Handle CreateFileMappingA(Handle hFile, SecurityAttributes* securityAttrs, uint32 flProtect, uint32 dwMaximumSizeHigh, uint32 dwMaximumSizeLow, char8* lpName);
[CLink, CallingConvention(.Stdcall)]
public static extern void* MapViewOfFile(Handle hFileMappingObject, uint32 dwDesiredAccess, uint32 dwFileOffsetHigh, uint32 dwFileOffsetLow, int dwNumberOfBytesToMap);
[CLink, CallingConvention(.Stdcall)]
public static extern FindHandle FindFirstFileW(char16* fileName, ref NativeFindData findFileData);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool FindNextFileW(FindHandle findHandle, ref NativeFindData findFileData);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool FindClose(FindHandle findHandle);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool GetFileAttributesExW(char16* name, int32 fileInfoLevel, FileAttributeData* fileInformation);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool SetFileAttributesW(char16* name, int32 attribs);
[Import("user32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 MessageBoxA(HWnd hWnd, char8* text, char8* caption, int32 type);
[Import("user32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 MessageBoxW(HWnd hWnd, char16* text, char16* caption, int32 type);
[CLink, CallingConvention(.Stdcall)]
public static extern int32 SetErrorMode(int32 errorMode);
[Import("user32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern HWnd GetActiveWindow();
[Import("user32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern HWnd SetActiveWindow(HWnd wnd);
[CLink, CallingConvention(.Stdcall)]
public static extern int CallWindowProcA(int wndProc, HWnd hWnd, int32 msg, int wParam, int lParam);
[CLink, CallingConvention(.Stdcall)]
public static extern int CallWindowProcW(int wndProc, HWnd hWnd, int32 msg, int wParam, int lParam);
public static int GetWindowLong(HWnd hWnd, int32 nIndex)
{
#if BF_32_BIT
//if (sizeof(int) == 4)
return (int)GetWindowLongA((int)hWnd, nIndex);
#else
//else
return GetWindowLongPtrW((int)hWnd, nIndex);
#endif
}
#if BF_32_BIT
[CLink, CallingConvention(.Stdcall)]
public static extern int GetWindowLongA(int hWnd, int nIndex);
#else
[CLink, CallingConvention(.Stdcall)]
public static extern int GetWindowLongPtrW(int hWnd, int32 nIndex);
#endif
public static int SetWindowLong(HWnd hWnd, int32 nIndex, int value)
{
#if BF_32_BIT
return (int)SetWindowLongA((int)hWnd, nIndex, value);
#else
return SetWindowLongPtrW((int)hWnd, nIndex, value);
#endif
}
#if BF_32_BIT
[CLink, CallingConvention(.Stdcall)]
public static extern int SetWindowLongA(int hWnd, int nIndex, int value);
#else
[CLink, CallingConvention(.Stdcall)]
public static extern int SetWindowLongPtrW(int hWnd, int32 nIndex, int value);
#endif
[Import("user32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern IntBool SetWindowPos(HWnd hWnd, HWnd hWndAfter, int x, int y, int cx, int cy, int flags);
[Import("user32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern IntBool PostMessageW(HWnd hWnd, int32 msg, int wParam, int lParam);
[Import("user32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 SendMessageW(HWnd hWnd, int32 msg, int wParam, int lParam);
[Import("user32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 SendMessageTimeoutW(HWnd hWnd, int32 msg, int wParam, int lParam, int32 flags, int32 timeout, int32* result);
[Import("user32.lib "), CLink, CallingConvention(.Stdcall)]
public static extern HWnd SetFocus(HWnd hWnd);
[Import("user32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern IntBool EnumWindows(void* callback, void* extraData);
[Import("user32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern HWnd GetWindow(HWnd hWnd, int32 uCmd);
[Import("user32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern HWnd FindWindowW(char16* className, char16* windowName);
[Import("user32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern HWnd FindWindowA(char8* className, char8* windowName);
[Import("user32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern IntBool IsWindowVisible(HWnd hWnd);
[Import("user32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 GetWindowTextLengthW(HWnd hWnd);
[Import("user32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 GetWindowTextW(HWnd hWnd, char16* ptr, int32 length);
[Import("user32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 GetWindowTextA(HWnd hWnd, char8* ptr, int32 length);
[Import("user32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern IntBool AdjustWindowRectEx(ref Rect rect, uint32 style, IntBool menu, uint32 exStyle);
[CLink, CallingConvention(.Stdcall)]
public static extern int32 GetWindowThreadProcessId(HWnd handle, out int32 processId);
[Import("comdlg32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern IntBool GetOpenFileNameW(ref OpenFileName ofn);
[Import("comdlg32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern IntBool GetSaveFileNameW(ref OpenFileName ofn);
[CLink, CallingConvention(.Stdcall)]
public static extern HModule GetModuleHandleW(char16* modName);
[CLink, CallingConvention(.Stdcall)]
public static extern HModule GetModuleHandleA(char8* modName);
[CLink, CallingConvention(.Stdcall)]
public static extern uint32 GetTempFileNameW(char16* tmpPath, char16* prefix, uint32 uniqueIdOrZero, char16* tmpFileName);
[CLink, CallingConvention(.Stdcall)]
public static extern uint32 GetTempFileNameA(char8* tmpPath, char8* prefix, uint32 uniqueIdOrZero, char8* tmpFileName);
[CLink, CallingConvention(.Stdcall)]
public static extern uint32 GetTempPathW(int32 bufferLen, char16* buffer);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool GetComputerNameA(char8* buffer, ref int32 size);
[CLink, CallingConvention(.Stdcall)]
public static extern int32 NtQuerySystemInformation(int32 query, void* dataPtr, int32 size, out int32 returnedSize);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool ReadDirectoryChangesW(FileHandle handle, uint8* buffer, int32 bufferLength, IntBool watchSubtree, NotifyFilters notifyFilter,
out int32 bytesReturned, Overlapped* overlapped, void* completionRoutine);
[CLink, CallingConvention(.Stdcall)]
public static extern int32 SetFilePointer(FileHandle handle, int32 distanceToMove, int32* distanceToMoveHigh, int32 moveMethod);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool SHGetFileInfoW(char16* pszPath, uint32 fileAttributes, SHFileInfo* psfi, uint32 cbFileInfo, uint32 flags);
[CLink, CallingConvention(.Stdcall)]
public static extern char16* GetEnvironmentStringsW();
[CLink, CallingConvention(.Stdcall)]
public static extern void FreeEnvironmentStringsW(char16* ptr);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool GetFileMUIPath(uint32 dwFlags, char16* pcwszFilePath, char16* pwszLanguage, uint32* pcchLanguage,
char16* pwszFileMUIPath, uint32* pcchFileMUIPath, uint64* pululEnumerator);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool SetDllDirectoryW(char16* libFileName);
[CLink, CallingConvention(.Stdcall)]
public static extern HInstance LoadLibraryW(char16* libFileName);
[Import("kernel32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern HInstance LoadLibraryA(char8* libFileName);
[CLink, CallingConvention(.Stdcall)]
public static extern HInstance LoadLibraryExW(char16* libFileName, HModule hFile, uint32 dwFlags);
[CLink, CallingConvention(.Stdcall)]
public static extern HInstance LoadLibraryExA(char8* libFileName, HModule hFile, uint32 dwFlags);
[CLink, CallingConvention(.Stdcall)]
public static extern IntBool FreeLibrary(HModule module);
[Import("user32.lib"), CLink, CallingConvention(.Stdcall)]
public static extern int32 LoadStringW(HInstance hInstance, uint32 uID, char16* lpBuffer, int32 cchBufferMax);
public static Result<FileHandle, FileOpenError> SafeCreateFile(String lpFileName,
int32 dwDesiredAccess, System.IO.FileShare dwShareMode,
SecurityAttributes* securityAttrs, System.IO.FileMode dwCreationDisposition,
int32 dwFlagsAndAttributes, Handle hTemplateFile)
{
FileHandle handle = CreateFileW(lpFileName.ToScopedNativeWChar!(), dwDesiredAccess, dwShareMode,
securityAttrs, dwCreationDisposition,
dwFlagsAndAttributes, hTemplateFile );
if (handle.IsInvalid)
{
int32 lastErr = GetLastError();
switch (lastErr)
{
case ERROR_FILE_NOT_FOUND:
fallthrough;
case ERROR_PATH_NOT_FOUND:
return .Err(FileOpenError.NotFound);
case ERROR_SHARING_VIOLATION:
return .Err(FileOpenError.SharingViolation);
default:
return .Err(FileOpenError.Unknown);
}
}
int32 fileType = GetFileType(handle);
if (fileType != FILE_TYPE_DISK)
{
//return new NotSupportedException(Environment.GetResourceString("NotSupported_FileStreamOnNonFiles"));
return .Err(FileOpenError.NotFile);
}
//if (handle.IsInvalid)
return handle;
}
}
}
#endif