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

    /*******************************************}
{      DGScreenSpy - Server                 }
{      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 link "WSocketS"
#pragma resource "*.dfm"
TfrmMain *frmMain;
//---------------------------------------------------------------------------

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

void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
    try
    {
        wscksA->ClientClass = __classid(TMyClient);
        wscksA->BannerTooBusy = "";
        wscksA->Banner = "";
        wscksA->Addr   = "0.0.0.0";
        wscksA->Port   = "9000";
        wscksA->Listen();
        mmoA->Lines->Add("Waiting...");
    }
    catch(Exception &e)
    {
        Application->ShowException(&e);
        Application->Terminate();
    }
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::FormClose(TObject *Sender, TCloseAction &Action)
{
    wscksA->Close();
    for (int i = 0; i < wscksA->ClientCount; i++)
    {
        wscksA->Client[i]->Close();
    }
}
//---------------------------------------------------------------------------

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

void __fastcall TfrmMain::wscksAClientConnect(TObject *Sender, TWSocketClient *Client, WORD Error)
{
    mmoA->Lines->Add("Connect From:" + Client->PeerAddr);
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::wscksAClientDisconnect(TObject *Sender, TWSocketClient *Client, WORD Error)
{
    mmoA->Lines->Add("Disconnect From:" + Client->PeerAddr);
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::tmrATimer(TObject *Sender)
{
    lblA->Caption = "Client Count: " + IntToStr(wscksA->ClientCount);
}
//---------------------------------------------------------------------------

__fastcall TMyClient::TMyClient(TComponent* Owner): TWSocketClient(Owner)
{
    OnDataAvailable = DataAvailable;
    OnError = Error;
    //
    FScrSpy = new TScreenSpy();
    FScrSpy->Socket = this;
    FPos = 0;
}
//---------------------------------------------------------------------------

__fastcall TMyClient::~TMyClient()
{
    if (FScrSpy != NULL)
    {
        FScrSpy->Terminate();
        FScrSpy = NULL;
    }
}
//---------------------------------------------------------------------------

void __fastcall TMyClient::Error(TObject *Sender)
{
    CloseDelayed();
}

void __fastcall TMyClient::DataAvailable(TObject *Sender, WORD ErrCode)
{
    int nLen = Receive(&FCmd[FPos], sizeof(TCtlCmd) - FPos);
    if (nLen > 0)
    {
        FPos += nLen;
        if (FPos == sizeof(TCtlCmd))
        {
            FPos = 0;
            try
            {
                if (((PCtlCmd)FCmd)->Cmd >= 11 && ((PCtlCmd)FCmd)->Cmd <= 15)
                {
                    SetCursorPos(((PCtlCmd)FCmd)->X, ((PCtlCmd)FCmd)->Y);
                }
                switch (((PCtlCmd)FCmd)->Cmd)
                {
                    case 01:
                        FScrSpy->PixelFormat = (TPixelFormat)((PCtlCmd)FCmd)->X;
                        FScrSpy->Resume();
                    case 11: //mouse move
                        break;
                    case 12:
                        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
                        break;
                    case 13:
                        mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
                        break;
                    case 14:
                        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                        break;
                    case 15:
                        mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
                        break;
                    case 16:
                        keybd_event(Byte(((PCtlCmd)FCmd)->X), MapVirtualKey((Byte)((PCtlCmd)FCmd)->X, 0), 0, 0);
                        break;
                    case 17:
                        keybd_event(Byte(((PCtlCmd)FCmd)->X), MapVirtualKey((Byte)((PCtlCmd)FCmd)->X, 0), 2, 0);
                        break;
                }
            }
            catch(...)
            {}
        }
    }
}
//---------------------------------------------------------------------------