最近有同学给我提出一个需求,他需要电脑在开机时自动打开并运行visual stdio的一个项目。由于项目调用了一些外部库,貌似debug生成的可执行文件不能直接运行,因此需要开机时需要打开该项目并运行项目。
一、Windows系统里面设置开机自启动脚本,通过以下两步就可以实现
step1 同时按下win+R,调出运行窗口,输入shell:startup打开开机自启动程序的路径
step2 在该路径下新建一个名为vs.bat的文件,作用是切换路径到python文件的路径下,bat文件的内容为
E:
cd E:\test
python run.py
二、vs项目的打开与运行,代码如下
import os
import time
import win32gui
import win32api
import pyautogui
hwnd_title = {}
def get_all_hwnd(hwnd, mouse):
if (win32gui.IsWindow(hwnd) and
win32gui.IsWindowEnabled(hwnd) and
win32gui.IsWindowVisible(hwnd)):
hwnd_title.update({hwnd: win32gui.GetWindowText(hwnd)})
#下面是找到你vs项目的路径,运行.sln文件
os.chdir('C:')
os.chdir(r'C:\Users\Administrator\Desktop\code\C++\ConsoleApplication1')
# 使用start的原因是需要非阻塞式打开项目,不然后面的项目就无法运行了
r = os.system(r'start ConsoleApplication1.sln')
# 因为运行需要一点时间,因此等待一下
time.sleep(10)
# 获取当前所有的窗口的句柄
win32gui.EnumWindows(get_all_hwnd, 0)
# 在通过项目名称寻找visual stdio的句柄,我的项目名是默认的ConsoleApplication1
for h, t in hwnd_title.items():
if t :
# 注意!Microsoft Visual Studio 后面有个空格
if t == 'ConsoleApplication1 - Microsoft Visual Studio ':
# 将窗口设置为最上层
win32gui.SetForegroundWindow(h)
time.sleep(1)
# 模拟按下ctrl+F5
pyautogui.hotkey('ctrl', 'F5')
# 如果你需要点击的按钮没有热键,就需要找出按钮位置,并模拟鼠标点击按钮
# #以下是获取按钮的位置,你只需要执行一次,后面都可以注释掉
# # 获取当前鼠标位置,此时你应该把鼠标放在run那个按钮上
# p = win32api.GetCursorPos()
# # GetWindowRect 获得整个窗口的范围矩形,窗口的边框、标题栏、滚动条及菜单等都在这个矩形内
# x,y,w,h = win32gui.GetWindowRect(h)
# # 鼠标坐标减去指定窗口坐标为鼠标在窗口中的坐标值
# pos_x = p[0] - x
# pos_y = p[1] - y
# print(pos_x,pos_y)
#
# #将上面的pos_x和pos_y替换到下面来,上面的代码就可以注释了
# pyautogui.click(674,89)
linux里面设置开机自启动就使用crontab
参考:
[1] windows10 设置开机启动python脚本 - 简书 (jianshu.com) Python 获取窗口句柄,模拟鼠标点击_code&&coder的博客-CSDN博客_pyautogui获取窗口句柄
[2] windows10 设置开机启动python脚本 - 简书 (jianshu.com)