在插座上运行屏幕截图时获得黑屏截图

时间:2018-07-20 06:06:16

标签: python sockets pillow

型号

TRIGGER->触发器收集器-> RUN SCREENSHOT


TRIGGER

import socket
s = socket.socket() 

port = 12344
s.connect(('10.35.145.133', port))
s.close()

TRIGGER COLLECTOR

import os
import socket
if __name__ == '__main__':
    os.system("cmd.exe /c python E:\\C\\screenshot.py") #........I say this is called "A"
    s = socket.socket()
    port = 12344
    s.bind(('', port))
    s.listen(1)
    print("Listening")
    while True:
        try:
            c, addr = s.accept()
            print("Accept")
            # CMD run
            os.system("cmd.exe /c python E:\\C\\screenshot.py") #........And this is called "B"
            c.close()
        except BaseException:
            pass
    s.close()

运行屏幕

from PIL import ImageGrab

im= ImageGrab.grab()
im.save("image.png", "PNG")

我的模型包括:

  1. 触发器(在服务器PC上)
  2. 触发器收集器(在客户端PC上)
  3. 运行屏幕截图(在客户端PC上)

1。触发

点击服务器上的按钮后,Trigger将运行并触发Trigger Collector

2。触发收集器

此脚本将在客户端上运行,并将等待服务器触发此脚本。

3。运行屏幕截图

此脚本将由Trigger Collector触发并获取屏幕截图。


问题:

请参阅我的Trigger Collector的代码,我已将os.system()命名为“ A”和“ B”

  1. 调用A时: 我得到的图像是客户屏幕
  2. 调用B时: 我得到的图像是黑屏

我需要在“ B”而不是“ A”发送屏幕截图,但这似乎不起作用。

(我之所以将“ A”和“ B”放在首位,是因为我想知道问题所在,因为即使我知道“ A”和“ B”的位置也很重要,我知道这是socket问题)

那么当我在“ B”上运行脚本时如何获得“正确的”屏幕截图? 提醒:“ A”只是一个调试过程。


我拥有的当前解决方案:

  1. 我在“ A”创建了一个线程,并在“ B” 触发器启动时保存图像。 (此解决方案将需要 将Trigger CollectorRun Screenshot合并到一个脚本中)

    此技术的缺点:这会占用很多资源,因为即使我不这样做,我也会始终拍摄屏幕截图 需要

编辑:响应我自己的解决方案,实际上我可以使用信号量使其同步运行,而不浪费任何资源:)我认为这应该结束这种情况。


注意:如果你们中的一些人可以提供帮助并且我的解释不够清楚,请随时问我,谢谢:)

0 个答案:

没有答案