#pragma once #include "system/base.hpp" #include "win.hpp" #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); struct OPENFILENAMEW { DWORD lStructSize; HWND hwndOwner; HINSTANCE hInstance; LPCWSTR lpstrFilter; LPWSTR lpstrCustomFilter; DWORD nMaxCustFilter; DWORD nFilterIndex; LPWSTR lpstrFile; DWORD nMaxFile; LPWSTR lpstrFileTitle; DWORD nMaxFileTitle; LPCWSTR lpstrInitialDir; LPCWSTR lpstrTitle; DWORD Flags; WORD nFileOffset; WORD nFileExtension; LPCWSTR lpstrDefExt; LPARAM lCustData; LPOFNHOOKPROC lpfnHook; LPCWSTR lpTemplateName; void* pvReserved; DWORD dwReserved; DWORD FlagsEx; }; //FILETIME½á¹¹³ÖÓеÄ64λÎÞ·ûºÅµÄÎļþµÄÈÕÆÚºÍʱ¼äÖµ¡£Í·Îļþ: WINDEF.H struct FILETIME { int dwLowDateTime; // µÍ 32 λ int dwHighDateTime; // ¸ß 32 λ }; #if 0 struct fileinfo : public xstruct { char[128] szFileTitle; //ÎļþµÄ±êÌâÃû int dwFileAttributes; //ÎļþµÄÊôÐÔ FILETIME ftCreationTime; //ÎļþµÄ´´½¨Ê±¼ä FILETIME ftLastAccessTime; //ÎļþµÄ×îºó·ÃÎÊʱ¼ä FILETIME ftLastWriteTime; //ÎļþµÄ×îºóÐÞ¸Äʱ¼ä int nFileSizeHigh; //Îļþ´óСµÄ¸ßλ˫×Ö int nFileSizeLow; //Îļþ´óСµÄµÍλ˫×Ö int dwReserved0; //±£Áô£¬Îª0 int dwReserved1; //±£Áô£¬Îª0 }; #endif typedef struct _WIN32_FIND_DATAW { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; WCHAR cFileName[MAX_PATH]; 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"; 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 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"; } class xfile { bool WINAPI GetSaveFileName(OPENFILENAMEW& OpenFileName) { return GetSaveFileNameW(OpenFileName); } bool WINAPI GetOpenFileName(OPENFILENAMEW& SaveFileName) { return GetOpenFileName(SaveFileName); } HANDLE WINAPI FindFirstFile(const WCHAR* lpFileName, WIN32_FIND_DATAW& lpFindFileData) { return FindFirstFileW(lpFileName, lpFindFileData); } HANDLE WINAPI FindNextFile(HANDLE hFindFile, WIN32_FIND_DATAW& lpFindFileData) { return FindNextFileW(hFindFile, lpFindFileData); } bool WINAPI FindClose(HANDLE hFindFile) { return FindClose(hFindFile); } int WINAPI 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); } int WINAPI OpenFile(LPCSTR lpFileName, OFSTRUCT lpReOpenBuff, UINT wStyle) { return OpenFile(lpFileName, lpReOpenBuff, wStyle); } int WINAPI SetFilePointer(HANDLE hFile, LONG lDistanceToMove, LONG* lpDistanceToMoveHigh, DWORD dwMoveMethod) { return SetFilePointer(hFile, lDistanceToMove, lpDistanceToMoveHigh, dwMoveMethod); } int WINAPI ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped) { return ReadFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped); } int WINAPI WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped) { return WriteFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped); } int WINAPI CloseHandle(HANDLE hFile) { return CloseHandle(hFile); } int WINAPI GetFileSize(HANDLE hFile, int lpFileSizeHigh) { return GetFileSize(hFile, lpFileSizeHigh); } int WINAPI GetKeyState(HANDLE nVirtKey) { return GetKeyState(nVirtKey); } };