目录
实现思路
1、通过windows脚本,一定时间间隔进行屏幕抓拍
3、powershell为windows系统自带语言,可以无缝嵌入运行
4、所有抓拍的屏幕照片,按照时间排序,可以实现比较完整的用户操作监控。
监控电脑屏幕?
如何实现对电脑屏幕及其操作的监控?
对于屏幕的监控,一般都是针对windows操作系统
因为对于大部分Linux系统,都是无桌面状态,没有监控界面的必要。
提供一种监控靶机屏幕的解决方案及具体实现方法。
实现思路
1、通过windows脚本,一定时间间隔进行屏幕抓拍
2、脚本通过powershell语言实现
3、powershell为windows系统自带语言,可以无缝嵌入运行
4、所有抓拍的屏幕照片,按照时间排序,可以实现比较完整的用户操作监控。
实现效果如下gif:
PowerShell简介
如果是从知名度和用户的使用量来谈的话,PowerShell相较当下流行的一些面向对象的语言来说应该是逊色太多太多了,但是,作为一款系统内置的脚本语言,和Linux里的Shell一样,说其强大当然是不容置喙的。
WindowsPowerShell是一种命令行外壳程序和脚本环境,是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境,使命令行用户和脚本编写者可以利用.NET Framework的强大功能。你可以把它看成是命令行提示符cmd.exe的扩充,不对,应当是颠覆。powershell需要.NET环境的支持,同时支持.NET对象。
微软之所以将Powershell定位为Power,并不是夸大其词,因为它完全支持对象。其可读性,易用性,可以位居当前所有shell之首。
如何使用PowerShell
1)Win键+R,输入cmd,然后cmd会话框里再输入powershell
2)Win键+R,输入powershell,即来到其会话框
3)或是直接找到Windows PowerShell程序双击或是管理员打开
监控屏幕脚本实现
1、执行截屏的函数
#Define helper function that generates and saves screenshotFunction Get-Screenshot { $ScreenBounds = [Windows.Forms.SystemInformation]::VirtualScreen $ScreenshotObject = New-Object Drawing.Bitmap $ScreenBounds.Width, $ScreenBounds.Height $DrawingGraphics = [Drawing.Graphics]::FromImage($ScreenshotObject) $DrawingGraphics.CopyFromScreen( $ScreenBounds.Location, [Drawing.Point]::Empty, $ScreenBounds.Size) $DrawingGraphics.Dispose() $ScreenshotObject.Save($FilePath) $ScreenshotObject.Dispose() }
2、将截屏图片按时间命令并按路径存储
Try { #load required assembly Add-Type -Assembly System.Windows.Forms Do { #get the current time and build the filename from it $Time = (Get-Date) [String] $FileName = "$($Time.Month)" $FileName += '-' $FileName += "$($Time.Day)" $FileName += '-' $FileName += "$($Time.Year)" $FileName += '-' $FileName += "$($Time.Hour)" $FileName += '-' $FileName += "$($Time.Minute)" $FileName += '-' $FileName += "$($Time.Second)" $FileName += '.png' #use join-path to add path to filename [String] $FilePath = (Join-Path $Path $FileName) #run screenshot function Get-Screenshot Write-Verbose "Saved screenshot to $FilePath. Sleeping for $Interval seconds" Start-Sleep -Seconds $Interval } #note that this will run once regardless if the specified time as passed While ((Get-Date -Format HH:mm) -lt $EndTime) }
3、脚本执行方法
#执行命令Get-TimedScreenshot#path:指定存储路径#Interval:截屏时间间隔,单位 秒#EndTime:脚本停止时间,如果不设置,会一直执行
PS C:\> Get-TimedScreenshot -Path C:\监控截屏 -Interval 1 -EndTime 19:00