yoshubom 发表于 2012-4-6 06:16:47

关于在远程服务器上截图的问题。

我有一个需求,就是在远程的服务器上每隔一定时间截取屏幕。我尝试着用计划任务和_ScreenCapture_Capture来实现,但是发现截取到的图片都是漆黑的一片。不知道有什么好的方法可以满足我这个需求?请高手指教,谢谢!

menfan1 发表于 2012-4-6 09:11:47

C/S--TCP.au3

zch11230 发表于 2012-4-6 11:51:41

是不是因为服务器长时间没有人操作 显示器自动关闭了 所以你截图也是黑的试试在截图之前发送一个模拟鼠标或者键盘的操作(mousemove,send) 然后延时一会儿再试试
还有就是在电源设置里面把关闭显示器 关闭硬盘 待机的时间通通改为永不。

502762378 发表于 2012-4-7 02:08:56

测试截取到的图片是正常的吗?如果是我直接找个截图工具设置快捷键循环发送了

pusofalse 发表于 2012-4-7 06:39:03

被当做计划任务来执行的程序,默认是工作在SADesktop桌面中,这个桌面中的内容不会显示在屏幕上,看下_ScreenCapture_Capture函数的内部工作原理吧,先调用GetDesktopWindow获取当前线程所处桌面的窗口句柄,再GetDC获取设备场景。_ScreenCapture_Capture真没有什么BUG,也不是显示器关闭的原因,在_ScreenCapture_Capture之前,先调用User32.dll中的SetThreadDesktop函数设置一下当前线程所属的桌面就好了。或者,如果楼主兄是调用at命令来添加计划任务,指定/interactive参数也能解决问题。

yoshubom 发表于 2012-4-7 07:52:16

被当做计划任务来执行的程序,默认是工作在SADesktop桌面中,这个桌面中的内容不会显示在屏幕上,看下_Scre ...
pusofalse 发表于 2012-4-7 06:39 http://www.autoitx.com/images/common/back.gif

多谢多谢,超级版主讲得实在是太好了,再次感谢!

yoshubom 发表于 2012-4-9 09:50:04

能说一下如何使用USER32.dll 的SetThreadDesktop 方法吗?实在是查不到。

yoshubom 发表于 2012-4-9 13:51:27

使用了at 创建的计划任务也用了/interactive,还是截取到黑乎乎的一片。

pusofalse 发表于 2012-4-14 20:32:05

回复 8# yoshubom


    不可能,我测试了的,指定/interactive参数能正常截图。
at命令的语法是: at <TIME> <COMMAND LINE>

注意/interactive参数应该在TIME参数之后,COMMAND LINE参数之前,你如果是将/interactive参数放于COMMAND LINE参数之后,这当然是不行的,因为会被当做 计划任务程序的参数,而不是at命令的参数。

lilufb 发表于 2012-5-11 14:56:21

用系统截图工具不行吗?不然的话用API试试

lilufb 发表于 2012-5-11 14:56:36

用系统截图工具不行吗?不然的话用API试试

xms77 发表于 2012-5-12 08:15:47

回复 5# pusofalse
P版真是厉害啊!学习了~

yoshubom 发表于 2013-1-11 09:46:41

回复 9# pusofalse

版主你好!我用以下代码:
#include <ScreenCapture.au3>

; Capture full screen
_ScreenCapture_Capture(@ScriptDir & "\GDIPlus_Image1.jpg")
编译成e:\1.exe ,后用 at 9:41 /interactive e:\1.exe 添加计划任务。
按下 win 键盘+L 锁定计算机,最后发现生成的 GDIPlus_Image1.jpg 还是一片漆黑。

menfan1 发表于 2013-1-11 10:43:14

不能锁定,否则就是黑屏哈

yoshubom 发表于 2013-1-11 19:57:22

回复 5# pusofalse

SetThreadDesktop 如何设置成其他桌面,还望版主指教!
页: [1] 2
查看完整版本: 关于在远程服务器上截图的问题。