Pull to refresh

Comments 22

Кому-то и может быть интересно, автор просто поделился своей тулзой, зачем быть таким токсичным? А вот другой вопрос зачем нужна эта тулза, если в каждой оси и так есть настройка автозапуска приложений, и в том числе запуск сайтов через URL в терминале\cmd. Стоит ли ради нечастых изменений в этих самых параметрах автозапуска разрабатывать для этого отдельный гуи ?

Автор поделился, ок. Но этому точно место на Хабре, а не на каком нибудь stackexchange?

Выглядит как обычная лабораторная работа 1-2 курса. Там кода на ~200 строк включая GUI. Задачи стартуются самим приложением, а не помещаются в стандартный планировщик ОС. Бизнес логика перемешана с UI. Само приложение помещается в автозапуск инсталлятором. Нет настроек для переключения между all users / current user. Думаю можно не продолжать.

О, спасибо что напомнили про stackexchange. Про юзеров тоже полезно, думаю добавлю в список фич на следующие обновления

Спасибо за Ваш комментарий. С данным функционалом действительно можно было бы обойтись без интерфейса и сделать все в скрипте на пару кб. Но у меня есть идеи по добавлению более комплексных и полезных задач при старте системы, вроде отправки нужных сообщений/писем, автоклики по нужным кнопкам и прочее. В таком случае хотелось бы иметь хороший ui с дополнительными настройками. (идеи могут прозвучать немного утопичными или излишними, но этот проект я делаю исходя из своих практик и опыта и хочу привнести по больше полезных фич)

Есть некоторый диссонанс между качеством и полезностью инструмента и попыткой его представить как готовый продукт продать свой телеграм канал.


Я за проекты, которые позволяют получить опыт. Сам делал много бесполезной фигни.

Канал я не продаю, у меня там проектики и личная жизнь, продавать там нечего. Я понимаю Вас, понимаю о чем Вы, но этот проект оказался полезным нескольким знакомым и я захотел поделиться им. Так уж я преподношу то что делаю, стараюсь рассказать по красочнее. Думаю в этом нет чего-то сугубо плохого, я ничего никому не втюхиваю и не продаю, у меня нет ни одного ресурса который я мог бы здесь монетизировать, это лишь pet проектики которые я пилю в свободное от работы время

Спасибо за Ваш комментарий

неинтересно - не читай и, тем более, не комментируй. в следующих комментариях нормально отнеслись к материалу. человек может быть первый раз что-то написал, что и другим пригодилось. поправит/подсказать - это норм, а с токсиком - на пикабу :)

Мне, а есть сайт где такие разработки люди выкладывают? Я бы посмотрел, я на хабр только из-за этого захожу.

  • Чтобы смотреть, как люди пишут код, и объясняют свою логику того почему так.

  • Чтобы пополнять свои знания

Тоже думал софтину написать на расте поначалу, но, ришел к выводу, что это тупая затея. Каждый раз, когда нужно внести изменения в запуск конкретной программы, нужно перекомпилировать. В итоге, сделал скрипт на питоне с меню, блекджеком и распутными функциями.

Не плохо, есть репозиторий? Было бы интересно глянуть

Не думаю, что там для Вас будет что-то интересное, так как писалось под себя. Мне к примеру не нужен автозапуск и не нужна оболочка. Со мной путешествует внешний 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 и для меня это была сущая пытка. Я с этим завязал) Линукс использую только на серверах.

Мне вспомнилась тулза, которая переключает цвет панели задач в зависимости от выбранной раскладки клавиатуры, но она платная. Если бы данный функционал появился здесь или отдельным приложением - цены бы ей не было.

Выступлю с критикой(не в укор автору а как объективный факт). Как правило подобное ПО должно быть лучше стандартного чтобы был смысл переходить на него. А чем оно лучше следующего?

  1. Открыть ПО при включении компа я могу простым переносом ярлыка программы в папку с автозагрузкой в меню пуск. Зачем мне программа посредник которая делает то же самое?

  2. Открыть рабочие сайты? Так уже давно есть профили в браузерах и мне ничто не мешает открыть рабочий профиль в браузере где будут по умолчанию открыты все нужные мне сайты(atlassian, jira, git, календарь, почта и т.д) еще и синхронизация с другими устройствами будет. Для чего мне нужна отдельная программа где я должен вручную перечислять 10+ сайтов? если есть браузер который это сделает удобнее, проще и с синхронизацией между устройствами.

  3. "Настройка задержки для каждой задачи" - тут полагаю автор хочет реализовать более сложные сценарии когда программа должна дождаться выполнения другой программы. Опять же это можно сделать простым скриптом в автозагрузке или если пользователь далек от этого то есть прекрасный Power Automate от Microsoft который может делать в разы более сложные автоматизации через UI чем программа автора и лучше осваивать ее, если так сильно нужен UI.

Sign up to leave a comment.

Articles