如何在Godot3.1中检测打开的程序?

时间:2019-08-25 22:15:45

标签: godot gdscript

我想检测到铬被打开了,但是我不知道该怎么做。

这是在一个程序中,该程序可以检测我的弟弟观看了YT视频的数量。

Godot不允许离开“ user://”

1 个答案:

答案 0 :(得分:1)

如果您使用Windows 10作为操作系统,则可以从Godot调用powershell进行安装。 在powershell中,要获取chrome进程的列表,请使用get-process chrome,您将看到类似以下内容:

    Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
    -------  ------    -----      -----     ------     --  -- -----------
    343      19    31404      57972       0,88   2664   2 chrome
    259      17    22972      43920       0,34   2972   2 chrome
    529      29    76956      65512       1,00   3576   2 chrome
    238      17    24148      46548       0,55   5480   2 chrome
    219      15    13084      23128       0,22   7676   2 chrome
    136      11     1992       8724       0,05   7924   2 chrome
    161       9     1676       6484       0,03  10200   2 chrome
    230      16    16504      33064       0,17  13252   2 chrome
    415      21    14372      30508       5,45  14836   2 chrome
    195    8717    44248      27944       0,75  15520   2 chrome
   1290      49    72020     129948      14,66  17652   2 chrome

如果您写get-process chrome | measure-object -line,则可以获得行数:

    Lines Words Characters Property
    ----- ----- ---------- --------
       11

最后,如果您写get-process chrome | measure-object -line | select Lines -expandproperty Lines,则只会看到行数:

11

现在,将其应用于Godot:

func _is_chrome_active() -> bool:
    var chrome_active = false
    if OS.get_name() == "Windows": # Verify that we are on Windows
        var output = []
        # Execute "get-process" in powershell and save data in "output":
        OS.execute('powershell.exe', ['/C', "get-process chrome | measure-object -line | select Lines -expandproperty Lines"], true, output)   
        var result = output[0].to_int()
        chrome_active = result > 0    # If there is more than 0 chrome processes, it will be true
        print("Number of chrome processes: " + str(result))
    return chrome_active

在这里,它用OS.execute打开powershell并发送命令。结果将作为output保存在Array变量中。从中获取第一个(唯一的)元素,并用行var result = output[0].to_int()将其转换为数字。之后,将该值与0进行比较,以了解是否正在执行某些Chrome处理。 如果有活动的chrome进程,此函数返回true,否则返回false。

现在,您可以从计时器中调用它,并计算打开chrome后经过的时间。