关于从内存中载入图片的问题
本帖最后由 gto250 于 2009-7-12 07:06 编辑公司连入外网的服务器现在由我负责,但是常常有人到那台机子上玩,而我的办公地点是在另一条街道的,现在打算自己做个屏幕监控的小程序,只是看看有没有人在那里玩。现在遇到的问题就是当我截取服务器上的屏幕图片之后,通过tcp传输到我的电脑上,如何能直接从内存中载入图片显示出来,而不是保存了以后再载入显示。
请各位兄弟援手相助
http://lwc.nhome.cn/code/showip.asp 很有难度啊 哦 可以 不过要先把图片序列化 然后就可以直接当字符串传送了
我的办法是 在管理机上架设http, php写服务端 autoit作为客户端...
http://www.autoitx.com/forum.php?mod=viewthread&tid=7223
php部分么 知道怎么用$_POST或者$_GET就ok了 花生壳,远程监控 如果用其他软件的话,我的问题也就失去了意义了 参考http://www.autoitscript.com/forum/index.php?showtopic=64388 本帖最后由 caodongchun 于 2009-7-9 16:57 编辑
#include 'ScreenCapture.au3'
$tempfile = _TempFile()
_ScreenCapture_Capture($tempfile)
$file = FileOpen($tempfile, 16)
$str = FileRead($file)
FileClose($file)
FileDelete($tempfile)
Func _TempFile($s_DirectoryName = @TempDir, $s_FilePrefix = "~", $s_FileExtension = ".tmp", $i_RandomLength = 7)
Local $s_TempName
; Check parameters
If Not FileExists($s_DirectoryName) Then $s_DirectoryName = @TempDir ; First reset to default temp dir
If Not FileExists($s_DirectoryName) Then $s_DirectoryName = @ScriptDir ; Still wrong then set to Scriptdir
; add trailing \ for directory name
If StringRight($s_DirectoryName, 1) <> "\" Then $s_DirectoryName = $s_DirectoryName & "\"
;
Do
$s_TempName = ""
While StringLen($s_TempName) < $i_RandomLength
$s_TempName = $s_TempName & Chr(Random(97, 122, 1))
WEnd
$s_TempName = $s_DirectoryName & $s_FilePrefix & $s_TempName & $s_FileExtension
Until Not FileExists($s_TempName)
Return ($s_TempName)
EndFunc ;==>_TempFile
'ScreenCapture.au3'中165行下加一行:
If $sExt='tmp' Then $sExt='jpg'
这个方法比较简单,也相对隐蔽 如果你坚决不打算生成文件的话,可以参考官方的一个案例:
http://www.autoitscript.com/forum/index.php?showtopic=96236&st=0&p=691853&hl=_GDIPlus_BitmapLockBits&fromsearch=1&
要对GDI+有个更深入的了解了 这个比较有研究价值,大家继续深入讨论下 用GDI+其实没什么意义,使用tmp文件还是比较具有稳定性的,从建立文件到读出字符串直至删除文件用不了一秒钟,且文件生成在temp文件夹内,代码实现也相当之简单!
先给你一个发送端的例子:
;修改UDF函数16行:Global $giJPGQuality = 10
;UDF 165行下加一行:If $sExt='tmp' Then $sExt='jpg'
#include 'ScreenCapture.au3'
UDPStartup()
While 1
$socket = UDPOpen("192.160.0.101", 65532)
If @error<>0 Then
Sleep(200)
Else
ExitLoop
EndIf
WEnd
AdlibEnable('sct',30000)
Func sct()
$tempfile = _TempFile()
_ScreenCapture_Capture($tempfile)
$file = FileOpen($tempfile, 16)
$str = FileRead($file)
FileClose($file)
FileDelete($tempfile)
$status = UDPSend($socket, $str)
EndFunc ;==>sct
While 1
Sleep(100)
WEnd
Func _TempFile($s_DirectoryName = @TempDir, $s_FilePrefix = "~", $s_FileExtension = ".tmp", $i_RandomLength = 7)
Local $s_TempName
; Check parameters
If Not FileExists($s_DirectoryName) Then $s_DirectoryName = @TempDir ; First reset to default temp dir
If Not FileExists($s_DirectoryName) Then $s_DirectoryName = @ScriptDir ; Still wrong then set to Scriptdir
; add trailing \ for directory name
If StringRight($s_DirectoryName, 1) <> "\" Then $s_DirectoryName = $s_DirectoryName & "\"
;
Do
$s_TempName = ""
While StringLen($s_TempName) < $i_RandomLength
$s_TempName = $s_TempName & Chr(Random(97, 122, 1))
WEnd
$s_TempName = $s_DirectoryName & $s_FilePrefix & $s_TempName & $s_FileExtension
Until Not FileExists($s_TempName)
Return ($s_TempName)
EndFunc ;==>_TempFile
接下来是接收端了:
UDPStartup()
While 1
$socket = UDPBind("192.160.0.101", 65532)
If @error <> 0 Then
Sleep(200)
Else
ExitLoop
EndIf
WEnd
While 1
$data = UDPRecv($socket, 90000)
If $data <> "" Then
$file=FileOpen('2.jpg',18)
FileWrite($file,$data)
FileClose($file)
EndIf
sleep(1000)
WEnd
其实你还可以想一想通过接收端发送请求的方式让发送端发送信息 本帖最后由 caodongchun 于 2009-7-11 16:56 编辑
上述请求方式的案例如附件,包含了修改过的UDF
注意:上述说的修改Global $giJPGQuality = 10是改变了画质的品质,我看这个品质是可以接受的,究竟是用来监控而不是作图,较小的文件传输速度也会加快,并较安全!
如果再修改成由send方首先发ip到rev方的话,就更有有点像木马的感觉了:( 我看类似这种东西应该直接给你的领导。哈哈,完善中吧:) 呵,这是个很牛的应用! 基本算是写完了,如果网管可以封装ghost版的影子系统,一般来讲就不会有任何问题了!
http://www.autoitx.com/forum.php?mod=viewthread&tid=8298
页:
[1]
2