Я просто хочу, чтобы Telegram запускался, и я добавил его в автозагрузку приложений. Дело в том, что мне нужно, чтобы это было минимизировано. Любые команды?
Hossein Soltanloo 19 авг ’15 в 05:28 2015-08-19 05:28
2015-08-19 05:28
9 ответов
Запуск приложения свернут
Минимизированный запуск приложения требует двух команд:
- запуск приложения
- свернуть свое окно
Следовательно, команда или скрипт должны быть «умными»; вторая команда должна дождаться фактического появления окна приложения.
Общее решение для запуска приложения сведено к минимуму
Сценарий ниже делает это и может использоваться в качестве общего решения для запуска приложения в минимизированном виде. Просто запустите его в синтаксисе:
Сценарий
#!/usr/bin/env python3 import subprocess import sys import time subprocess.Popen([«/bin/bash», «-c», sys.argv[1]]) windowname = sys.argv[2] def read_wlist(w_name): try: l = subprocess.check_output([«wmctrl», «-l»]).decode(«utf-8»).splitlines() return [w.split()[0] for w in l if w_name in w][0] except (IndexError, subprocess.CalledProcessError): return None t = 0 while t < 30: window = read_wlist(windowname) time.sleep(0.1) if window != None: subprocess.Popen([«xdotool», «windowminimize», window]) break time.sleep(1) t += 1
Как пользоваться
Скрипт нуждается в обоих wmctrl а также xdotool :
ЗАПУСК ПРОГРАММ В СВЕРНУТОМ РЕЖИМЕ СКРИПТ
sudo apt-get install wmctrl xdotool
- Скопируйте скрипт в пустой файл, сохраните его как startup_minimizd.py
- Протестируйте скрипт с помощью (например) gedit команда:
python3 /path/to/startup_minimizd.py gedit gedit
объяснение
- Сценарий запускает приложение, выполняя команду, которую вы дали в качестве первого аргумента.
- Затем скрипт проверяет список окон (с помощью wmctrl ) для окон, названный в честь вашего второго аргумента.
- Если окно появляется, оно немедленно сворачивается с помощью xdotool Чтобы предотвратить бесконечный цикл, если окно может не появиться по какой-либо причине, сценарий устанавливает ограничение времени 30 секунд для отображения окна.
Заметка
Не нужно упоминать, что вы можете использовать скрипт для нескольких приложений одновременно, так как вы запускаете его с аргументами вне скрипта.
РЕДАКТИРОВАТЬ
узнав окно по пиду
Если заголовок окна является неопределенным или переменным, или существует риск столкновения имен в имени окна, используя pid это более надежный метод для использования.
Сценарий ниже основан на использовании pid приложения, как в выводе обоих wmctrl -lp а также ps -ef ,
Настройка почти такая же, но заголовок окна в этой версии не нужен, поэтому команда для его запуска:
python3 /path/to/startup_minimizd.py
Так же, как и первый скрипт wmctrl а также xdotool
Сценарий
#!/usr/bin/env python3 import subprocess import sys import time command = sys.argv[1] command_check = command.split(«/»)[-1] subprocess.Popen([«/bin/bash», «-c», command]) t = 1 while t < 30: try: w_list = [l.split() for l in subprocess.check_output([«wmctrl», «-lp»]).decode(«utf-8»).splitlines()] proc = subprocess.check_output([«pgrep», «-f», command_check]).decode(«utf-8»).strip().split() match = sum([[l[0] for l in w_list if p in l] for p in proc], []) subprocess.Popen([«xdotool», «windowminimize», match[0]]) break except (IndexError, subprocess.CalledProcessError): pass t += 1 time.sleep(1)
Обратите внимание на второй сценарий
Хотя в общем случае вторая версия должна быть более надежной, в случаях, когда приложение запускается сценарием-оболочкой, pid команды будет отличаться от приложения, которое окончательно вызывается.
Как запустить программу в свернутом виде при автозагрузке
В таких случаях я рекомендую использовать первый скрипт.
EDIT2 конкретная версия скрипта для Steam
Как указано в комментарии, ниже версия, специально сделанная для запуска STEAM, свернута.
Почему конкретная версия для Steam?
Оказывается Steam ведет себя совершенно иначе, чем «нормальное» приложение:
- Оказывается Steam не запускается один пид, но не менее (в моем тесте) восемь!
- Steam запускается при запуске как минимум с двумя окнами (одно окно, похожее на заставку), но иногда появляется дополнительное окно сообщений.
- Окна Стима есть pid 0 , которая является проблемой в сценарии, как это было.
- После того, как главное окно создано, оно поднимается второй раз через секунду или около того, поэтому минимизация не будет выполняться.
Это исключительное поведение Steam запрашивает специальную версию скрипта, которая добавлена ниже. Скрипт запускается Steam и в течение 12 секунд отслеживает все новые окна соответствующих WM_CLASS , проверяя, минимизированы ли они. Если нет, сценарий гарантирует, что они будут.
Как и оригинальный скрипт, этот нужен wmctrl а также xdotool быть установленным.
Сценарий
#!/usr/bin/env python3 import subprocess import time command = «steam» subprocess.Popen([«/bin/bash», «-c», command]) def get(cmd): return subprocess.check_output(cmd).decode(«utf-8»).strip() t = 0 while t < 12: try: w_list = [l.split()[0] for l in get([«wmctrl», «-l»]).splitlines()] for w in w_list: data = get([«xprop», «-id», w]) if all([«Steam» in data, not «_NET_WM_STATE_HIDDEN» in data]): subprocess.Popen([«xdotool», «windowminimize», w]) except (IndexError, subprocess.CalledProcessError): pass t += 1 time.sleep(1)
Использовать его
- Просто скопируйте его в пустой файл, сохраните как runsteam_minimized.py
- Запустите его командой:
python3 /path/to/runsteam_minimized.py
Jacob Vlijm 19 авг ’15 в 11:56 2015-08-19 11:56
2015-08-19 11:56
Хорошо иметь сценарии, предоставленные user72216 и Sergey, в качестве общих решений проблемы, но иногда приложение, которое вы хотите минимизировать при запуске, уже имеет переключатель, который будет делать то, что вы хотите.
Вот несколько примеров с соответствующими строками команд запуска программы:
- Telegram (начиная с версии 0.7.10) имеет -startintray опция: /Telegram -startintray
- Steam имеет -silent опция: /usr/bin/steam %U -silent
- Коробка передач имеет —minimized опция: /usr/bin/transmission-gtk —minimized
В Unity эти приложения начинают сворачиваться в виде значков в верхней строке меню, а не значков на панели запуска, хотя значок обычного запуска все равно будет отображаться после запуска приложения. Другие приложения могут вести себя по-другому.
Francis Chin 24 сен ’16 в 15:57 2016-09-24 15:57
2016-09-24 15:57
Мне нужно было, чтобы программы были закрыты в трей, а не свернуты, и я перепробовал все скрипты, которые выложены здесь, те, которые работали, работали только для одних программ, а не для других. Итак, я написал код, который работает намного лучше (вы почти не видите появления окна, только значок в трее, он выглядит нативно) и работает для всех программ, которые я пробовал. Он основан на Джейкобе. С этим сценарием вам может потребоваться добавить аргумент в зависимости от программы (см. Ниже), но он всегда работал для меня со многими программами, он также должен работать с Steam.
Использование:
- sudo apt-get install wmctrl xdotool
- Сохранить скрипт как startup_closed.py дать ему разрешение на выполнение, а затем выполнить python3 ./startup_closed.py -c
- Если значок на панели задач не отображается или окно не отображается, необходимо добавить один из следующих аргументов: -splash или же -hide , методом проб и ошибок. Например: python3 ./startup_closed.py -hide -c teamviewer или же python3 ./startup_closed.py -splash -c slack
- Есть больше аргументов, но вы, вероятно, не нуждаетесь в них. Также есть полная информация о том, когда и зачем нужны аргументы в справке: ./startup_closed.py —help
Авторсценария:
#!/usr/bin/env python3 import subprocess import sys import time import argparse import random parser = argparse.ArgumentParser(description=’This script executes a command you specify and closes or hides the window/s that opens from it, leaving only the tray icon. Useful to «open closed to tray» a program. If the program does not have a tray icon then it just gets closed.
There is no magic solution to achieve this that works for all the programs, so you may need to tweek a couple of arguments to make it work for your program, a couple of trial and error may be required with the arguments -splash and -hide, you probably will not need the others.’) parser.add_argument(«-c», type=str, help=»The command to open your program. This parameter is required.», required=True) parser.add_argument(«-splash», help=»Does not close the first screen detected. Closes the second window detected. Use in programs that opens an independent splash screen.
Otherwise the splash screen gets closed and the program cannot start.», action=’store_true’, default=False) parser.add_argument(«-hide», help=»Hides instead of closing, for you is the same but some programs needs this for the tray icon to appear.», action=’store_true’, default=False) parser.add_argument(«-skip», type=int, default=0, help=’Skips the ammount of windows specified. For example if you set -skip 2 then the first 2 windows that appear from the program will not be affected, use it in programs that opens multiple screens and not all must be closed. The -splash argument just increments by 1 this argument.’, required=False) parser.add_argument(«-repeat», type=int, default=1, help=’The amount of times the window will be closed or hidden. Default = 1. Use it for programs that opens multiple windows to be closed or hidden.’, required=False) parser.add_argument(«-delay», type=float, default=10, help=»Delay in seconds to wait before running the application, useful at boot to not choke the computer. Default = 10″, required=False) parser.add_argument(«-speed», type=float, default=0.02, help=»Delay in seconds to wait between closing attempts, multiple frequent attempts are required because the application may be still loading Default = 0.02″, required=False) args = parser.parse_args() if args.delay > 0: finalWaitTime = random.randint(args.delay, args.delay * 2); print(str(args.delay) + » seconds of delay configured, will wait for: » + str(finalWaitTime)) time.sleep(finalWaitTime) print(«waiting finished, running the application command. «) command_check = args.c.split(«/»)[-1] subprocess.Popen([«/bin/bash», «-c», args.c]) hasIndependentSplashScreen = args.splash onlyHide = args.hide skip = args.skip repeatAmmount = args.repeat speed = args.speed actionsPerformed = 0 lastWindowId = 0 if hasIndependentSplashScreen: skip += 1 while True: try: w_list = [l.split() for l in subprocess.check_output([«wmctrl», «-lp»]).decode(«utf-8»).splitlines()] proc = subprocess.check_output([«pgrep», «-f», command_check]).decode(«utf-8»).strip().split() match = sum([[l[0] for l in w_list if p in l] for p in proc], []) if len(match) > 0: windowId = match[0] if windowId != lastWindowId: if skip > 0: skip -= 1 print(«skipped window: » + windowId) lastWindowId = windowId else: print(«new window detected: » + windowId) if onlyHide: subprocess.Popen([«xdotool», «windowunmap», windowId]) print(«window was hidden: » + windowId) else: subprocess.Popen([«xdotool», «key», windowId, «alt+F4»]) print(«window was closed: » + windowId) actionsPerformed += 1 lastWindowId = windowId if actionsPerformed == repeatAmmount: break except (IndexError, subprocess.CalledProcessError): break time.sleep(speed) print(«finished»)
Источник: ask-ubuntu.ru
Как запустить приложение WinForm, свернутое в трей?
Я успешно создал приложение, которое сворачивается в лоток с помощью NotifyIcon. Когда форма закрывается вручную, она успешно скрывается с рабочего стола, панели задач и альтернативной вкладки. Проблема возникает при попытке запустить приложение в свернутом виде. Сначала проблема заключалась в том, что приложение было свернуто, но все равно отображалось в диалоговом окне alt-tab. Изменение FormBorderStyle на одну из опций ToolWindow (из опции «None») устранило это, но представило другую проблему. Когда приложение запускается в первый раз, строка заголовка свернутого окна видна прямо над стартовым меню:
Открытие и закрытие формы заставляет ее правильно скрываться. Я пробовал много вариантов, но вот как это работает сейчас .
WindowState имеет значение Minimized в конструкторе. После некоторой инициализации в конструкторе у меня появляются следующие строки:
this.Visible = false; this.ShowInTaskbar = false;
При двойном щелчке по NotifyIcon у меня появляется следующее:
this.WindowState = FormWindowState.Normal; this.Visible = true; this.ShowInTaskbar = true;
Как я уже сказал, я пробовал множество незначительных вариаций этого (this.Hide () и т. Д.). Есть ли способ сделать NotifyIcon основным компонентом, чтобы я мог полностью запускать и удалять форму, оставляя NotifyIcon работающим? Должен быть способ запустить приложение с минимизированной формой без каких-либо странностей. Пожалуйста, помогите мне его найти!
Источник: question-it.com
запуск приложения в свернутом виде windows 10
Добрый день уважаемые читатели блога pyatilistnik.org, сегодня хочу рассказать как настраивается автозагрузка программ в свернутом виде при загрузке Windows 10, Windows 8,1, чтобы программы автоматически запускались в свернутом виде при загрузке Windows 8.1 и тем самым не мешали, появляясь поверх рабочего стола. В данном примере мы будем работать с программой Outlook.
Нажимаем правой кнопкой мыши на ярлык программы, которую необходимо автоматически запускать при загрузке системы, затем выбираем “Копировать”.
Автозагрузка программ в свернутом виде при загрузке Windows 8.1-01
На клавиатуре нажимаем сочетание клавиш “Win” и “R”, затем вводим
и нажимаем на кнопку “OK”. Обратите внимание, если вы хотите, чтобы программа автоматически запускалась у всех пользователей, то необходимо ввести “C:ProgramDataMicrosoftWindowsStart MenuProgramsStartUp”.
Автозагрузка программ в свернутом виде при загрузке Windows 8.1-02
Нажимаем правой кнопкой мыши на свободном месте в папке и выбираем “Вставить”.
Автозагрузка программ в свернутом виде при загрузке Windows 8.1-03
Теперь указанная программа будет автоматически запускаться при загрузке системы, и окно программы будет появляться поверх рабочего стола Windows 8.1. Это не очень удобно, поэтому мы сделаем так, чтобы программа запускалась в свернутом виде.
Автозагрузка программ в свернутом виде при загрузке Windows 8.1-04
Выбираем нужный файл и нажимаем на нем правой кнопкой мыши, затем выбираем “Свойства”.
Автозагрузка программ в свернутом виде при загрузке Windows 8.1-05
Для того, чтобы программа “Outlook” запускалась в свернутом виде, необходимо в разделе “Окно” выбрать “Свернуть в значок”. Нажимаем на кнопку “OK”
Автозагрузка программ в свернутом виде при загрузке Windows 8.1-06
Теперь программа “Outlook” будет автоматически запускаться в свернутом виде при загрузке Windows 8.1 и тем самым не будет мешать, появляясь поверх рабочего стола. До новых встреч.
Как запустить нужную программу в Windows в свернутом виде?
Как известно, в Windows не каждая программка юзеру нужна в развернутом виде, т.е. в виде отдельного окна на экране компьютера. В первую очередь это касается разных узкоспециализированных приложений, которые прекрасно справляются со своими задачами в фоновом режиме, либо таких программ, постоянное взаимодействие с интерфейсом которых не требуется для работы, также как и доступ к данным, которые они могут отображать.
Прекрасным примером такого рода программных продуктов служит известная утилита SnagIt, основное назначение которой — снимать скриншоты с экрана монитора.
В большинстве случаев приложением управлять можно несколькими комбинациями кнопок с клавиатуры, к тому же в виде отдельного открытого окна оно чаще всего просто мешает.
Точно также нет особой необходимости в запуске отдельным окном, скажем, почтового клиента, утилиты для автоматического резервного копирования данных и прочих Windows-приложений.
как запустить нужную программу в Windows в свернутом виде, т.е. так, чтобы она каждый раз не открывалась в отдельном окне?
На самом деле соответствующая опция в ОС Windows предусмотрена, притом как в самой новой ее версии, так и в нескольких предыдущих, то бишь не нужно ничего дополнительно скачивать и устанавливать.
Кстати, многие аксакалы Windows ее активно юзают не первый год. Хотя новичкам или юзерам, котороые об этой фиче не знают (в основном потому, что необходимость в ее использовании раньше никогда не возникала, а теперь возникла), она тоже может пригодится, так как позволяет настраивать форматы запуска отдельных программ в Windows.
Итак, чтобы в Windows определенная программа открывалась только в свернутом виде, сделать нужно следующее:
#1. находим ярлык этой программы (опция настраивается только через ярлык — это важно, если ярлыка еще нет, то его нужно создать) в меню «Пуск», в панели задач или на рабочем столе компа, кликаем по нему правой кнопкой мыши и в появившемся контекстном меню выбираем «Свойства» (в зависимости от версии ОС в меню сначала может не быть вкладки «Свойства», зато будет еще один такой же ярлык программы, тогда нужно еще раз кликнуть по нему ПКМ);
#2. в окне «Свойства» открываем вкладку «Ярлык«, в ней находим строку «Окно«, вместо «Обычный размер окна» выбираем «Свернутое в значок» и жмем «Применить«.
На этом все. При необходимости настройки ярлыка можно вернуть к исходному состоянию точно таким же методом.