2012-07-12 715 views
0

因此,我通过WinSSHD(从Ubuntu)获得了一个到Windows XP盒子的SSH会话。我编写了一个小型的Python程序,用pywin32截图。一切工作正常,当我直接在正常的“桌面”会话,但如果我SSH在运行的XP盒脚本并运行该脚本失败的脚本:在Windows上通过SSH获取桌面的屏幕截图

Traceback (most recent call last):                     
    File "ss.py", line 38, in <module>                     
    win32_ss()                          
    File "ss.py", line 19, in win32_ss                     
    cDC.BitBlt((0, 0),(w, h) , dcObj, (0, 0), win32con.SRCCOPY)              
win32ui.error: BitBlt failed 

我假定这是因为SSH会话与XP会话不同的会话,并且无法访问“桌面”显示设备。我发现了如何做到这一点(我想这就是我想要做的)在Linux参考:

DISPLAY=:0.0 import -window root /tmp/shot.png 

我想我正在寻找的是如何在Windows中执行此操作。再次,我使用Python并可以安装任何需要的模块。我目前使用pywin32,因为这比PIL快得多。

回答

0

我认为SSH是问题所在。我不确定SSH是否是最好的方法。最好的方法是在Windows的最后做截图工作。我最近做了类似的事情。我想截取在Internet Explorer中打开的网页的截图,并且我正在使用Selenium Webdriver用于此目的的Python绑定。

我所做的是我决定在TCP套接字的帮助下完成它。我只写了一个非常简单的Python脚本,它在Windows机器上打开一个TCP套接字并监听连接。只要它收到连接,它就会执行截图的工作。所以在你的情况下,它可以在那里截取屏幕截图并保存在本地,然后脚本可以SSH到你想要这个文件的系统。

希望这会有所帮助。

+0

我最终创建了一个带有zeromq的“截图服务器”,以便在“桌面”会话中发送请求时发送截图。使用zeromq的IPC会更容易(也更快,我认为),但它在Windows上不受支持,因此它必须使用localhost TCP。 Anywho,感谢您的输入! – DaveO 2012-07-12 23:06:46