|  |  | 
 |  |  |  | 
 |  |  | #include "system/base.hpp" | 
 |  |  | #include "win.hpp" | 
 |  |  | #include "wobject/xstring.hpp" | 
 |  |  |  | 
 |  |  | #if _XWIN | 
 |  |  | #define CALLBACK    __stdcall | 
 |  |  | #define MAX_PATH    260 | 
 |  |  | typedef unsigned short WORD; | 
 |  |  | typedef unsigned int UINT; | 
 |  |  | typedef char CHAR; | 
 |  |  | typedef unsigned char BYTE; | 
 |  |  | typedef wchar_t WCHAR; | 
 |  |  | typedef void* HANDLE; | 
 |  |  | typedef const char* LPCSTR; | 
 |  |  | typedef void* LPVOID; | 
 |  |  | typedef DWORD* LPDWORD; | 
 |  |  | typedef const void* LPCVOID; | 
 |  |  |  | 
 |  |  | typedef void* LPSECURITY_ATTRIBUTES; | 
 |  |  | typedef UINT_PTR(CALLBACK* LPOFNHOOKPROC) (HWND, UINT, WPARAM, LPARAM); | 
 |  |  | 
 |  |  |    WCHAR  cAlternateFileName[14]; | 
 |  |  | } WIN32_FIND_DATAW; | 
 |  |  |  | 
 |  |  | typedef struct _OVERLAPPED { | 
 |  |  |    ULONG_PTR Internal; | 
 |  |  |    ULONG_PTR InternalHigh; | 
 |  |  |    union { | 
 |  |  |       struct { | 
 |  |  |          DWORD Offset; | 
 |  |  |          DWORD OffsetHigh; | 
 |  |  |       } DUMMYSTRUCTNAME; | 
 |  |  |       LPVOID Pointer; | 
 |  |  |    } DUMMYUNIONNAME; | 
 |  |  |  | 
 |  |  |    HANDLE  hEvent; | 
 |  |  | } OVERLAPPED, * LPOVERLAPPED; | 
 |  |  |  | 
 |  |  |  | 
 |  |  | #define OFS_MAXPATHNAME 128 | 
 |  |  | typedef struct _OFSTRUCT { | 
 |  |  |    BYTE cBytes; | 
 |  |  |    BYTE fFixedDisk; | 
 |  |  |    WORD nErrCode; | 
 |  |  |    WORD Reserved1; | 
 |  |  |    WORD Reserved2; | 
 |  |  |    CHAR szPathName[OFS_MAXPATHNAME]; | 
 |  |  | } OFSTRUCT; | 
 |  |  |  | 
 |  |  | extern "C" | 
 |  |  | { | 
 |  |  |    bool  WINAPI GetSaveFileNameW(OPENFILENAMEW &);//native from "comdlg32.dll" alias "GetSaveFileNameW"; | 
 |  |  |    bool  WINAPI GetOpenFileNameW(OPENFILENAMEW&);//native from "comdlg32.dll" alias "GetOpenFileNameW"; | 
 |  |  |    //namespace win32 | 
 |  |  |    //{ | 
 |  |  |       bool  WINAPI GetSaveFileNameW(OPENFILENAMEW*);//native from "comdlg32.dll" alias "GetSaveFileNameW"; | 
 |  |  |       bool  WINAPI GetOpenFileNameW(OPENFILENAMEW*);//native from "comdlg32.dll" alias "GetOpenFileNameW"; | 
 |  |  |  | 
 |  |  |    HANDLE WINAPI FindFirstFileW(const WCHAR * lpFileName, WIN32_FIND_DATAW&  lpFindFileData); //native from "kernel32.dll" alias "FindFirstFileW";   //根据文件名查找文件,一旦不再需要,应该用FindClose函数关闭这个句柄 | 
 |  |  |    HANDLE WINAPI FindNextFileW(HANDLE hFindFile, WIN32_FIND_DATAW&  lpFindFileData); //native from "kernel32.dll" alias "FindNextFileW";   //继续查找FindFirstFile函数搜索后的文件 ,HANDLE hFindFile搜索的文件句柄 函数执行的时候搜索的是此句柄的下一文件。非零表示成功,零表示失败。如不再有与指定条件相符的文件,会将GetLastError设置成ERROR_NO_MORE_FILES | 
 |  |  |    bool  WINAPI FindClose(HANDLE hFindFile); //native from "kernel32.dll" alias "FindClose";   //关闭由FindFirstFile函数创建的一个搜索句柄。返回非零表示成功,零表示失败。会设置GetLastError  | 
 |  |  |       HANDLE WINAPI FindFirstFileW(const WCHAR* lpFileName, WIN32_FIND_DATAW* lpFindFileData); //native from "kernel32.dll" alias "FindFirstFileW";   //根据文件名查找文件,一旦不再需要,应该用FindClose函数关闭这个句柄 | 
 |  |  |       BOOL WINAPI FindNextFileW(HANDLE hFindFile, WIN32_FIND_DATAW* lpFindFileData); //native from "kernel32.dll" alias "FindNextFileW";   //继续查找FindFirstFile函数搜索后的文件 ,HANDLE hFindFile搜索的文件句柄 函数执行的时候搜索的是此句柄的下一文件。非零表示成功,零表示失败。如不再有与指定条件相符的文件,会将GetLastError设置成ERROR_NO_MORE_FILES | 
 |  |  |       bool  WINAPI FindClose(HANDLE hFindFile); //native from "kernel32.dll" alias "FindClose";   //关闭由FindFirstFile函数创建的一个搜索句柄。返回非零表示成功,零表示失败。会设置GetLastError  | 
 |  |  |  | 
 |  |  |    int  WINAPI CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); //native from "kernel32.dll" alias "CreateFileW"; | 
 |  |  |    int  WINAPI  OpenFile(LPCSTR lpFileName, OFSTRUCT lpReOpenBuff, UINT wStyle); //native from "kernel32.dll" alias "OpenFile"; | 
 |  |  |    int  WINAPI SetFilePointer(HANDLE hFile, LONG lDistanceToMove, LONG* lpDistanceToMoveHigh, DWORD dwMoveMethod); //native from "kernel32.dll" alias "SetFilePointer"; | 
 |  |  |    int  WINAPI ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped); //native from "kernel32.dll" alias "ReadFile"; | 
 |  |  |    int  WINAPI WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped); //native from "kernel32.dll" alias "ReadFile"; | 
 |  |  |    int  WINAPI CloseHandle(HANDLE hFile); //native from "kernel32.dll" alias "CloseHandle"; | 
 |  |  |    int  WINAPI GetFileSize(HANDLE hFile, int lpFileSizeHigh); //native from "kernel32.dll" alias "GetFileSize"; | 
 |  |  |    int  WINAPI GetKeyState(HANDLE nVirtKey); //native from "user32.dll" alias "GetKeyState"; | 
 |  |  |       HANDLE  WINAPI CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); //native from "kernel32.dll" alias "CreateFileW"; | 
 |  |  |       HFILE  WINAPI  OpenFile(LPCSTR lpFileName, OFSTRUCT* lpReOpenBuff, UINT wStyle); //native from "kernel32.dll" alias "OpenFile"; | 
 |  |  |       int  WINAPI SetFilePointer(HANDLE hFile, LONG lDistanceToMove, LONG* lpDistanceToMoveHigh, DWORD dwMoveMethod); //native from "kernel32.dll" alias "SetFilePointer"; | 
 |  |  |       int  WINAPI ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped); //native from "kernel32.dll" alias "ReadFile"; | 
 |  |  |       int  WINAPI WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped); //native from "kernel32.dll" alias "ReadFile"; | 
 |  |  |       int  WINAPI CloseHandle(HANDLE hFile); //native from "kernel32.dll" alias "CloseHandle"; | 
 |  |  |       int  WINAPI GetFileSize(HANDLE hFile, DWORD* lpFileSizeHigh); //native from "kernel32.dll" alias "GetFileSize"; | 
 |  |  |    //} | 
 |  |  | } | 
 |  |  | #endif | 
 |  |  |  | 
 |  |  |  | 
 |  |  | class xfile | 
 |  |  | { | 
 |  |  |    bool  WINAPI GetSaveFileName(OPENFILENAMEW& OpenFileName) | 
 |  |  | public: | 
 |  |  |    static bool  GetSaveFileName(OPENFILENAMEW& OpenFileName) | 
 |  |  |    { | 
 |  |  |       return GetSaveFileNameW(OpenFileName); | 
 |  |  |       return ::GetSaveFileNameW(&OpenFileName); | 
 |  |  |    } | 
 |  |  |    bool  WINAPI GetOpenFileName(OPENFILENAMEW& SaveFileName) | 
 |  |  |    static bool GetOpenFileName(OPENFILENAMEW& SaveFileName) | 
 |  |  |    { | 
 |  |  |       return GetOpenFileName(SaveFileName); | 
 |  |  |       return ::GetOpenFileNameW(&SaveFileName); | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    HANDLE WINAPI FindFirstFile(const WCHAR* lpFileName, WIN32_FIND_DATAW& lpFindFileData) | 
 |  |  |    static HANDLE FindFirstFile(const WCHAR* lpFileName, WIN32_FIND_DATAW& lpFindFileData) | 
 |  |  |    { | 
 |  |  |       return FindFirstFileW(lpFileName, lpFindFileData); | 
 |  |  |       return ::FindFirstFileW(lpFileName, &lpFindFileData); | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    HANDLE WINAPI FindNextFile(HANDLE hFindFile, WIN32_FIND_DATAW& lpFindFileData) | 
 |  |  |    static BOOL FindNextFile(HANDLE hFindFile, WIN32_FIND_DATAW& lpFindFileData) | 
 |  |  |    { | 
 |  |  |       return FindNextFileW(hFindFile, lpFindFileData); | 
 |  |  |       return ::FindNextFileW(hFindFile, &lpFindFileData); | 
 |  |  |    } | 
 |  |  |    bool  WINAPI FindClose(HANDLE hFindFile) | 
 |  |  |    static bool FindClose(HANDLE hFindFile) | 
 |  |  |    { | 
 |  |  |       return FindClose(hFindFile); | 
 |  |  |       return ::FindClose(hFindFile); | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    int  WINAPI CreateFile(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) | 
 |  |  |    static HANDLE  CreateFile(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) | 
 |  |  |    { | 
 |  |  |       return CreateFileW(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); | 
 |  |  |       return ::CreateFileW(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    int  WINAPI  OpenFile(LPCSTR lpFileName, OFSTRUCT lpReOpenBuff, UINT wStyle) | 
 |  |  |    static HFILE  OpenFile(LPCSTR lpFileName, OFSTRUCT& lpReOpenBuff, UINT wStyle) | 
 |  |  |    { | 
 |  |  |       return OpenFile(lpFileName, lpReOpenBuff, wStyle); | 
 |  |  |       return ::OpenFile(lpFileName, &lpReOpenBuff, wStyle); | 
 |  |  |    } | 
 |  |  |    int  WINAPI SetFilePointer(HANDLE hFile, LONG lDistanceToMove, LONG* lpDistanceToMoveHigh, DWORD dwMoveMethod) | 
 |  |  |    static int  SetFilePointer(HANDLE hFile, LONG lDistanceToMove, LONG* lpDistanceToMoveHigh, DWORD dwMoveMethod) | 
 |  |  |    { | 
 |  |  |       return SetFilePointer(hFile, lDistanceToMove, lpDistanceToMoveHigh, dwMoveMethod); | 
 |  |  |       return ::SetFilePointer(hFile, lDistanceToMove, lpDistanceToMoveHigh, dwMoveMethod); | 
 |  |  |    } | 
 |  |  |    int  WINAPI ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped) | 
 |  |  |    static int  ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped) | 
 |  |  |    { | 
 |  |  |       return ReadFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped); | 
 |  |  |       return ::ReadFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped); | 
 |  |  |    } | 
 |  |  |    int  WINAPI WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped) | 
 |  |  |    static int  WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped) | 
 |  |  |    { | 
 |  |  |       return WriteFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped); | 
 |  |  |       return ::WriteFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped); | 
 |  |  |    } | 
 |  |  |    int  WINAPI CloseHandle(HANDLE hFile) | 
 |  |  |    static int  CloseHandle(HANDLE hFile) | 
 |  |  |    { | 
 |  |  |       return  CloseHandle(hFile); | 
 |  |  |       return  ::CloseHandle(hFile); | 
 |  |  |    } | 
 |  |  |    int  WINAPI GetFileSize(HANDLE hFile, int lpFileSizeHigh) | 
 |  |  |    static int  GetFileSize(HANDLE hFile, DWORD& lpFileSizeHigh) | 
 |  |  |    { | 
 |  |  |       return GetFileSize(hFile, lpFileSizeHigh); | 
 |  |  |       return ::GetFileSize(hFile, &lpFileSizeHigh); | 
 |  |  |    } | 
 |  |  |    int  WINAPI GetKeyState(HANDLE nVirtKey) | 
 |  |  |    { | 
 |  |  |       return GetKeyState(nVirtKey); | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    static xstring GetString(xstring path); | 
 |  |  |    static BYTE* GetBuffer(xstring path,int& Length); | 
 |  |  | }; | 
 |  |  |  |