欧美性猛交黑人xxxx,成人毛片一区二区三区,久久综合九色综合精品,男的把j放进女人下面视频免费

遠(yuǎn)程屏幕監(jiān)視軟件的設(shè)計(jì)與實(shí)現(xiàn)

  • 發(fā)布于:2023-09-19
  • 188 人圍觀

適合讀者:編程愛(ài)好者、黑客工具愛(ài)好者

前置知識(shí):Borland C++ Builder 6.0基本使用方法

Socket:
本文主要介紹了遠(yuǎn)程屏幕監(jiān)視軟件EagleEye的開發(fā)與設(shè)計(jì)過(guò)程。逐一介紹了比較正規(guī)的專業(yè)程序開發(fā)步驟:需求分析、功能設(shè)計(jì)與實(shí)現(xiàn)、軟件測(cè)試運(yùn)行。在功能設(shè)計(jì)中用程序流程圖展現(xiàn)了程序執(zhí)行的具體過(guò)程。在功能實(shí)現(xiàn)中詳細(xì)的展現(xiàn)了系統(tǒng)的各個(gè)功能模塊、所需的VCL類和自定義的相關(guān)類,給出了實(shí)現(xiàn)相應(yīng)的功能的函數(shù)及代碼,文章的最后還給出了本軟件的主要功能源代碼。我們推出這樣的文章是想讓大家真正了解到專業(yè)程序開發(fā)的流程和詳細(xì)的步驟分析,或許這個(gè)文章就能讓無(wú)數(shù)新手邁進(jìn)專業(yè)程序開發(fā)的第一步呢?!

帶你邁上專業(yè)軟件開發(fā)第一步:遠(yuǎn)程屏幕監(jiān)視軟件的設(shè)計(jì)與實(shí)現(xiàn)

    通過(guò)21天的編寫,遠(yuǎn)程輔助類工具軟件EagleEye 基本編寫完畢,能夠完成多窗口多種方式(可以選擇截圖或?qū)崟r(shí)監(jiān)視的方式)同時(shí)監(jiān)視多臺(tái)遠(yuǎn)程計(jì)算機(jī),可以實(shí)現(xiàn)對(duì)本地計(jì)算機(jī)上顯示的遠(yuǎn)程屏幕圖像的實(shí)行存儲(chǔ),可以將圖像拷貝到剪貼板,并且用戶可以設(shè)定監(jiān)視時(shí)間、監(jiān)視方式,可以選擇程序的運(yùn)行方式(可以是正常模式,也可以使程序隱藏于后臺(tái)運(yùn)行)。完全實(shí)現(xiàn)了我最初的設(shè)想。心情不錯(cuò),于是急忙拿出來(lái)和廣大的黑防讀者們一起共享,共同富裕嘛!

    開發(fā)環(huán)境和功能分析

    遠(yuǎn)程屏幕監(jiān)視作為我自主編寫的遠(yuǎn)程控制軟件的一個(gè)模塊,我將其獨(dú)立分割出來(lái)發(fā)布測(cè)試,軟件要求能實(shí)現(xiàn)分屏同時(shí)監(jiān)視遠(yuǎn)程主機(jī)。大體的開發(fā)環(huán)境是:

操作系統(tǒng):Windows XP SP1
開發(fā)所用計(jì)算機(jī)配置:512M內(nèi)存+P42.4G CPU+800MHZ系統(tǒng)總線
環(huán)境:Borland C++ Builder 6.0+SUIStyle控件

    至于功能需求分析,我們一點(diǎn)一點(diǎn)看,這或許是專業(yè)開發(fā)人員和普通自學(xué)程序員之間最大的差距,一起來(lái)學(xué)習(xí)、探討一下吧!

    1.為實(shí)現(xiàn)數(shù)據(jù)的網(wǎng)絡(luò)傳輸,軟件采用C/S(客戶端/服務(wù)器)數(shù)據(jù)傳輸模式。從遵循計(jì)算機(jī)道德的角度出發(fā),在該設(shè)計(jì)過(guò)程中,不打算編寫具有木馬特征的獨(dú)立的服務(wù)端,而將軟件集客戶端(Client)和服務(wù)端(Server)于一體。軟件基本定位是:遠(yuǎn)程輔助類工具軟件。

   Socket:咳……其實(shí)你可以花5分鐘時(shí)間將客戶端(Client)和服務(wù)端(Server)分離,并加入自啟動(dòng)的功能,如果夠狠的話,再加入關(guān)聯(lián)文件的功能,這不是一個(gè)截屏木馬?

    2.服務(wù)端(Server)實(shí)現(xiàn):采用C++ Builder的Socket Server控件來(lái)實(shí)現(xiàn)服務(wù)端的數(shù)據(jù)傳輸功能。主要功能:監(jiān)聽(tīng)本地計(jì)算機(jī)的指定端口,截獲本機(jī)屏幕信息,拷貝屏幕區(qū)域到自定義的位圖變量。

    Socket:為了達(dá)到提高傳輸效率,服務(wù)端根據(jù)在連接過(guò)程中所獲得的轉(zhuǎn)換參數(shù)將位圖轉(zhuǎn)換成JPGE格式后存入緩存區(qū),在與遠(yuǎn)程客戶端連接的前提下,將緩存區(qū)數(shù)據(jù)流發(fā)送至客戶端(Client)。

    3.客戶端(Client)實(shí)現(xiàn):利用Winsock API函數(shù)來(lái)定義用于本軟件網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)腟ockets。功能實(shí)現(xiàn):向遠(yuǎn)程主機(jī)服務(wù)端(Server)提出連接申請(qǐng),并在此過(guò)程中將JPGE轉(zhuǎn)換參數(shù)發(fā)送給服務(wù)端(Server)。在獲得連接的前提下,不斷接受遠(yuǎn)程服務(wù)端(Server)所發(fā)送至的包含遠(yuǎn)程主機(jī)屏幕信息的JPGE的數(shù)據(jù)流,并實(shí)時(shí)將所接受的圖像在本軟件的客戶區(qū)域(Client Region)上重繪,從而實(shí)現(xiàn)在本地計(jì)算機(jī)實(shí)時(shí)監(jiān)視遠(yuǎn)程計(jì)算機(jī)屏幕的目的。

    詳細(xì)功能設(shè)計(jì)

    上面大體分析了功能和需要,下一步一起來(lái)看看如何進(jìn)行詳細(xì)的功能設(shè)計(jì)。

1.客戶端(Client)

(1)客戶端與服務(wù)端之間網(wǎng)絡(luò)暢通狀況的檢測(cè)。編寫Ping模塊,此模塊發(fā)送一個(gè)ICMP echo request(ICMP協(xié)議回顯請(qǐng)求)至目標(biāo)主機(jī),如果獲得回顯,則向目標(biāo)主機(jī)發(fā)送連接請(qǐng)求。

(2)客戶端(Client)與服務(wù)端(Server)之間的數(shù)據(jù)傳輸。利用Winsock API函數(shù)來(lái)定義用于本軟件數(shù)據(jù)傳輸?shù)腟ockets。具體過(guò)程為:連接遠(yuǎn)程主機(jī)->返回有效SOCKET(使用Connect_Server())->向SOCKET寫字符串(使用Write_Socket())->向遠(yuǎn)程主機(jī)的指定端口發(fā)送字符串提供轉(zhuǎn)換參數(shù)(使用SendMsg())->動(dòng)態(tài)分配端口,并與SOCKET綁定->返回該SOCKET(使用BindSocket())->向遠(yuǎn)程主機(jī)的指定端口發(fā)送請(qǐng)求(使用SendStream())->從遠(yuǎn)程主機(jī)的指定端口接收數(shù)據(jù)流(使用RecvStream())。

(3)圖像重繪:使用Image控件將從遠(yuǎn)程主機(jī)發(fā)送到的JPGE圖像顯示。

2.服務(wù)端(Server)

(1)服務(wù)端(Server)功能的實(shí)現(xiàn)。使用C++ Builder的Socket Server控件編寫軟件的服務(wù)端(Server)。監(jiān)聽(tīng)本地計(jì)算機(jī)指定端口,接受由客戶端發(fā)送至的相關(guān)參數(shù),將參數(shù)傳遞給屏幕圖像截取模塊。

(2)屏幕圖像截取與傳輸步驟:讀取取得桌面的矩形區(qū)域范圍GetWindowRect()->創(chuàng)建內(nèi)存設(shè)備描述表從而定義位圖變量GetDC()->拷貝屏幕的指定區(qū)域到位圖BitBlt();->創(chuàng)建JPEG圖象將位圖轉(zhuǎn)化為JPEG格式->保存JPEG圖象信息至內(nèi)存數(shù)據(jù)流Assign(),SavetoStream()->將圖象信息數(shù)據(jù)流通過(guò)Sockets發(fā)送至客戶端(由SendStream()實(shí)現(xiàn))。

    程序流程圖



    數(shù)據(jù)結(jié)構(gòu)與算法

    在此對(duì)實(shí)現(xiàn)主要功能的類和方法做出說(shuō)明,對(duì)由IDE所生成的與可視化控件相關(guān)的方法在此不予詳細(xì)說(shuō)明。同時(shí)為配合新手學(xué)習(xí),代碼后附詳細(xì)功能注釋。

    1.所用的VCL中現(xiàn)成的類
TBitmap(位圖對(duì)象)類和TJPEGImage類。TBitmap(位圖)是VCL中抽象圖形類Graphics的一個(gè)對(duì)象,它可以用于在內(nèi)存中創(chuàng)建和處理圖像,也可以存儲(chǔ)圖像數(shù)據(jù)流。TBitmap包裝了VCL中的位圖操作,其屬性有Palette、Height、Width和TransparentColor等;TJPEGImage封裝了用于處理JPGE格式數(shù)據(jù)的Graphic類,它可以對(duì)以JPGE格式壓縮的圖像數(shù)據(jù)進(jìn)行創(chuàng)建和讀取。其屬性有:Height、Palette、Performance、PixelFormat、Scale、Width等。

    2.繼承于VCL中的類

(1)線程類TRecvStreamThread,繼承于TThread類:

class TRecvStreamThread : public TThrea
{
private:
protected:
        void __fastcall Execute(); //
public:
        __fastcall TRecvStreamThread(bool CreateSuspended);//接受數(shù)據(jù)的線程
        bool __fastcall LoadImage(TImage *Image1);//顯示圖像
        TImage *RemoteScreen;  // 顯示圖象的對(duì)象指針
        TStatusBar *StatusBar;  // 顯示狀態(tài)信息的對(duì)象指針
        AnsiString RemoteAddress;  // 遠(yuǎn)程主機(jī)IP
        int CL, CQ;  // 色深和圖象品質(zhì)
};

(2)主窗口類TMainForm,繼承于TForm類:

class TMainForm : public TForm
{
__published:
TMainMenu *MainMenu1;
     TToolButton *ToolButton14;
        ……
        ……//可視化控件相關(guān)聲明
        void __fastcall HelpAbout1Execute(TObject *Sender);
        void __fastcall FileExit1Execute(TObject *Sender);
        void __fastcall ServerSocket1ClientRead(TObject *Sender,
          TCustomWinSocket *Socket);
        void __fastcall ServerSocket1ClientError(TObject *Sender,
          TCustomWinSocket *Socket, TErrorEvent ErrorEvent,
          int &ErrorCode);
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall FileSaveAsItemClick(TObject *Sender);
        void __fastcall HideForm(TObject *Sender);
         ……//處理可視化控件的相關(guān)方法
private:
void __fastcall CreateMDIChild(const AnsiString sAddress, int CL, int CQ);
public:
virtual __fastcall TMainForm(TComponent *Owner);
};

(3)子窗口類TMDIChild:

class TMDIChild : public TForm
{
__published:
        ……//可視化控件相關(guān)聲明
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
        void __fastcall Image1DblClick(TObject *Sender);
         void __fastcall N3Click(TObject *Sender);
        void __fastcall N2Click(TObject *Sender);
         ……//處理可視化控件的相關(guān)方法
private:
public:
virtual __fastcall TMDIChild(TComponent *Owner);
        bool __fastcall LoadImage(void);  // 載入圖象
        AnsiString RemoteAddress;  // 遠(yuǎn)程主機(jī)IP
        int CL, CQ;  // 色深和圖象品質(zhì)
};

3.繼承類中的相關(guān)方法:

1)CaptureImage()——捕獲當(dāng)前屏幕并保存到Imagestream中。具體代碼如下:
void CaptureImage(int options, int level, int cq, TMemoryStream* imgstream)
{
LONG width,height;
RECT capRect;
HDC DesktopDC;
switch (options) {
  case CM_ENTIRESCREEN:  // 捕獲整個(gè)屏幕
   // 取得桌面的矩形區(qū)域范圍
   GetWindowRect(GetDesktopWindow(),&capRect);  
  break;
  case CM_ACTIVEWINDOW:  // 捕獲當(dāng)前窗口
   HWND ForegWin;
   ForegWin = GetForegroundWindow();  // 取得當(dāng)前窗口句柄
   if (!ForegWin)
    ForegWin = GetDesktopWindow();
   GetWindowRect(ForegWin,&capRect);  // 取得當(dāng)前窗口的矩形區(qū)域范圍
  break;
}
DesktopDC = GetDC(GetDesktopWindow());  // 創(chuàng)建內(nèi)存設(shè)備描述表
width = capRect.right - capRect.left;
height = capRect.bottom - capRect.top;
Graphics::TBitmap *bBitmap;  // 定義位圖變量
try {
  bBitmap = new Graphics::TBitmap(); // 創(chuàng)建位圖
  bBitmap->Width=width;
  bBitmap->Height=height;
  if ((level>0)&&(level<8))
   bBitmap->PixelFormat = TPixelFormat(level);  // 設(shè)定色深
  // 拷貝屏幕的指定區(qū)域到位圖
  BitBlt(bBitmap->Canvas->Handle,0,0,width,height,DesktopDC,
   capRect.left,capRect.top,SRCCOPY);
  if (cq>=0) {
   TJPEGImage *jpeg;
   try {
    jpeg = new TJPEGImage;  // 創(chuàng)建JPEG圖象
    jpeg->CompressionQuality = cq;  // 設(shè)定圖象品質(zhì)
    jpeg->Assign(bBitmap);  // 將位圖轉(zhuǎn)化為JPEG格式
    jpeg->SaveToStream(imgstream);  // 保存JPEG圖象信息
   }
    __finally {
    delete jpeg;  // 釋放資源
   }
  }
  else {
   bBitmap->SaveToStream(imgstream);  // 保存位圖信息
  }
}
__finally {
  delete bBitmap;  // 釋放資源
}
}

(2)ServerSocket1ClientRead()——捕獲并發(fā)送自己的屏幕圖象。具體代碼如下:

Void __fastcall TMainForm::ServerSocket1ClientRead(TObject *Sender,TCustomWinSocket *Socket)
{
AnsiString sRecvString = Socket->ReceiveText();  // 保存接收到的字符串
AnsiString sRemoteAddress = Socket->RemoteAddress;  // 保存對(duì)方IP
int CL,CQ;
u_short port;
// 將接收到的字符串分解為接收端口、色深、品質(zhì)3個(gè)參數(shù)
int pos = sRecvString.Pos("n");
// 接收端口
port = u_short(StrToIntDef(sRecvString.SubString(1,pos-1),0));
sRecvString = sRecvString.SubString(pos+1,sRecvString.Length()-pos);
pos = sRecvString.Pos("n");
// 色深
CL = StrToIntDef(sRecvString.SubString(1,pos-1),0);
sRecvString = sRecvString.SubString(pos+1,sRecvString.Length()-pos);
pos = sRecvString.Pos("n");
// 品質(zhì)
CQ = StrToIntDef(sRecvString.SubString(1,pos-1),0);
if (port) {
  TMemoryStream *ImageStream;  // 定義數(shù)據(jù)流
  try {
   ImageStream = new TMemoryStream;  // 分配內(nèi)存
   // 捕獲當(dāng)前屏幕并保存到ImageStream中
   CaptureImage(CM_ENTIRESCREEN, CL, CQ, ImageStream);
   // 發(fā)送ImageStream到接收端口
   if (!SendStream(sRemoteAddress, port, ImageStream))
    MessageBox(0,"發(fā)送數(shù)據(jù)流失敗","EagleEye",MB_ICONERROR);
  }
  __finally {
   delete ImageStream;  // 釋放資源
  }
}
}

(3)LoadImage ()——接受服務(wù)端屏幕數(shù)據(jù)并在本地計(jì)算機(jī)上重繪圖像。具體代碼如下:

bool __fastcall TRecvStreamThread::LoadImage(TImage *Image1)
{
CPingReply reply;
CPing PingHost;
bool bRtn = false;  // 函數(shù)返回值初始為FALSE
StatusBar->SimpleText = "正在連接主機(jī)...";
// 先PING主機(jī),檢測(cè)網(wǎng)絡(luò)是否暢通
bool rtn = PingHost.Ping(RemoteAddress.c_str(),reply,64,4000,32);
if (rtn) {
        u_short RecvPort=0;
        TMemoryStream *Stream;
        try{
         for(int i=1;i<=(ConfigForm->times);i++) //進(jìn)入循環(huán),不斷獲得遠(yuǎn)程桌面圖像
         {  // 定義一個(gè)數(shù)據(jù)流并分配內(nèi)存
   Stream = new TMemoryStream;
            TJPEGImage *jpeg;  // 定義JPEG圖象
               try{
                 jpeg = new TJPEGImage;  // 分配內(nèi)存
                 int RecvSocket = BindSocket(&RecvPort); //動(dòng)態(tài)分配接收端口
                    if (RecvSocket)
{  // 將接收端口和色深、圖象品質(zhì)合成一條命令,參數(shù)之間以'n'分隔
     AnsiString Msg = IntToStr(RecvPort) + "n" +IntToStr(CL) + "n" +IntToStr(CQ) + "n";
     Application->ProcessMessages();  // 處理系統(tǒng)消息
// 向遠(yuǎn)程主機(jī)發(fā)送命令
if (SendMsg(RemoteAddress,LISTENPORT,Msg))
{ // 開始接收?qǐng)D象到數(shù)據(jù)流中
if (RecvStream(RecvSocket,Stream))
{
   StatusBar->SimpleText = "正在接收數(shù)據(jù)...";
  // 從數(shù)據(jù)流中載入圖象
  jpeg->LoadFromStream(Stream); // 顯示圖象
  Image1->Picture->Bitmap->Assign(jpeg);  //MessageBeep(MB_OK);
// 發(fā)出提示聲音,返回值為TRUE,表示成功
  bRtn = true; }
            else
    MessageBox(0,"接收數(shù)據(jù)流失敗","EagleEye",MB_ICONERROR); }
  else
   MessageBox(0,("無(wú)法與主機(jī)'"+ RemoteAddress +"'建立連接").c_str(),"EagleEye",MB_ICONERROR); }
      else
  MessageBox(0,"分配端口失敗,無(wú)法繼續(xù)接收數(shù)據(jù)","EagleEye",MB_ICONERROR);}
__finally {
delete jpeg;  // 釋放資源
}
RecvPort+=1;
}
}
__finally {
delete Stream;  // 釋放資源
}
}
else
  MessageBox(0,("主機(jī)'"+RemoteAddress+"'沒(méi)有響應(yīng)").c_str(),"EagleEye",MB_ICONERROR);
return bRtn;
}

    大體流程就是這樣,中間因?yàn)槠膯?wèn)題省略掉了Ping模塊的編寫,不過(guò)已經(jīng)提供了全部的程序代碼,大家可以自己看看。

后期程序測(cè)試
軟件運(yùn)行界面如圖1所示:


圖1

軟件運(yùn)行平臺(tái):Windows 98/2000/XP/2003

軟件所實(shí)現(xiàn)功能:多窗口兩種方式(可以選擇截圖或?qū)崟r(shí)監(jiān)視的方式)同時(shí)監(jiān)

視多臺(tái)遠(yuǎn)程計(jì)算機(jī);用戶可以設(shè)定監(jiān)視時(shí)間、監(jiān)視方式;用戶可以實(shí)現(xiàn)對(duì)本地計(jì)算機(jī)上顯示的遠(yuǎn)程屏幕圖像的存儲(chǔ),可以將圖像拷貝到剪貼板;用戶可以選擇程序的運(yùn)行方式,可以是正常模式,也可以使程序隱藏于后臺(tái)運(yùn)行。
軟件運(yùn)行最低配置:由于條件限制沒(méi)能在更低配置的機(jī)器測(cè)試,所以最低運(yùn)行配置數(shù)據(jù)不準(zhǔn)確。軟件在P4賽揚(yáng)1.6G,128M內(nèi)存,133MHZ系統(tǒng)總線,操作系統(tǒng)為Windows 98的計(jì)算機(jī)上運(yùn)行良好。

    軟件在100.0Mbps的局域網(wǎng)中對(duì)遠(yuǎn)程主機(jī)的實(shí)時(shí)監(jiān)視圖像傳輸速率可以234幀/min;在帶寬為512kb/s的ADSL寬帶用戶的計(jì)算機(jī)上可以達(dá)到196幀/min;對(duì)帶寬為56kb/s的撥號(hào)上網(wǎng)用戶無(wú)法實(shí)現(xiàn)實(shí)時(shí)監(jiān)視功能,只能使用截圖方式對(duì)其監(jiān)視。

    結(jié)語(yǔ)

    經(jīng)過(guò)二十一天的設(shè)計(jì)和開發(fā),遠(yuǎn)程屏幕監(jiān)視軟件EagleEye基本開發(fā)完畢。其功能基本符合需求,但由于設(shè)計(jì)時(shí)間太短,該軟件還有許多不盡如人意的地方,比如出錯(cuò)處理不夠周全,圖像傳輸效率不是很高等一些方面問(wèn)題,這些都有待進(jìn)一步改善。

    通過(guò)這軟件設(shè)計(jì),鞏固了編程開發(fā)工具Borland C++ Builder 6.0的使用技能,它使用面向?qū)ο蟮拈_發(fā)技術(shù),能夠輕松開發(fā)出功能強(qiáng)大的應(yīng)用程序。使用與Borland C++ Builder 6.0相配套的第三方面控件能夠快速高效地制作美觀的用戶界面。使用其自帶的相關(guān)控件可以快速、隨意地制作出用戶需要的各種形式的程序模塊。
最后感謝《頭老摺犯藝獯甕陡宓幕帷T詿耍蜆笊緄墓憒蠖琳吲笥衙恰⒈嗉潛硎咀鈧孕牡母行弧P形牟執(zhí)伲纈脅蛔憒砦籩Γ肱樂(lè)附蹋篍mail:liuyit-123@163.com

    Socket:如果軟件在你的計(jì)算機(jī)無(wú)法編譯,原因是你計(jì)算機(jī)上的C++Builder沒(méi)有安裝SUIpackL控件或控件的搜索路徑與我的計(jì)算機(jī)的路徑不同。安裝后控件后修改EagleEye工程代碼中的視圖資源文件的路徑為你計(jì)算機(jī)上SUIpack的搜索路徑即可。
(文中涉及到的程序及源代碼已收錄到雜志配套光盤“雜志相關(guān)”欄目,按文章名查找即可)

萬(wàn)企互聯(lián)
標(biāo)簽: