Comments 22
Кому это интересно вообще?
Кому-то и может быть интересно, автор просто поделился своей тулзой, зачем быть таким токсичным? А вот другой вопрос зачем нужна эта тулза, если в каждой оси и так есть настройка автозапуска приложений, и в том числе запуск сайтов через URL в терминале\cmd. Стоит ли ради нечастых изменений в этих самых параметрах автозапуска разрабатывать для этого отдельный гуи ?
Автор поделился, ок. Но этому точно место на Хабре, а не на каком нибудь stackexchange?
Выглядит как обычная лабораторная работа 1-2 курса. Там кода на ~200 строк включая GUI. Задачи стартуются самим приложением, а не помещаются в стандартный планировщик ОС. Бизнес логика перемешана с UI. Само приложение помещается в автозапуск инсталлятором. Нет настроек для переключения между all users / current user. Думаю можно не продолжать.
Спасибо за Ваш комментарий. С данным функционалом действительно можно было бы обойтись без интерфейса и сделать все в скрипте на пару кб. Но у меня есть идеи по добавлению более комплексных и полезных задач при старте системы, вроде отправки нужных сообщений/писем, автоклики по нужным кнопкам и прочее. В таком случае хотелось бы иметь хороший ui с дополнительными настройками. (идеи могут прозвучать немного утопичными или излишними, но этот проект я делаю исходя из своих практик и опыта и хочу привнести по больше полезных фич)
Есть некоторый диссонанс между качеством и полезностью инструмента и попыткой его представить как готовый продукт продать свой телеграм канал.
Я за проекты, которые позволяют получить опыт. Сам делал много бесполезной фигни.
Канал я не продаю, у меня там проектики и личная жизнь, продавать там нечего. Я понимаю Вас, понимаю о чем Вы, но этот проект оказался полезным нескольким знакомым и я захотел поделиться им. Так уж я преподношу то что делаю, стараюсь рассказать по красочнее. Думаю в этом нет чего-то сугубо плохого, я ничего никому не втюхиваю и не продаю, у меня нет ни одного ресурса который я мог бы здесь монетизировать, это лишь pet проектики которые я пилю в свободное от работы время
Спасибо за Ваш комментарий
неинтересно - не читай и, тем более, не комментируй. в следующих комментариях нормально отнеслись к материалу. человек может быть первый раз что-то написал, что и другим пригодилось. поправит/подсказать - это норм, а с токсиком - на пикабу :)
Мне, а есть сайт где такие разработки люди выкладывают? Я бы посмотрел, я на хабр только из-за этого захожу.
Чтобы смотреть, как люди пишут код, и объясняют свою логику того почему так.
Чтобы пополнять свои знания
C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
Управление компьютером - Планировщик заданий
Тоже думал софтину написать на расте поначалу, но, ришел к выводу, что это тупая затея. Каждый раз, когда нужно внести изменения в запуск конкретной программы, нужно перекомпилировать. В итоге, сделал скрипт на питоне с меню, блекджеком и распутными функциями.
Не плохо, есть репозиторий? Было бы интересно глянуть
Не думаю, что там для Вас будет что-то интересное, так как писалось под себя. Мне к примеру не нужен автозапуск и не нужна оболочка. Со мной путешествует внешний SSD с моими проектами и программами. Ну и пара команд для личного комфорта.
import subprocess
import psutil
import os
import pathlib
print("-------------------------------------------------------------------------")
print("")
print("1 - Запустить все приложения")
print("")
print("2 - Запустить приложения, кроме торрент-клиента")
print("3 - Запустить приложения, кроме приложений на диске А")
print("4 - Запустить приложения, кроме приложений на диске А и торрент-клиента")
print("")
print("5 - Завершить все приложения")
print("")
print("6 - Перезагрузить Проводник")
print("")
print("7 - Выключить компьютер через...")
print("8 - Отменить выключение компьютера")
print("")
print("-------------------------------------------------------------------------")
print("")
choice = input("Выберете пункт меню: ")
print("")
print("-------------------------------------------------------------------------")
print("")
pathToScript = os.path.dirname(__file__)
localAppData = os.getenv('localappdata')
apps = [\
["ShareX.exe", "Y:\\Programs\\ShareX --- видео и снимки экрана.pyw", "1 2 3 4"], \
["thunderbird.exe", "Y:\\Programs\\Thunderbird --- почтовый клиент.pyw", "1 2 3 4"], \
["XYplorer.exe", "Y:\\Programs\\Apps\\XYplorer\\XYplorer.exe", "1 2 3 4"], \
["RoyalTS.exe", "A:\\Software\\RoyalTS\\RoyalTS.exe", "1 2"], \
["rutview.exe", "A:\\Software\\RMS\\rutview.exe", "1 2"], \
["Telegram.exe", "Y:\\Programs\\Apps\\Telegram\\Telegram.exe", "1 2 3"], \
["Todoist.exe", "Y:\\Programs\\Todoist (Тудуист) --- планировщик задач.pyw", "1 2 3"], \
["qbittorrent.exe", "Y:\\Programs\\Apps\\qBittorrent\\qbittorrent.exe", "1 3"], \
["vivaldi.exe", "c:\\Vivaldi\\Application\\vivaldi.exe", "1 2 3 4"], \
["vivaldi.exe", f"{localAppData}\\Vivaldi\\Application\\vivaldi.exe", "1 2 3 4"], ]
def runApp(x):
runningApps = []
for proc in psutil.process_iter():
runningApps.append(proc.name())
for app in apps:
i = 0
if not app[i] in runningApps:
if app[2].find(x) >= 0 and os.path.exists(app[1]):
fileExtension = pathlib.Path(app[1]).suffix
if fileExtension == ".pyw" or fileExtension == ".py":
subprocess.Popen(["python", app[1]], cwd=os.path.dirname(app[1]))
else:
subprocess.Popen(app[1], cwd=os.path.dirname(app[1]))
i += 1
subprocess.run('taskkill /IM "explorer.exe" /F')
subprocess.Popen('C:\\Windows\\explorer.exe')
def taskKill(x):
subprocess.run(f'taskkill.exe /fi "ImageName eq {x}"', check=True, shell=True)
def taskKillHard(x):
subprocess.run(f'taskkill.exe /F /fi "ImageName eq {x}"', check=True, shell=True)
match choice:
case "1":
runApp("1")
case "2":
runApp("2")
case "3":
runApp("3")
case "4":
runApp("4")
case "5":
taskToKill = ["thunderbird.exe", "RoyalTS.exe", "rutview.exe", "winbox.exe", "winbox64.exe", "Telegram.exe", "Todoist.exe", "vivaldi.exe"]
taskToKillHard =["qbittorrent.exe", "ShareX.exe", "whatsapp.exe", "ktalk.exe", "Pipette.exe", "steamwebhelper.exe", "steam.exe", "LagoFast.exe", "t1client-vc142e.exe", "vhui64.exe"]
for task in taskToKill:
taskKill(task)
for task in taskToKillHard:
taskKillHard(task)
case "6":
subprocess.run('taskkill /IM "explorer.exe" /F')
subprocess.Popen('C:\\Windows\\explorer.exe')
case "7":
shutdownTime = int(input("Через сколько минут выключить компьютер: ")) * 60
subprocess.run('shutdown /s /t ' + str(shutdownTime), check=True, shell=True)
case "8":
subprocess.run('shutdown -a', check=True, shell=True)
case _:
print("Такого варианта не существует")
Понял, спасибо что поделились
Гляньте на модуль https://docs.python.org/3/library/cmd.html#cmd.Cmd с помощью него можно упростить работу с меню. У него есть лучшие альтернативы, но их надо устанавливать.
А еще винда поддерживает и прямые и обратные слэши. Можно использовать линуксовый стиль, чтобы не эскейпить из в строках.
'C:\\Windows\\explorer.exe'
-> 'C:/Windows/explorer.exe'
А ещё винду не обязательно ставить в c:/windows :)
И для работы с системными путями есть соответствующий API.
На практике удобнее экранировать, мне по крайней мере, так как чаще всего я копирую пути. Проще дописать еще один экранирующий обратный слэш, чем стирать существующий обратный слэш и ставить слэш. На одно нажатие кнопки меньше.
В большинстве текстовых редакторов есть удобная фича - replace in selection, если уж очень хочется экономить нажатия. А в студии можно даже на 1 хоткей повесить исправление слешей в путях. Плюс такой путь с двойными обратными не получится скопировать и вставить в проводник.
И обратные слеши - это не кросс-платформенно.
С поиском и заменой все понятно, но мне все это неудобно. Если бы мне нужно было прочесать стену текста и сделать там замену обратных слэшей, то я бы конечно так и поступил. В моем случае, проще экранировать.
Да, это не кросс-платформенно, но мне это и не требуется. У меня было много попыток использования как линуксов (самых разных), так и macos и для меня это была сущая пытка. Я с этим завязал) Линукс использую только на серверах.
Мне вспомнилась тулза, которая переключает цвет панели задач в зависимости от выбранной раскладки клавиатуры, но она платная. Если бы данный функционал появился здесь или отдельным приложением - цены бы ей не было.
Миллениалы создали "Планировщик задач" . 😁
Выступлю с критикой(не в укор автору а как объективный факт). Как правило подобное ПО должно быть лучше стандартного чтобы был смысл переходить на него. А чем оно лучше следующего?
Открыть ПО при включении компа я могу простым переносом ярлыка программы в папку с автозагрузкой в меню пуск. Зачем мне программа посредник которая делает то же самое?
Открыть рабочие сайты? Так уже давно есть профили в браузерах и мне ничто не мешает открыть рабочий профиль в браузере где будут по умолчанию открыты все нужные мне сайты(atlassian, jira, git, календарь, почта и т.д) еще и синхронизация с другими устройствами будет. Для чего мне нужна отдельная программа где я должен вручную перечислять 10+ сайтов? если есть браузер который это сделает удобнее, проще и с синхронизацией между устройствами.
"Настройка задержки для каждой задачи" - тут полагаю автор хочет реализовать более сложные сценарии когда программа должна дождаться выполнения другой программы. Опять же это можно сделать простым скриптом в автозагрузке или если пользователь далек от этого то есть прекрасный Power Automate от Microsoft который может делать в разы более сложные автоматизации через UI чем программа автора и лучше осваивать ее, если так сильно нужен UI.
WorkStarter: утилита для автоматизации запуска программ при старте Windows