📄 priv.h
字号:
#define pvByteIndexCb(pv, cb) ((LPVOID)((PBYTE)pv + (cb)))
#ifdef DEBUG
#define DEBUG_CODE(x) x
#else // DEBUG
#define DEBUG_CODE(x)
#endif // DEBUG
#undef lstrcatnW
// #undef lstrcpyW
// #define lstrcpyW BUGBUG_BAD_lstrcpyW
#undef lstrcpynW
#define lstrcpynW BUGBUG_BAD_lstrcpynW
#undef lstrcmpW
#define lstrcmpW BUGBUG_BAD_lstrcmpW
#undef lstrcmpiW
#define lstrcmpiW BUGBUG_BAD_lstrcmpiW
#undef lstrcatW
#define lstrcatW BUGBUG_BAD_lstrcatW
#undef lstrcatnW
#define lstrcatnW BUGBUG_BAD_lstrcatnW
// Fix shell32 bugs:
#define ILCombine ILCombineWrapper
#define ILClone ILCloneWrapper
#define ILFree ILFreeWrapper
LPITEMIDLIST ILCombineWrapper(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2);
LPITEMIDLIST ILCloneWrapper(LPCITEMIDLIST pidl);
void ILFreeWrapper(LPITEMIDLIST pidl);
/*****************************************************************************
*
* Wrappers and other quickies
*
*****************************************************************************/
#define HRESULT_FROM_SUCCESS_VALUE(us) MAKE_HRESULT(SEVERITY_SUCCESS, 0, (USHORT)(us))
#define ILIsSimple(pidl) (ILIsEmpty(_ILNext(pidl)))
typedef DWORD DROPEFFECT;
#define ProtocolIdlInnerData(pidl) ((LPVOID)&(((PDELEGATEITEMID)(pidl))->rgb[0]))
#define ProtocolIdlInnerDataSize (sizeof(DELEGATEITEMID) - (sizeof(BYTE)*2))
/*****************************************************************************
*
* Const globals: Never change.
*
*****************************************************************************/
#pragma BEGIN_CONST_DATA
extern char c_szSlash[]; /* "/" */
extern WORD c_wZero; /* A word of zeros */
#pragma END_CONST_DATA
#define c_pidlNil ((LPCITEMIDLIST)&c_wZero) /* null pidl */
#define c_tszNil ((LPCTSTR)&c_wZero) /* null string */
#define c_szNil ((LPCSTR)&c_wZero) /* null string */
/*****************************************************************************
*
* Static globals: Initialized at PROCESS_ATTACH and never modified.
*
* WARNING! <shelldll\idlcomm.h> #define's various g_cf's, so we need
* to #undef them before we start partying on them again.
*
*****************************************************************************/
#undef g_cfFileDescriptor
#undef g_cfFileContents
#undef g_cfShellIDList
#undef g_cfFileNameMap
#undef g_cfPreferredDe
extern HINSTANCE g_hinst; // My instance handle
extern CHAR g_szShell32[MAX_PATH]; // Full path to shell32.dll (must be ANSI)
// Detect "." or ".." as invalid files
#define IS_VALID_FILE(str) (!(('.' == str[0]) && (('\0' == str[1]) || (('.' == str[1]) && ('\0' == str[2])))))
extern FORMATETC g_formatEtcOffsets;
extern FORMATETC g_formatPasteSucceeded;
extern FORMATETC g_dropTypes[];
extern CLIPFORMAT g_cfTargetCLSID;
// TODO:
// Create a DROP_FTP clipboard format that will
// give a source URL, a destination URL, and
// a list of files that need to be moved or copied
// from relative to the source URL to relative to
// the destination URL.
enum DROPTYPES
{
// File contents is inherently weird
DROP_FCont = 0, // File contents
// Clipboard formats we offer from our DataObject
DROP_FGDW, // File Group DescriptorW 1
DROP_FGDA, // File Group DescriptorA 2
DROP_IDList, // ID List Array 3
DROP_URL, // Uniform Resource Locator 4
// DROP_Offsets, // Shell Object Offsets
DROP_PrefDe, // Preferred Drop Effect 5
DROP_PerfDe, // Performed Drop Effect 6
DROP_FTP_PRIVATE, // Ftp Private Data - Flag to indicate Ftp was the drag source 7
DROP_OLEPERSIST, // Used by ole to realize that they should persist via IPersistStream across OleFlushClipboard calls.
// Clipboard formats we query but do not offer
DROP_Hdrop, // File Drop
DROP_FNMA, // File Name Map (Ansi)
DROP_FNMW // File Name Map (Unicode)
};
#define DROP_OFFERMIN DROP_FGDW
#define DROP_OFFERMAX DROP_Hdrop
#define DROP_MAX (DROP_FNMW+1)
/*****************************************************************************
*
* Global state management.
*
* DLL reference count, DLL critical section.
*
*****************************************************************************/
void DllAddRef(void);
void DllRelease(void);
#ifdef UNICODE
#define EMPTYSTR_FOR_NULL EMPTYSTR_FOR_NULLW
#else // UNICODE
#define EMPTYSTR_FOR_NULL EMPTYSTR_FOR_NULLA
#endif // UNICODE
#define NULL_FOR_EMPTYSTR(str) (((str) && (str)[0]) ? str : NULL)
#define EMPTYSTR_FOR_NULLA(str) ((str) ? (str) : "")
#define EMPTYSTR_FOR_NULLW(str) ((str) ? (str) : L"")
typedef void (*LISTPROC)(UINT flm, LPVOID pv);
/*****************************************************************************
* Local Includes
*****************************************************************************/
class CFtpFolder;
class CFtpSite;
class CFtpList;
class CFtpDir;
class CFtpPidlList;
class CFtpMenu;
class CFtpDrop;
class CFtpEidl;
class CFtpObj;
class CFtpProp;
class CFtpView;
class CFtpIcon;
class CStatusBar;
#define FTP_SHCNE_EVENTS (SHCNE_DISKEVENTS | SHCNE_ASSOCCHANGED | SHCNE_RMDIR | SHCNE_DELETE | SHCNE_MKDIR | SHCNE_CREATE | SHCNE_RENAMEFOLDER | SHCNE_RENAMEITEM | SHCNE_ATTRIBUTES)
typedef struct HINTPROCINFO {
CFtpDir * pfd; /* CFtpDir in which it's happening */
HWND hwnd; /* The window to use for UI */
CStatusBar * psb; /* The status bar object. */
} HPI, *PHPI;
typedef HRESULT (*HINTPROC)(HINTERNET hint, PHPI phpi, LPVOID pv, BOOL * pfReleaseHint);
void GetCfBufA(UINT cf, PSTR psz, int cch);
// This is defined in WININET.CPP
typedef LPVOID HINTERNET;
typedef HGLOBAL HIDA;
typedef void (*DELAYEDACTIONPROC)(LPVOID);
typedef struct GLOBALTIMEOUTINFO GLOBALTIMEOUTINFO, * LPGLOBALTIMEOUTINFO;
struct GLOBALTIMEOUTINFO
{
LPGLOBALTIMEOUTINFO hgtiNext;
LPGLOBALTIMEOUTINFO hgtiPrev;
LPGLOBALTIMEOUTINFO * phgtiOwner;
DWORD dwTrigger;
DELAYEDACTIONPROC pfn; // Callback procedure
LPVOID pvRef; // Reference data for timer
};
#define INTERNET_MAX_PATH_LENGTH 2048
#define INTERNET_MAX_SCHEME_LENGTH 32 // longest protocol name length
#define MAX_URL_STRING (INTERNET_MAX_SCHEME_LENGTH \
+ sizeof("://") \
+ INTERNET_MAX_PATH_LENGTH)
#define LEAK_CFtpFolder 0
#define LEAK_CFtpDir 1
#define LEAK_CFtpSite 2
#define LEAK_CFtpObj 3
#define LEAK_CFtpEidl 4
#define LEAK_CFtpDrop 5
#define LEAK_CFtpList 6
#define LEAK_CFtpStm 7
#define LEAK_CAccount 8
#define LEAK_CFtpFactory 9
#define LEAK_CFtpContextMenu 10
#define LEAK_CFtpEfe 11
#define LEAK_CFtpGlob 12
#define LEAK_CFtpIcon 13
#define LEAK_CMallocItem 14
#define LEAK_CFtpPidlList 15
#define LEAK_CFtpProp 16
#define LEAK_CStatusBar 17
#define LEAK_CFtpView 18
#define LEAK_CFtpWebView 19
#define LEAK_CCookieList 20
#define LEAK_CDropOperation 21
#ifdef DEBUG
typedef struct tagLEAKSTRUCT
{
DWORD dwRef;
CHAR szObject[MAX_PATH];
} LEAKSTRUCT;
extern LEAKSTRUCT g_LeakList[];
#define LEAK_ADDREF(dwIndex) DEBUG_CODE(g_LeakList[dwIndex].dwRef++)
#define LEAK_DELREF(dwIndex) DEBUG_CODE(g_LeakList[dwIndex].dwRef--)
#else // DEBUG
#define LEAK_ADDREF(dwIndex) NULL
#define LEAK_DELREF(dwIndex) NULL
#endif // DEBUG
/*****************************************************************************
*
* ftpdhlp.c - DialogBox helpers
*
*****************************************************************************/
// Only update after 50k bytes were copied.
#define SIZE_PROGRESS_AFTERBYTES 50000
typedef struct tagPROGRESSINFO
{
IProgressDialog * ppd;
ULARGE_INTEGER uliBytesCompleted;
ULARGE_INTEGER uliBytesTotal;
DWORD dwCompletedInCurFile;
DWORD dwLastDisplayed; // We only display in chuncks of 50k, so what was the last chunk we displayed. Chunck #3 means between 100k and 150k.
HINTERNET hint; // Used to cancel operation.
} PROGRESSINFO, * LPPROGRESSINFO;
typedef const BYTE *LPCBYTE;
typedef union FDI {
struct {
WORD id;
WORD fdio;
};
DWORD dw;
} FDI, *PFDI;
typedef const FDI *PCFDI;
#define FDIO_ICON 0
#define FDIO_NAME 1
#define FDIO_TYPE 2
#define FDIO_LOCATION 3
#define FDIO_SIZE 4
#define FDIO_DATE 5
#define FDIO_COUNT 7
#define FDIO_CANMULTI 8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -