在s上运行屏幕快照时获得黑屏快照

2024-04-20 13:02:07 发布

您现在位置:Python中文网/ 问答频道 /正文

型号

触发器->;触发器收集器->;运行屏幕截图


触发器

import socket
s = socket.socket() 

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

触发器采集器

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. 调用时: 我得到的图像是客户的屏幕
  2. 当调用B时: 我得到的图像是一个黑屏

我需要发送一个屏幕截图在“B”不是在“a”,但它似乎不工作。你知道吗

(我之所以把“A”和“B”放在第一位,是因为我想知道这个问题,现在我知道了“A”和“B”的位置都很重要,我知道这是一个socket问题)

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


我拥有的当前解决方案:

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

    这项技术的缺点是:这会占用大量资源,因为即使我没有截图,我也会一直截图 需要

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


注:如果你们中有人能帮忙,而我的解释还不够清楚,请尽管问我,谢谢:)


Tags: import服务器脚本客户端close屏幕osport