如何通过网页超链接控制电脑应用程序

刘润森

共 2952字,需浏览 6分钟

 ·

2022-03-08 13:41

点击关注“Python数据分析实例

设为“置顶或星标”,送达干货不错过!c141e3dc71a7fead18d4a46e2af89ac8.webp

大家好,我是Brook!


今日主题:如何通过手机网页超链接控制电脑应用程序


继上一篇:用Python实现手机实时监控电脑资源


我们通过手机端可以管理电脑进程资源,上一篇推文已经实现对电脑进程资源查看,本次介绍如何实现对电脑应用程序的启停管理


如何开发手机管理电脑系统应用?

1、系统信息监控psutil模块,获取监控应用指标(这里主要包括进程pid、应用名称name、内存信息memory_info等,具体其他参数获取可查看文档手册,生成data.json数据供后续网页模板用。

2、利用Flask生成展示网页,首先准备展示模板template.html,加载数据映射到对应的模板中输出展示网页。

3、通过点击手机网页需要关闭的应用程序超链接,传参进程名name到指定的路由函数执行调用杀掉进程树函数模块来关闭进程。当然也可以利用websocket实现,更方便体验更佳,后期进一步分享。

from flask import Flask,request,redirect
import psutil
import json
import string
import by_pid_kill_proc as kill_proc
app = Flask(__name__)

# 获取系统进程列表
def find_procs():
    pass
    return

@app.route('/kill_proL/',methods=['GET'])
def kill_proL(name):
    PID = kill_proc.get_procs_pid(str(name))
    kill_proc.execute_kill_proc(PID)
    print('{0}进程已关闭'.format(name))
    Show_html() #刷新存活进程列表
    return redirect("http://192.168.0.2:8888"#重新加载页面

@app.route('/')
def Show_html():
        ........
    content = ""
    for i, (name,memory_info) in enumerate(data.items()):
        content += ""
        content += f"{i + 1}"
        content += f"{name}"
        #content += f"{name}"
        content += f"{memory_info}"
        content += ""
        ........
    return output_html


if __name__=="__main__":
    app.run(host="0.0.0.0",port=8888)

具体杀掉进程树by_pid_kill_proc.py模块代码如下

import os
import  pandas as pd
import signal
import psutil
# 获取系统进程列表
def get_procs_pid(pro_name=None):
    Listname=[]
    Listpid=[]
    for proc in psutil.process_iter():
        try:
            pinfo = proc.as_dict(attrs=['pid''name'])
            Listname.append(pinfo.get('name'))
            Listpid.append(pinfo.get('pid'))
        except psutil.NoSuchProcess:
            pass
    L={"name":Listname,"pid":Listpid}
    df=pd.DataFrame(L)
    k_v=df.set_index('name')['pid'].to_dict()
    #获取进程pid
    pid=k_v[pro_name]
    return pid
    
#杀掉进程树
def kill_proc_tree(pid,sig=signal.SIGTERM,include_parent=True,timeout=None,on_terminate=None):
    if pid ==os.getpid():
        raise RuntimeError("I refuse to kill myself")
    parent =psutil.Process(pid)
    children=parent.children(recursive=True)

    if include_parent:
        children.append(parent)
    for p in children:
        p.send_signal(sig)
    gone,alive =psutil.wait_procs(children,timeout=timeout,callback=on_terminate)
    return (gone,alive)

#执行关闭应用
def execute_kill_proc(PID):
    kill_proc_tree(PID,sig=signal.SIGTERM,include_parent=True)


注:

1、关掉进程还可以用系统自带模块ntsd--系统调试工具基本上除了WINDOWS系统自己的管理进程,ntsd都可以杀掉
def execute_cmd_command(PID):
    os.system("ntsd -c q -p PID".format(PID))

593b76c54c7c9256ce44cf86805c1626.webp

2、通过进程PID来关闭进程

建立程序名称和PID字典,通过传参应用名称得到相应的PID,然后利用PID关闭应用。应用程序PID启动时是随机的,不能指定pid启用程序,因此采用网页链接调用本地exe程序。

1)启动注册表:win+r——regedit,打开注册表

e61d0d33f902f7631cbcd785772a137f.webp

2)建立私有协议:在HKEY_CLASSES_ROOT下建立一个自己的协议名称,右键新建项,如myProject,下面继续按照以下结构创建项;

0a0f0288c6f188270ef0473484f11cca.webp

3)首先myProject项,建立URL Protocol项,并设定默认数据;

f03925337fadacda39987c525a854204.webp

其次DefaultIcon项,设置成需要执行应用全路径,演示的是百度网盘的开启;

fe25ba5c2e010b90d6011d404bbc91e5.webp

最后command项,设定数据为exe文件全路径+参数,这里%1就是传递给exe的参数,exe文件接收到该参数并执行。0表示完整执行路径,1表示网页传过来的字符串。

f3d1ce091e047d42f9cab408278a2857.webp

3、网络安全问题

如果用于生产环境,还需网络安全因素。


网页实现效果


同样在同一个局域网内手机端点击应用名称即可远程管理应用。


d6efb0a00b97240c899cd3a508dd35ba.webp


浏览 19
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报