如何通过网页超链接控制电脑应用程序
点击关注“Python数据分析实例”
设为“置顶或星标”,送达干货不错过!
大家好,我是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)
注:
def execute_cmd_command(PID):
os.system("ntsd -c q -p PID".format(PID))
2、通过进程PID来关闭进程
建立程序名称和PID字典,通过传参应用名称得到相应的PID,然后利用PID关闭应用。应用程序PID启动时是随机的,不能指定pid启用程序,因此采用网页超链接调用本地exe程序。
1)启动注册表:win+r——regedit,打开注册表
2)建立私有协议:在HKEY_CLASSES_ROOT下建立一个自己的协议名称,右键新建项,如myProject,下面继续按照以下结构创建项;
3)首先myProject项,建立URL Protocol项,并设定默认数据;
其次DefaultIcon项,设置成需要执行应用全路径,演示的是百度网盘的开启;
最后command项,设定数据为exe文件全路径+参数,这里%1就是传递给exe的参数,exe文件接收到该参数并执行。0表示完整执行路径,1表示网页传过来的字符串。
3、网络安全问题
如果用于生产环境,还需网络安全因素。
网页实现效果
同样在同一个局域网内手机端点击应用名称即可远程管理应用。