LiFan
2025-02-13 03ef0b51103c735077c784c7df81ae2bcc1599ab
jrj/xframe/win32/xfile.hpp
@@ -2,19 +2,11 @@
#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);
@@ -81,106 +73,87 @@
   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);
};