mainform.cpp
来自「著名的SecureBlackBox控件完整源码」· C++ 代码 · 共 568 行 · 第 1/2 页
CPP
568 行
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "MainForm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "IdBaseComponent"
#pragma link "IdComponent"
#pragma link "IdTCPClient"
#pragma link "IdTCPConnection"
#pragma link "SBSimpleSftp"
#pragma resource "*.dfm"
TfrmMain *frmMain;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
SetLicenseKey((AnsiString)
"ADDCD14AD06709806817E0B3D7BFD0A2222D536FE156466C5D5FE65DB5DEAE76" +
"FFDEBC07E915A5751C12C01C783958872A38E4A5EDA140E7247E0F2E56442A3C" +
"F3E9347AD8FDE52083A0DFC86BC00ECB0FD0CF1B51159A2BCB84F6EA6349EF47" +
"5C15A59AFCC55F7C3AAD26C279628B5D91B1DC94BD2385354A70CCA3B76101D9" +
"F41C84A639FC3CCE4BA8F0CC4A66DCD150114A3F58C1AD46B7B94643741BC20A" +
"8DCA83AB921480951B423CAA19EF1863A47CA2C3422E7E5634BED98939A5AE43" +
"DE1E4BAD79E66D8A5C973B3455656C8C9B6FF024FADD6CDA02D0F506D98493C8" +
"BD1ED7B237DB75FA31F2C82654490CDDDEE24E19939137B9E1DB05508733B22F");
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::tbConnectClick(TObject *Sender)
{
Connect();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::tbDisconnectClick(TObject *Sender)
{
Disconnect();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::tbRenameClick(TObject *Sender)
{
Rename();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::tbMakeDirClick(TObject *Sender)
{
MakeDir();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::tbDeleteClick(TObject *Sender)
{
Delete();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::tbDownloadClick(TObject *Sender)
{
Download();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::tbUploadClick(TObject *Sender)
{
Upload();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::tbRefreshClick(TObject *Sender)
{
Refresh();
}
//---------------------------------------------------------------------------
void TfrmMain::Connect(void)
{
if (SftpClient->Active)
{
MessageDlg("Already connected", mtInformation, TMsgDlgButtons()<<mbOK, 0);
return;
}
if (sckClient->Connected())
sckClient->Disconnect();
if (frmConnProps->ShowModal() == mrOk)
{
sckClient->Host = frmConnProps->editHost->Text;
sckClient->Port = 22;
SftpClient->EncryptionAlgorithms[SSH_EA_3DES] = false;
SftpClient->EncryptionAlgorithms[SSH_EA_DES] = false;
SftpClient->EncryptionAlgorithms[SSH_EA_BLOWFISH] = false;
//SftpClient->EncryptionAlgorithms[SSH_EA_AES128] = false;
//SftpClient->EncryptionAlgorithms[SSH_EA_AES192] = false;
//SftpClient->EncryptionAlgorithms[SSH_EA_AES256] = false;
SftpClient->Username = frmConnProps->editUsername->Text;
SftpClient->Password = frmConnProps->editPassword->Text;
Log((AnsiString)"Connecting to " + sckClient->Host);
sckClient->Connect(60000);
FKeyStorage->Clear();
TElSSHKey* Key = new TElSSHKey;
if ((frmConnProps->edPrivateKey->Text != "") && FileExists(frmConnProps->edPrivateKey->Text) &&
(Key->LoadPrivateKey(frmConnProps->edPrivateKey->Text,"") == 0))
{
FKeyStorage->Add(Key);
SftpClient->AuthenticationTypes = SftpClient->AuthenticationTypes | SSH_AUTH_TYPE_PUBLICKEY;
}
else
SftpClient->AuthenticationTypes = SftpClient->AuthenticationTypes & (~SSH_AUTH_TYPE_PUBLICKEY);
delete Key;
Log("Socket connection established, establishing SFTP connection");
try
{
SftpClient->Open();
}
catch(Exception &e)
{
Log((AnsiString)"Sftp connection failed with message [" + e.Message + "]", true);
sckClient->Disconnect();
return;
}
Log("Sftp connection established");
FCurrentDir = ".";
Refresh();
}
}
//---------------------------------------------------------------------------
void TfrmMain::Disconnect(void)
{
Log("Disconnecting");
if (SftpClient->Active)
SftpClient->Close(false);
if (sckClient->Connected())
sckClient->Disconnect();
}
//---------------------------------------------------------------------------
void TfrmMain::Rename(void)
{
if (SftpClient->Active && (lvFiles->Selected != NULL) && (lvFiles->Selected->Data!=NULL))
{
AnsiString NewName = InputBox("Rename", (AnsiString)"Please enter the new name for " + ((TElSftpFileInfo*)(lvFiles->Selected->Data))->Name, "");
if (NewName == "") return;
Log((AnsiString)"Renaming " + ((TElSftpFileInfo*)(lvFiles->Selected->Data))->Name + " to " + NewName);
try
{
SftpClient->RenameFile(FCurrentDir + "/" + ((TElSftpFileInfo*)(lvFiles->Selected->Data))->Name,
FCurrentDir + "/" + NewName);
}
catch(Exception &e)
{
Log((AnsiString)"Failed to rename file \"" + ((TElSftpFileInfo*)(lvFiles->Selected->Data))->Name + "\" to \"" +
NewName + "\", " + e.Message, true);
}
Refresh();
}
}
//---------------------------------------------------------------------------
void TfrmMain::MakeDir(void)
{
if (SftpClient->Active)
{
AnsiString DirName = InputBox("Make directory", "Please enter the name for new directory", "");
if (DirName.IsEmpty()) return;
Log((AnsiString)"Creating directory " + DirName);
try
{
SftpClient->MakeDirectory(FCurrentDir + "/" + DirName, NULL);
}
catch(Exception &e)
{
Log((AnsiString)"Failed to create directory \"" + DirName + "\", " + e.Message, true);
}
Refresh();
}
}
//---------------------------------------------------------------------------
void TfrmMain::Delete(void)
{
if (SftpClient->Active && (lvFiles->Selected != NULL) && (lvFiles->Selected->Data != NULL))
{
if (MessageDlg((AnsiString)"Please confirm that you want to delete \"" +
((TElSftpFileInfo*)(lvFiles->Selected->Data))->Name + "\"", mtConfirmation,
TMsgDlgButtons()<<mbYes<<mbNo, 0) == mrYes)
{
Log((AnsiString)"Removing item " + ((TElSftpFileInfo*)(lvFiles->Selected->Data))->Name);
try
{
if (((TElSftpFileInfo*)(lvFiles->Selected->Data))->Attributes->Directory)
SftpClient->SftpRemoveDirectory(FCurrentDir + "/" + ((TElSftpFileInfo*)(lvFiles->Selected->Data))->Name);
else
SftpClient->RemoveFile(FCurrentDir + "/" + ((TElSftpFileInfo*)(lvFiles->Selected->Data))->Name);
}
catch(Exception &e)
{
Log((AnsiString)"Failed to delete \"" + ((TElSftpFileInfo*)(lvFiles->Selected->Data))->Name + "\", " +
e.Message, true);
}
Refresh();
}
}
}
//---------------------------------------------------------------------------
void TfrmMain::Download(void)
{
if (SftpClient->Active && (lvFiles->Selected != NULL) && (lvFiles->Selected->Data != NULL) &&
(!((TElSftpFileInfo *)(lvFiles->Selected->Data))->Attributes->Directory))
{
SaveDialog->FileName = ((TElSftpFileInfo *)(lvFiles->Selected->Data))->Name;
if (SaveDialog->Execute())
{
Log("Downloading file " + ((TElSftpFileInfo *)(lvFiles->Selected->Data))->Name);
frmProgress->lDestFileName->Caption = SaveDialog->FileName;
frmProgress->lProgress->Caption = "";
frmProgress->pbProgress->Position = 0;
frmProgress->Canceled = false;
frmProgress->Caption = "Download";
frmProgress->Show();
try
{
SftpClient->DownloadFile(FCurrentDir + "/" + ((TElSftpFileInfo *)(lvFiles->Selected->Data))->Name, SaveDialog->FileName);
Log("Download finished");
}
catch (Exception & E)
{
Log("Error during download: " + E.Message, true);
}
}
}
}
//---------------------------------------------------------------------------
void TfrmMain::Upload(void)
{
AnsiString shortName;
if (SftpClient->Active)
{
if (OpenDialog->Execute())
{
Log("Uploading file " + OpenDialog->FileName);
shortName = Sbutils::ExtractFileName(OpenDialog->FileName);
frmProgress->lDestFileName->Caption = FCurrentDir + "/" + shortName;
frmProgress->lSourceFilename->Caption = OpenDialog->FileName;
frmProgress->Canceled = false;
frmProgress->Caption = "Upload";
frmProgress->Show();
try
{
SftpClient->UploadFile(OpenDialog->FileName, FCurrentDir + "/" + shortName);
Log("Upload finished");
}
catch (Exception& E)
{
Log("Error during upload: " + E.Message, true);
}
Refresh();
}
}
}
//---------------------------------------------------------------------------
void TfrmMain::ChangeDir(void)
{
AnsiString DirHandle;
if ((lvFiles->Selected != NULL) && (lvFiles->Selected->Data != NULL) &&
(((TElSftpFileInfo*)(lvFiles->Selected->Data))->Attributes->Directory))
{
Log((AnsiString)"Changing directory to " + ((TElSftpFileInfo*)(lvFiles->Selected->Data))->Name);
try
{
DirHandle = SftpClient->OpenDirectory(FCurrentDir + "/" + ((TElSftpFileInfo*)(lvFiles->Selected->Data))->Name);
}
catch(Exception &e)
{
Log((AnsiString)"Unable to change directory: [" + e.Message + "]", true);
return;
}
try
{
SftpClient->CloseHandle(DirHandle);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?