WinSCP.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. USEFORM("forms\CustomScpExplorer.cpp", CustomScpExplorerForm);
  5. USEFORM("forms\NonVisual.cpp", NonVisualDataModule); /* TDataModule: File Type */
  6. USEFORM("forms\ScpCommander.cpp", ScpCommanderForm);
  7. USEFORM("forms\ScpExplorer.cpp", ScpExplorerForm);
  8. //---------------------------------------------------------------------------
  9. #include <CoreMain.h>
  10. #include <WinInterface.h>
  11. #include <ProgParams.h>
  12. #include <VCLCommon.h>
  13. #include <Setup.h>
  14. #include <PuttyTools.h>
  15. #include <GUITools.h>
  16. #include <Tools.h>
  17. //---------------------------------------------------------------------------
  18. void __fastcall AppLogImpl(UnicodeString S)
  19. {
  20. AppLog(S);
  21. }
  22. //---------------------------------------------------------------------------
  23. WINAPI wWinMain(HINSTANCE, HINSTANCE, LPWSTR, int)
  24. {
  25. int Result = 0;
  26. try
  27. {
  28. TProgramParams * Params = TProgramParams::Instance();
  29. ApplicationLog = new TApplicationLog();
  30. UnicodeString AppLogPath;
  31. if (Params->FindSwitch(L"applog", AppLogPath))
  32. {
  33. ApplicationLog->Enable(AppLogPath);
  34. OnAppLog = AppLogImpl;
  35. }
  36. AppLog(L"Starting...");
  37. if (Params->FindSwitch(L"IsUWP"))
  38. {
  39. EnableUWPTestMode();
  40. }
  41. AddStartupSequence(L"M");
  42. AppLogFmt(L"Process: %d", (GetCurrentProcessId()));
  43. AppLogFmt(L"Mouse: %s", (BooleanToEngStr(Mouse->MousePresent)));
  44. AppLogFmt(L"Mouse wheel: %s, msg: %d, scroll lines: %d", (BooleanToEngStr(Mouse->WheelPresent), int(Mouse->RegWheelMessage), Mouse->WheelScrollLines));
  45. AppLogFmt(L"ACP: %d", (static_cast<int>(GetACP())));
  46. AppLogFmt(L"Win32 platform: %d", (Win32Platform()));
  47. DWORD Type;
  48. if (GetWindowsProductType(Type))
  49. {
  50. AppLogFmt(L"Windows product type: %x", (static_cast<int>(Type)));
  51. }
  52. else
  53. {
  54. AppLog(L"No Windows product type");
  55. }
  56. AppLogFmt(L"Win64: %s", (BooleanToEngStr(IsWin64())));
  57. AddStartupSequence(L"T");
  58. WinInitialize();
  59. Application->Initialize();
  60. Application->MainFormOnTaskBar = true;
  61. Application->ModalPopupMode = pmAuto;
  62. DebugAssert(SameFont(Application->DefaultFont, std::unique_ptr<TFont>(new TFont()).get()));
  63. Application->DefaultFont->Name = L"Tahoma";
  64. // The default DefaultFont is calculated as -MulDiv(8, ScreenLogPixels, 72)
  65. // But form's font is scaled using DPI, what can resumt in slightly different Height
  66. Application->DefaultFont->Height = -MulDiv(11, Screen->PixelsPerInch, Screen->DefaultPixelsPerInch);
  67. SetEnvironmentVariable(L"WINSCP_PATH",
  68. ExcludeTrailingBackslash(ExtractFilePath(Application->ExeName)).c_str());
  69. CoreInitialize();
  70. ApplicationLog->AddStartupInfo(); // Needs Configuration
  71. InitializeWinHelp();
  72. InitializeSystemSettings();
  73. AddStartupSequence(L"S");
  74. try
  75. {
  76. try
  77. {
  78. ConfigureInterface();
  79. SetupInitialize();
  80. Application->Title = AppName;
  81. AppLog(L"Executing...");
  82. Result = Execute();
  83. AppLog(L"Execution done");
  84. }
  85. catch (Exception & E)
  86. {
  87. // Capture most errors before Usage class is released,
  88. // so that we can count them
  89. Configuration->Usage->Inc(L"GlobalFailures");
  90. // After we get WM_QUIT (posted by Application->Terminate()), i.e once Application->Run() exits,
  91. // the message just blinks
  92. ShowExtendedException(&E);
  93. }
  94. }
  95. __finally
  96. {
  97. AppLog(L"Finalizing");
  98. GUIFinalize();
  99. FinalizeSystemSettings();
  100. FinalizeWinHelp();
  101. CoreFinalize();
  102. WinFinalize();
  103. AppLog(L"Finalizing done");
  104. OnAppLog = NULL;
  105. SAFE_DESTROY_EX(TApplicationLog, ApplicationLog);
  106. }
  107. }
  108. catch (Exception &E)
  109. {
  110. ShowExtendedException(&E);
  111. }
  112. return Result;
  113. }
  114. //---------------------------------------------------------------------------