www.gusucode.com > 远程桌面控制Delphi版源码源码程序 > 远程桌面控制Delphi版源码/DGScreenSpy_0.4c/DGScreenSpy_0.4c/CClient/Main.cpp

    /*******************************************}
{      DGScreenSpy - Client                 }
{      Version: 0.4c                        }
{      Author:  BCB-DG                      }
{      EMail:   iamgyg@163.com              }
{      QQ:      112275024                   }
{      Blog:    http://iamgyg.blog.163.com  }
{*******************************************/
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "WSocket"
#pragma resource "*.dfm"
TfrmMain *frmMain;
//---------------------------------------------------------------------------

__fastcall TfrmMain::TfrmMain(TComponent* Owner): TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
    DoubleBuffered = True;
    FRecBmp = new Graphics::TBitmap;
    FScrBmp = new Graphics::TBitmap;
    FmsRec  = new TMemoryStream;
    FmsScr  = new TMemoryStream;
    FColor  = 3;
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::FormClose(TObject *Sender, TCloseAction &Action)
{
    wsckA->Close();
    delete FRecBmp;
    delete FScrBmp;
    delete FmsRec;
    delete FmsScr;
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::btnAboutClick(TObject *Sender)
{
    MessageBox(Handle, DEF_MSG, DEM_CAP, ICO_INFO);
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::btnConnectClick(TObject *Sender)
{
    TfrmHost *pForm;
    pForm = new TfrmHost(this);
    if (pForm->ShowModal() == mrOk)
    {
        if ((pForm->edtHost->Text.Length() > 0) && (pForm->edtPort->Text.Length() > 0))
        {
            switch (pForm->rg1->ItemIndex)
            {
                case 0:
                    FColor = 1;
                    break;
                case 1:
                    FColor = 2;
                    break;
                case 2:
                    FColor = 3;
                    break;
                case 3:
                    FColor = 5;
                    break;
                case 4:
                    FColor = 6;
                    break;
                case 5:
                    FColor = 7;
                    break;
                default:
                    FColor = 3;
                    break;
            }
            try
            {
                wsckA->Addr = pForm->edtHost->Text;
                wsckA->Port = pForm->edtPort->Text;
                wsckA->Connect();
            }
            catch(Exception &e)
            {
                lblA->Caption = e.Message;
            }
        }
    }
    delete pForm;
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::btnDisconnectClick(TObject *Sender)
{
    wsckA->Close();
    FmsRec->Clear();
    FmsScr->Clear();
    btnConnect->Enabled    = true;
    btnDisconnect->Enabled = false;
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::wsckASessionConnected(TObject *Sender,
      WORD ErrCode)
{
    if (ErrCode != 0)
    {
        ShowMessage("Connect Error!");
        btnConnect->Enabled    = true;
        btnDisconnect->Enabled = false;
    }
    else
    {
        lblA->Caption = "Connected";
        btnConnect->Enabled    = false;
        btnDisconnect->Enabled = true;
        FRCmd.Head = true;
        FRCmd.Pos  = 0;
        FCCmd.Cmd  = 1;
        FCCmd.X    = FColor;
        wsckA->Send(&FCCmd, sizeof(TCtlCmd));
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::wsckASessionClosed(TObject *Sender, WORD ErrCode)
{
    btnConnect->Enabled    = true;
    btnDisconnect->Enabled = false;
    lblA->Caption = "Connect Closed";
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::wsckADataAvailable(TObject *Sender, WORD ErrCode)
{
    int nLen;
    try
    {
        if (FRCmd.Head)
        {
            nLen = wsckA->Receive(&FRCmd.Cmd[FRCmd.Pos], sizeof(TSpyCmd) - FRCmd.Pos);
            if (nLen > 0)
            {
                FRCmd.Pos += nLen;
                if (FRCmd.Pos == sizeof(TSpyCmd))
                {
                    FRCmd.Head = false;
                    FRCmd.Pos  = 0;
                    FRCmd.Rec  = 0;
                    FRCmd.Size = ((PSpyCmd)FRCmd.Cmd)->Size;
                    FmsRec->SetSize(FRCmd.Size);
                    FmsRec->Position = 0;
                }
            }
            return;
        }
        if (FRCmd.Size - FRCmd.Rec > BUFF_SIZE)
            nLen = BUFF_SIZE;
        else
            nLen = FRCmd.Size - FRCmd.Rec;
        nLen = wsckA->Receive(&FRCmd.Buf[0], nLen);
        if (nLen > 0)
        {
            FmsRec->WriteBuffer(&FRCmd.Buf, nLen);
            FRCmd.Rec += nLen;
            if (FRCmd.Rec >= FRCmd.Size)
            {
                FmsScr->Clear();
                FmsRec->Position = 0;
                ZDecompressStream(FmsRec, FmsScr);
                FmsScr->Position = 0;
                lblA->Caption = "Size: " + IntToStr(FmsRec->Size) + " / " + IntToStr(FmsScr->Size);
                try
                {
                    while (FmsScr->Position < FmsScr->Size)
                    {
                        FmsScr->Read(&FRect, sizeof(TRect));
                        FRecBmp->Width  = FRect.Right - FRect.Left;
                        FRecBmp->Height = FRect.Bottom - FRect.Top;
                        FRecBmp->LoadFromStream(FmsScr);
                        if (((PSpyCmd)FRCmd.Cmd)->Cmd == 1) SetSize(FRecBmp->Width * BSIZE, FRecBmp->Height * BSIZE);
                        FScrBmp->Canvas->Lock();
                        FRecBmp->Canvas->Lock();
                        FScrBmp->Canvas->Draw(FRect.Left, FRect.Top, FRecBmp);
                        FRecBmp->Canvas->Unlock();
                        FScrBmp->Canvas->Unlock();
                    }
                }
                catch(...)
                {}
                pbAPaint(Sender);
                FRCmd.Size = 0;
                FRCmd.Rec  = 0;
                FRCmd.Head = true;
            }
        }
    }
    catch(Exception &e)
    {
        lblA->Caption = e.Message;
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::SetSize(int nWidth, int nHeight)
{
    if (pbA->Width != nWidth || pbA->Height != nHeight)
    {
        pbA->Left    = 0;
        pbA->Top     = 0;
        pbA->Width   = nWidth;
        pbA->Height  = nHeight;
        FScrBmp->Width  = nWidth;
        FScrBmp->Height = nHeight;
        ClientWidth     = nWidth;
        ClientHeight    = nHeight + pnlA->Height;
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::pbAPaint(TObject *Sender)
{
    try
    {
        pbA->Canvas->Lock();
        FScrBmp->Canvas->Lock();
        BitBlt(pbA->Canvas->Handle,
               sbA->HorzScrollBar->Position,
               sbA->VertScrollBar->Position,
               sbA->Width,
               sbA->Height,
               FScrBmp->Canvas->Handle,
               sbA->HorzScrollBar->Position,
               sbA->VertScrollBar->Position,
               SRCCOPY);
        FScrBmp->Canvas->Unlock();
        pbA->Canvas->Unlock();
    }
    catch(...)
    {}
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::SendCmd(TCtlCmd ACmd)
{
    if (wsckA->State == wsConnected) wsckA->Send(&ACmd, sizeof(TCtlCmd));
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::pbAMouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
    if (chkCtl->Checked)
    {
        FCCmd.Cmd = 11;
        FCCmd.X = X;
        FCCmd.Y = Y;
        SendCmd(FCCmd);
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::pbAMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
    if (chkCtl->Checked)
    {
        FButton = Button;
        FCCmd.X = X;
        FCCmd.Y = Y;
        if (FButton == mbLeft)
            FCCmd.Cmd = 12;
        else
            FCCmd.Cmd = 13;
        SendCmd(FCCmd);
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::pbAMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
    if (chkCtl->Checked)
    {
        FButton = Button;
        FCCmd.X = X;
        FCCmd.Y = Y;
        if (FButton == mbLeft)
            FCCmd.Cmd = 14;
        else
            FCCmd.Cmd = 15;
        SendCmd(FCCmd);
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
    if (chkCtl->Checked)
    {
        FCCmd.Cmd = 16;
        FCCmd.X = Key;
        SendCmd(FCCmd);
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::FormKeyUp(TObject *Sender, WORD &Key, TShiftState Shift)
{
    if (chkCtl->Checked)
    {
        FCCmd.Cmd = 17;
        FCCmd.X = Key;
        SendCmd(FCCmd);
    }
}
//---------------------------------------------------------------------------