#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"
|
{
|
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
|
|
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
|
{
|
public:
|
static bool WINAPI GetSaveFileName(OPENFILENAMEW& OpenFileName)
|
{
|
return win32::GetSaveFileNameW(OpenFileName);
|
}
|
static bool WINAPI GetOpenFileName(OPENFILENAMEW& SaveFileName)
|
{
|
return win32::GetOpenFileNameW(SaveFileName);
|
}
|
|
static HANDLE WINAPI FindFirstFile(const WCHAR* lpFileName, WIN32_FIND_DATAW& lpFindFileData)
|
{
|
return win32::FindFirstFileW(lpFileName, lpFindFileData);
|
}
|
|
static HANDLE WINAPI FindNextFile(HANDLE hFindFile, WIN32_FIND_DATAW& lpFindFileData)
|
{
|
return win32::FindNextFileW(hFindFile, lpFindFileData);
|
}
|
static bool WINAPI FindClose(HANDLE hFindFile)
|
{
|
return win32::FindClose(hFindFile);
|
}
|
|
static int WINAPI CreateFile(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile)
|
{
|
return win32::CreateFileW(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
|
}
|
|
static int WINAPI OpenFile(LPCSTR lpFileName, OFSTRUCT lpReOpenBuff, UINT wStyle)
|
{
|
return win32::OpenFile(lpFileName, lpReOpenBuff, wStyle);
|
}
|
static int WINAPI SetFilePointer(HANDLE hFile, LONG lDistanceToMove, LONG* lpDistanceToMoveHigh, DWORD dwMoveMethod)
|
{
|
return win32::SetFilePointer(hFile, lDistanceToMove, lpDistanceToMoveHigh, dwMoveMethod);
|
}
|
static int WINAPI ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped)
|
{
|
return win32::ReadFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped);
|
}
|
static int WINAPI WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped)
|
{
|
return win32::WriteFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped);
|
}
|
static int WINAPI CloseHandle(HANDLE hFile)
|
{
|
return win32::CloseHandle(hFile);
|
}
|
static int WINAPI GetFileSize(HANDLE hFile, int lpFileSizeHigh)
|
{
|
return win32::GetFileSize(hFile, lpFileSizeHigh);
|
}
|
static int WINAPI GetKeyState(HANDLE nVirtKey)
|
{
|
return win32::GetKeyState(nVirtKey);
|
}
|
};
|