1
0
mirror of https://github.com/winscp/winscp.git synced 2026-10-24 02:28:55 +03:00
Files
winscp/source/core/Interface.h
Martin Prikryl a2119a7eac Types and casts safe in respect to pointer size for forward 64-bit compatibility
Also GetWindowLongPtr and GWLP_USERDATA

https://winscp.net/tracker/618

Source commit: c85fdf15e50ce8a6f35b1c4d2a0125a0b9c4f1f0
2026-01-22 14:51:13 +01:00

198 lines
6.8 KiB
C++

//---------------------------------------------------------------------------
#ifndef InterfaceH
#define InterfaceH
//---------------------------------------------------------------------------
#include "Configuration.h"
#include "SessionData.h"
#include <typeinfo>
#define HELP_NONE ""
#define SCRIPT_SWITCH "script"
#define COMMAND_SWITCH L"Command"
#define SESSIONNAME_SWICH L"SessionName"
#define NEWPASSWORD_SWITCH L"newpassword"
#define INI_NUL L"nul"
#define PRESERVETIME_SWITCH L"preservetime"
#define PRESERVETIMEDIRS_SWITCH_VALUE L"all"
#define NOPRESERVETIME_SWITCH L"nopreservetime"
#define PERMISSIONS_SWITCH L"permissions"
#define NOPERMISSIONS_SWITCH L"nopermissions"
#define SPEED_SWITCH L"speed"
#define TRANSFER_SWITCH L"transfer"
#define FILEMASK_SWITCH L"filemask"
#define RESUMESUPPORT_SWITCH L"resumesupport"
#define NEWERONLY_SWICH L"neweronly"
#define NONEWERONLY_SWICH L"noneweronly"
#define DELETE_SWITCH L"delete"
#define REFRESH_SWITCH L"refresh"
#define RAWTRANSFERSETTINGS_SWITCH L"rawtransfersettings"
#define USERNAME_SWITCH L"username"
#define PASSWORD_SWITCH L"password"
#define PRIVATEKEY_SWITCH L"privatekey"
#define PASSWORDSFROMFILES_SWITCH L"passwordsfromfiles"
extern const wchar_t * TransferModeNames[];
extern const int TransferModeNamesCount;
extern const wchar_t * ToggleNames[];
enum TToggle { ToggleOff, ToggleOn };
//---------------------------------------------------------------------------
TConfiguration * __fastcall CreateConfiguration();
class TOptions;
TOptions * __fastcall GetGlobalOptions();
void __fastcall ShowExtendedException(Exception * E);
bool AppendExceptionStackTrace(Exception * E, TStrings *& MoreMessages);
void __fastcall IgnoreException(const std::type_info & ExceptionType);
UnicodeString GetExceptionDebugInfo(Exception * E);
UnicodeString __fastcall GetCompanyRegistryKey();
UnicodeString __fastcall GetRegistryKey();
void * __fastcall BusyStart();
void __fastcall BusyEnd(void * Token);
const unsigned int GUIUpdateInterval = 100;
void __fastcall SetNoGUI();
bool __fastcall ProcessGUI(bool Force = false);
void SystemRequired();
UnicodeString __fastcall AppNameString();
UnicodeString __fastcall SshVersionString();
void __fastcall CopyToClipboard(UnicodeString Text);
THandle StartThread(
void * SecurityAttributes, unsigned StackSize, TThreadFunc ThreadFunc, void * Parameter,
unsigned CreationFlags, TThreadID & ThreadId);
bool __fastcall TextFromClipboard(UnicodeString & Text, bool Trim);
// Order of the values also define order of the buttons/answers on the prompts
// MessageDlg relies on these to be <= 0x0000FFFF
const unsigned int qaYes = 0x00000001;
// MessageDlg relies that answer do not conflict with mrCancel (=0x2)
const unsigned int qaNo = 0x00000004;
const unsigned int qaOK = 0x00000008;
const unsigned int qaCancel = 0x00000010;
const unsigned int qaYesToAll = 0x00000020;
const unsigned int qaNoToAll = 0x00000040;
const unsigned int qaAbort = 0x00000080;
const unsigned int qaRetry = 0x00000100;
const unsigned int qaIgnore = 0x00000200;
const unsigned int qaSkip = 0x00000400;
const unsigned int qaAll = 0x00000800;
const unsigned int qaHelp = 0x00001000;
const unsigned int qaReport = 0x00002000;
const unsigned int qaFirst = qaYes;
const unsigned int qaLast = qaReport;
const unsigned int qaNeverAskAgain = 0x00010000;
const int qpFatalAbort = 0x01;
const int qpNeverAskAgainCheck = 0x02;
const int qpAllowContinueOnError = 0x04;
const int qpIgnoreAbort = 0x08;
const int qpWaitInBatch = 0x10;
typedef void __fastcall (__closure *TButtonSubmitEvent)(TObject * Sender, unsigned int & Answer);
struct TQueryButtonAlias
{
TQueryButtonAlias();
unsigned int Button;
UnicodeString Alias;
TButtonSubmitEvent OnSubmit;
int GroupWith;
TShiftState GrouppedShiftState;
bool ElevationRequired;
bool MenuButton;
UnicodeString ActionAlias;
static TQueryButtonAlias CreateYesToAllGrouppedWithYes();
static TQueryButtonAlias CreateNoToAllGrouppedWithNo();
static TQueryButtonAlias CreateAllAsYesToNewerGrouppedWithYes();
static TQueryButtonAlias CreateIgnoreAsRenameGrouppedWithNo();
};
typedef void __fastcall (__closure *TQueryParamsTimerEvent)(unsigned int & Result);
enum TQueryType { qtConfirmation, qtWarning, qtError, qtInformation };
struct TQueryParams
{
TQueryParams(unsigned int AParams = 0, UnicodeString AHelpKeyword = HELP_NONE);
TQueryParams(const TQueryParams & Source);
TQueryParams & operator =(const TQueryParams &) = default;
void Assign(const TQueryParams & Source);
const TQueryButtonAlias * Aliases;
unsigned int AliasesCount;
unsigned int Params;
unsigned int Timer;
TQueryParamsTimerEvent TimerEvent;
UnicodeString TimerMessage;
unsigned int TimerAnswers;
TQueryType TimerQueryType;
unsigned int Timeout;
unsigned int TimeoutAnswer;
unsigned int TimeoutResponse;
unsigned int NoBatchAnswers;
UnicodeString HelpKeyword;
};
enum TPromptKind
{
pkPrompt,
pkFileName,
pkUserName,
pkPassphrase,
pkTIS,
pkCryptoCard,
pkKeybInteractive,
pkPassword,
pkNewPassword,
pkProxyAuth
};
enum TPromptUserParam { pupEcho = 0x01, pupRemember = 0x02 };
bool __fastcall IsAuthenticationPrompt(TPromptKind Kind);
bool __fastcall IsPasswordOrPassphrasePrompt(TPromptKind Kind, TStrings * Prompts);
bool __fastcall IsPasswordPrompt(TPromptKind Kind, TStrings * Prompts);
void __fastcall AnswerNameAndCaption(unsigned int Answer, UnicodeString & Name, UnicodeString & Caption);
//---------------------------------------------------------------------------
typedef void __fastcall (__closure *TFileFoundEvent)
(TTerminal * Terminal, const UnicodeString FileName, const TRemoteFile * File,
bool & Cancel);
typedef void __fastcall (__closure *TFindingFileEvent)
(TTerminal * Terminal, const UnicodeString Directory, bool & Cancel);
//---------------------------------------------------------------------------
class TOperationVisualizer
{
public:
__fastcall TOperationVisualizer(bool UseBusyCursor = true);
__fastcall ~TOperationVisualizer();
private:
bool FUseBusyCursor;
void * FToken;
};
//---------------------------------------------------------------------------
class TInstantOperationVisualizer : public TOperationVisualizer
{
public:
__fastcall TInstantOperationVisualizer();
__fastcall ~TInstantOperationVisualizer();
private:
TDateTime FStart;
};
//---------------------------------------------------------------------------
struct TClipboardHandler
{
UnicodeString Text;
void __fastcall Copy(TObject * /*Sender*/, unsigned int & /*Answer*/)
{
TInstantOperationVisualizer Visualizer;
CopyToClipboard(Text);
}
};
//---------------------------------------------------------------------------
#endif