找回密码
 加入
搜索
查看: 5413|回复: 19

关于从内存中载入图片的问题

  [复制链接]
发表于 2009-7-6 23:15:36 | 显示全部楼层 |阅读模式
本帖最后由 gto250 于 2009-7-12 07:06 编辑

公司连入外网的服务器现在由我负责,但是常常有人到那台机子上玩,而我的办公地点是在另一条街道的,现在打算自己做个屏幕监控的小程序,只是看看有没有人在那里玩。现在遇到的问题就是当我截取服务器上的屏幕图片之后,通过tcp传输到我的电脑上,如何能直接从内存中载入图片显示出来,而不是保存了以后再载入显示。
请各位兄弟援手相助




发表于 2009-7-6 23:23:37 | 显示全部楼层
很有难度啊
发表于 2009-7-7 11:13:55 | 显示全部楼层
哦 可以 不过要先把图片序列化 然后就可以直接当字符串传送了

我的办法是 在管理机上架设http, php写服务端 autoit作为客户端...

http://www.autoitx.com/forum.php?mod=viewthread&tid=7223

php部分么 知道怎么用$_POST或者$_GET就ok了
发表于 2009-7-8 16:05:06 | 显示全部楼层
花生壳,远程监控
 楼主| 发表于 2009-7-8 18:49:05 | 显示全部楼层
如果用其他软件的话,我的问题也就失去了意义了
发表于 2009-7-9 01:39:39 | 显示全部楼层
发表于 2009-7-9 16:55:40 | 显示全部楼层
本帖最后由 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'

这个方法比较简单,也相对隐蔽
发表于 2009-7-10 15:30:01 | 显示全部楼层
如果你坚决不打算生成文件的话,可以参考官方的一个案例:
http://www.autoitscript.com/foru ... p;fromsearch=1&
要对GDI+有个更深入的了解了
发表于 2009-7-10 16:28:40 | 显示全部楼层
这个比较有研究价值,大家继续深入讨论下
发表于 2009-7-11 16:09:59 | 显示全部楼层
用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

评分

参与人数 1金钱 +10 贡献 +5 收起 理由
lynfr8 + 10 + 5 原创内容,感谢你对论坛的支持;希望继续发 ...

查看全部评分

发表于 2009-7-11 16:13:04 | 显示全部楼层
接下来是接收端了:

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


其实你还可以想一想通过接收端发送请求的方式让发送端发送信息
发表于 2009-7-11 16:27:31 | 显示全部楼层
本帖最后由 caodongchun 于 2009-7-11 16:56 编辑

上述请求方式的案例如附件,包含了修改过的UDF
注意:上述说的修改Global $giJPGQuality = 10是改变了画质的品质,我看这个品质是可以接受的,究竟是用来监控而不是作图,较小的文件传输速度也会加快,并较安全!
如果再修改成由send方首先发ip到rev方的话,就更有有点像木马的感觉了:(

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2009-7-11 18:52:29 | 显示全部楼层
我看类似这种东西应该直接给你的领导。哈哈,完善中吧:)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +10 贡献 +5 收起 理由
gto250 + 10 + 5 非常感谢你

查看全部评分

发表于 2009-7-12 15:20:01 | 显示全部楼层
呵,这是个很牛的应用!
发表于 2009-7-12 16:37:10 | 显示全部楼层
基本算是写完了,如果网管可以封装ghost版的影子系统,一般来讲就不会有任何问题了!
http://www.autoitx.com/forum.php?mod=viewthread&tid=8298
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-28 05:05 , Processed in 0.083721 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表