。1)教師用機(jī)可以循環(huán)顯示學(xué)生計(jì)算機(jī)的顯示器上的畫(huà)面。
(2)教師用機(jī)可以動(dòng)態(tài)顯示某一學(xué)生計(jì)算機(jī)的顯示器上的畫(huà)面。
。3)教師用機(jī)可以對(duì)學(xué)生用計(jì)算機(jī)發(fā)出警告信息和控制信息。
。4)學(xué)生用計(jì)算機(jī)開(kāi)機(jī)自動(dòng)運(yùn)行服務(wù)端監(jiān)控程序。
。5)為了防止學(xué)生用計(jì)算機(jī)的服務(wù)端監(jiān)控程序,被學(xué)生發(fā)現(xiàn)用Ctrl+Alt+Del關(guān)閉,在Ctrl+Alt+Del對(duì)話框中必須隱藏程序。同時(shí),應(yīng)該隱藏程序在任務(wù)欄的按鈕。
本文結(jié)合應(yīng)用實(shí)踐,重點(diǎn)向大家介紹在Delphi7.0中可以采用的兩種實(shí)現(xiàn)屏幕抓圖技術(shù)的操作方法。
程序?qū)崿F(xiàn)
。1)抓取屏幕圖像的難點(diǎn)有兩個(gè):一是如何奪取屏幕的句柄,二是知道屏幕句柄后如何獲取屏幕的圖像。Borland公司的設(shè)計(jì)人員用畫(huà)布(Tcanvas)對(duì)象封裝了Windows的大部分圖形輸出功能,可以通過(guò)它以更直觀的方式和Windows的屏幕打交道,而不必關(guān)心令人頭疼的Windows API函數(shù)。具體程序如下:
procedure TForm1.Timer1Timer(Sender:TObject);//抓取屏幕,并保存到Image控件中 var Fullscreen:Tbitmap; FullscreenCanvas:TCanvas; dc:HDC; begin Fullscreen:=TBitmap.Create; //創(chuàng)建一個(gè)BITMAP來(lái)存放圖象 Fullscreen.Width:=screen.width; Fullscreen.Height:=screen.Height; DC:=GetDC(0); //取得屏幕的DC,參數(shù)0指的是屏幕 FullscreenCanvas:=TCanvas.Create; //創(chuàng)建一個(gè)CANVAS對(duì)象 FullscreenCanvas.Handle:=DC; Fullscreen.Canvas.CopyRect(Rect(0,0,screen.Width,screen.Height), fullscreenCanvas,Rect(0,0,Screen.Width,Screen.Height)); //把整個(gè)屏幕復(fù)制到BITMAP中 FullscreenCanvas.Free; //釋放CANVAS對(duì)象 ReleaseDC(0,DC); //釋放DC //******************************* image1.picture.Bitmap:=fullscreen; //拷貝下的圖象賦給IMAGE對(duì)象 image1.Width:=fullscreen.Width; image1.Height:=fullscreen.Height; fullscreen.free; //釋放bitmap form1.WindowState:=wsNormal; //復(fù)原窗口狀態(tài) form1.show; //顯示窗口 messagebeep(1); //BEEP叫一聲,報(bào)告圖象已經(jīng)截取好了。 end; |
。2)Delphi的第三方控件ScreenCapture,它是一個(gè)很好的免費(fèi)的截圖控件,可以輕松抓取任意大小(全屏當(dāng)然行)、屏幕的任何位置,還可以設(shè)置所截圖像的形狀、以及用何種模式截圖。下面介紹的是用TcmWindow模式截圖,使用非常簡(jiǎn)單,使用效果可以與著名的抓圖軟件SnagIt32媲美。
procedure TForm1.BtnStartClick(Sender:TObject); begin ScreenCapture1.start; //開(kāi)始截圖 end; //當(dāng)截取屏幕成功時(shí),此事件發(fā)生 procedure TForm1.ScreenCapture1Capture(Sender:TObject;Bitmap:TBitmap); begin //調(diào)整滾動(dòng)窗口的大小以適應(yīng)截獲圖像的大小 Scrollbox1.HorzScrollBar.Range:= Image1.width; Scrollbox1.VertScrollBar.Range:= Image1.height; end; procedure TForm1.FormCreate(Sender:TObject); begin //載入entntacp.dll文件 BtnStart.enabled:= ScreenCapture1.dllavailable; //顯示版本信息 caption:= '屏幕抓圖軟件' + ScreenCapture1.version; end; //當(dāng)沒(méi)有足夠的內(nèi)存支持截取屏幕時(shí),此事件發(fā)生 procedure TForm1.ScreenCapture1Error(Sender:TObject); begin MessageDlg('屏幕截取時(shí)發(fā)生一個(gè)錯(cuò)誤!請(qǐng)關(guān)閉其他應(yīng)用程序以獲得更多內(nèi)存資源.', mtError,[mbOK],0); end; //當(dāng)用戶按“Esc”鍵,即取消屏幕截取時(shí),此事件發(fā)生 procedure TForm1.ScreenCapture1UserCancelled(Sender:TObject); begin MessageDlg('用戶取消屏幕截取。',mtInformation,[mbOK],0); end; |
運(yùn)行程序,效果如圖1和圖2所示。
![]() 圖1 運(yùn)行效果圖 ![]() 圖2 抓取圖像后的效果圖 |
結(jié)論
通過(guò)對(duì)以上兩種程序代碼的調(diào)試運(yùn)行,使用第三方控件的方法更易于設(shè)計(jì)實(shí)現(xiàn),文中的程序代碼全部在Win2000和Delphi7.0環(huán)境下調(diào)試通過(guò)。