显示标签为“AutoIT”的博文。显示所有博文
显示标签为“AutoIT”的博文。显示所有博文

2009年8月1日星期六

用Blog来控TightVNC

任务紧的时候,在家里也想看办公室的电脑的一些运行结果,于是就在办公室和家里装了TightVNC,公司里有防火墙,就用VNC server的主动模式,但是这种模式必须VNC viewer先运行在监听模式,但这时我的电脑在家里,是关闭的,所以就想到以下的方法:

  1. 办公室电脑用AutoIT,定时从我的Blog上下载一个网页(使用wget命令行工具),然后检查该网页是是否含有字串‘runwinvncserverlistenon’,如果有的话,就用命令行执行Vnc server,如果没有,过2分钟再检查;
  2. 从办公室回到家后,如果需要看办公室电脑,就运行Vnc viewer,listen 模式,到Blog上将文字改为runwinvncserverlistenon;
  3. 这样最多过2分钟,办公室电脑就会连过来,连过来后再把Blog上文字改为其他的,防止不停有新的winvnc连接;
注1:如果用Teamviewer的话,稍微有些不一样:在检查到字串符合后,就启动TeamviewerQS,然后将屏幕截屏,用sendEmail命令行工具发送截屏图片到自己的邮箱,收到邮件后,根据用户ID和password从家里登录就可以了。 有关sendEmail的命令格式,可以参见我上面的文章。(其实只要离开公司时开启TeamviewerQS就可以了,这样做只是介绍一种方法)
注2:AutoIT是一个脚本工具,在脚本程序中可以模拟鼠标,键盘动作,可以读写文件,等等,用这个工具可以进行一些重复性的工作。
Teamviewer,TightVNC是远程桌面工具。Teamviewer不免费,可以直接穿越防火墙;VNC免费,但不能直接穿过防火墙。


2009年7月24日星期五

AutoIT+FastStone Capture自动记录测试结果

调试程序的时候,有时候会碰到这样的情况:我们希望的测试结果可能要等很长时间才能出来,但这个时间不确定,我们想用这个测试时间去做其他的事情,但有担心错过测试数据。
我现在就遇到了这样的情况:我将一些调试数据写到CPU的内存中,然后从内存显示窗口中去看,因为内存大小有限,所以时间长的话后面的数据会将前面的数据覆盖,但我也不知道这个数据什么时候能出来。

因此就想到用AutoIT+FastStone Capture来完成这个工作。
工作原理:在AutoIT脚本中将鼠标定位到内存显示窗口,然后在脚本中调用FastStone Capture的截屏热键,保存图像,自己设定好延时时间,就可以了。要将FastStone Capture设置为自动保存模式,调用热键后,直接将图像存成文件,不会打开Faststone的编辑器。


建议将图像存成png或者gif格式,这样不见文件小,而且效果要比jpg好很多,jpg是有损压缩格式,png和gif是无损压缩格式。

注:你也可以用其他的热键程序和截图软件来完成这个功能。
AutoIT是一个可以根据脚本完成用户指定的工作的免费软件,功能很强大,可以模拟鼠标移动,按键输入等工作。
FastStone Capture是一个免费截图软件。

以下是脚本:
#cs ----------------------------------------------------------------------------

AutoIt Version: 3.3.0.0
Author: Michael

Script Function:
Start the Faststone capture 5.3, and will capture the memory display automatically.

#ce ----------------------------------------------------------------------------

$i=1
Dim $posdl[4],$posm[4]
; Run FastStone Capture
Run("C:\Program Files\FastStone Capture 5.3\FSCapture.exe");

WinWaitActive("FastStone Capture", "", 10)

Do
;Move mouse to the memory display window
;Get download display window pos
$posm = WinGetPos ( "DownLoad Display")
;Get memory display grid's position
$posdl = ControlGetPos ( "DownLoad Display", "", "[CLASS:TStringGrid]" )
;Move mouse to memory display grid
MouseMove($posm[0] + $posdl[0] + 15, $posm[1] + $posdl[1] + $posdl[3]/2,0)

; Always active the download display window
WinActivate ( "DownLoad Display")

; Click button 'Display Mem'
ControlClick("DownLoad Display", "", "[TEXT:Display Mem]")
ControlClick("DownLoad Display", "", "[CLASS:TStringGrid]")

; Send Hotkey Alt+PrintScreen to capture the data window
Send("!{PRINTSCREEN}")

Sleep(2000)

MouseClick("left")
;wait 15 minutes
Sleep(900000)
Until $i=0