WinSCP.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. //---------------------------------------------------------------------------
  2. #include <WinPCH.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 <ProgParams.h>
  10. #include <PuttyTools.h>
  11. //---------------------------------------------------------------------------
  12. void __fastcall AppLogImpl(UnicodeString S)
  13. {
  14. AppLog(S);
  15. }
  16. //---------------------------------------------------------------------------
  17. int WINAPI wWinMain(HINSTANCE, HINSTANCE, LPWSTR, int)
  18. {
  19. int Result = 0;
  20. try
  21. {
  22. TProgramParams * Params = TProgramParams::Instance();
  23. TObjectReleaser<TApplicationLog> ApplicationLogReleaser(ApplicationLog, new TApplicationLog());
  24. UnicodeString AppLogPath;
  25. if (Params->FindSwitch(L"applog", AppLogPath))
  26. {
  27. ApplicationLog->Enable(AppLogPath);
  28. OnAppLog = AppLogImpl;
  29. }
  30. AppLog(L"Starting...");
  31. if (Params->FindSwitch(L"IsUWP"))
  32. {
  33. EnableUWPTestMode();
  34. }
  35. AddStartupSequence(L"M");
  36. AppLogFmt(L"Process: %d", (GetCurrentProcessId()));
  37. AppLogFmt(L"Mouse: %s", (BooleanToEngStr(Mouse->MousePresent)));
  38. AppLogFmt(L"Mouse wheel: %s, msg: %d, scroll lines: %d", (BooleanToEngStr(Mouse->WheelPresent), int(Mouse->RegWheelMessage), Mouse->WheelScrollLines));
  39. AppLogFmt(L"ACP: %d", (static_cast<int>(GetACP())));
  40. AppLogFmt(L"Windows version: %s", (WindowsVersion()));
  41. AppLogFmt(L"Win32 platform: %d", (Win32Platform()));
  42. AppLogFmt(L"Windows product type: %x", (static_cast<int>(GetWindowsProductType())));
  43. AppLogFmt(L"Win64: %s", (BooleanToEngStr(IsWin64())));
  44. AddStartupSequence(L"T");
  45. LogModules();
  46. WinInitialize();
  47. Application->Initialize();
  48. Application->MainFormOnTaskBar = true;
  49. Application->ModalPopupMode = pmAuto;
  50. DebugAssert(SameFont(Application->DefaultFont, std::unique_ptr<TFont>(new TFont()).get()));
  51. SetEnvironmentVariable(L"WINSCP_PATH",
  52. ExcludeTrailingBackslash(ExtractFilePath(Application->ExeName)).c_str());
  53. CoreInitialize();
  54. ApplicationLog->AddStartupInfo(); // Needs Configuration
  55. InitializeWinHelp();
  56. InitializeSystemSettings();
  57. AddStartupSequence(L"S");
  58. try
  59. {
  60. try
  61. {
  62. ConfigureInterface();
  63. Application->Title = AppName;
  64. AppLog(L"Executing...");
  65. Result = Execute();
  66. AppLog(L"Execution done");
  67. }
  68. catch (Exception & E)
  69. {
  70. // Capture most errors before Usage class is released,
  71. // so that we can count them
  72. Configuration->Usage->Inc(L"GlobalFailures");
  73. // After we get WM_QUIT (posted by Application->Terminate()), i.e once Application->Run() exits,
  74. // the message just blinks
  75. ShowExtendedException(&E);
  76. }
  77. }
  78. __finally
  79. {
  80. AppLogImpl(L"Finalizing"); // AppLog causes internal compiler error
  81. GUIFinalize();
  82. FinalizeSystemSettings();
  83. FinalizeWinHelp();
  84. CoreFinalize();
  85. WinFinalize();
  86. LogModules();
  87. AppLogImpl(L"Finalizing done");
  88. OnAppLog = NULL;
  89. }
  90. }
  91. catch (Exception &E)
  92. {
  93. ShowExtendedException(&E);
  94. }
  95. return Result;
  96. }
  97. //---------------------------------------------------------------------------