Как запустить программу в фоновом режиме
Перейти к содержимому

Как запустить программу в фоновом режиме

  • автор:

Windows фоновых приложений и конфиденциальности

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

Управление возможностью работы приложения в фоновом режиме

  1. Выберите Начните , а затем выберите Параметры >приложения >приложения & функций.
  2. Прокрутите страницу до нужного приложения , выберите Дополнительные параметры в правой части окна, а затем выберите Дополнительные параметры.
  3. В разделе Разрешения фоновых приложенийв разделе Разрешить запуск этого приложения в фоновом режиме выберите один из следующих параметров:
    • Всегда — приложение работает в фоновом режиме, получает сведения, отправляет уведомления и остается в курсе, даже если вы не используете его активно. Этот параметр может использовать больше энергии.
    • Оптимизированная версия : Windows решает, что будет экономить больше всего энергии, позволяя приложению получать уведомления и периодически обновляться. Этот параметр может ограничивать приложения, использующие много энергии.

Примечание: Вы также можете управлять действиями в фоновом режиме для приложенийс помощью параметров аккумулятора.

Остановка работы приложения в фоновом режиме

Если вы не хотите получать уведомления или обновления для приложения, если оно не используется, вы можете настроить его так, чтобы оно не запускалось в фоновом режиме.

  1. Выберите Начните , а затем выберите Параметры >приложения >приложения & функций.
  2. Прокрутите страницу до нужного приложения , выберите Дополнительные параметры в правой части окна, а затем выберите Дополнительные параметры.
  3. В разделе Разрешения фоновых приложений в разделе Разрешить запуск этого приложения в фоновом режиме выберите Никогда.

Исключения для параметров конфиденциальности

Классические приложения не отображаются в списке приложений. Чтобы разрешить или запретить использование классических приложений, настройте параметры этих приложений.

Примечание: Отличительные характеристики классического приложения. Классические приложения обычно скачиваете из Интернета или с некоторым типом мультимедиа (например, компакт-диском, DVD-диском или USB-накопителем). Их запуск выполняется с помощью файла EXE или DLL и, как правило, они выполняются на устройстве (в отличие от веб-приложений, которые выполняются в облаке). Кроме того, классические приложения можно найти в Microsoft Store.

Управление приложениями, которые могут запускаться в фоновом режиме

  1. Выберите Начните , а затем выберите Параметры >конфиденциальности >фоновых приложений.
  2. В разделе Фоновые приложения убедитесь, что параметр Разрешить приложениям работать в фоновом режимевключен.
  3. В разделе Выберите, какие приложения могут работать в фоновом режимевключите или отключите параметры для отдельных приложений и служб.

Остановка работы большинства приложений в фоновом режиме

  1. Выберите Начните , а затем выберите Параметры >конфиденциальности >фоновых приложений.
  2. В разделе Фоновые приложения убедитесь, что параметр Разрешить приложениям работать в фоновом режимевыключен.

Исключения для параметров конфиденциальности

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

Примечание: Отличительные характеристики классического приложения. Классические приложения обычно скачиваете из Интернета или с некоторым типом мультимедиа (например, компакт-диском, DVD-диском или USB-накопителем). Их запуск выполняется с помощью файла EXE или DLL и, как правило, они выполняются на устройстве (в отличие от веб-приложений, которые выполняются в облаке). Кроме того, классические приложения можно найти в Microsoft Store.

Как запустить программу на Python в фоновом режиме?

Пишу программу, позволяющую засунуть скрин экрана из буфера обмена в папку (в любую). Но не знаю как сделать так чтобы она работала на постоянке в фоновом режиме. Exe делаю в auto-py-to-exe, там же убираю консоль, так что часть с фоновым режимом пусть и криво но реализованна, а вот с постоянной работой есть проблемы. Если я делаю while True, комп немного виснет, по известным причинам, если же я его убираю, то программа проходит один раз и выключается. Как сделать так, чтобы программа работала постоянно, без while True?
Сам скрипт максимально прост и короток, подозреваю что и решение тоже.

from keyboard import is_pressed from shutil import copy from easygui import diropenbox from PIL import ImageGrab from os import getcwd while True: if is_pressed('Ctrl + Shift + v'): #Проверяет нажато ли сочетание клавиш folder = getcwd() #Получает директорию в которой находится скрипт im = ImageGrab.grabclipboard() #Сохраняет изображение из буфера обмена в переменную im im.save('somefile.png', 'PNG') #Сохраняет переменную im в формате png в папке со скриптом с именем somefile.png folder2 = diropenbox() #Выводит диалоговое окно для выбора папки copy(folder + "\somefile.png", folder2) #Копирует файл somefile.png в выбранную папку

630f69ed3cadb765663114.png

  • Вопрос задан более года назад
  • 727 просмотров

4 комментария

Простой 4 комментария

Запуск приложения в фоновом режиме

вот у меня есть скрытые значки, это приложения запущенные в фоновом режиме как я понимаю. вот у меня есть собранный exe файл из main.cpp. как мне сделать чтобы мое main.exe приложение не выключалось после нажатия на крестик, а так же оставалось в фоновых приложениях. Возможно мне нужно в c++ файле это реализовать? Приложение консольное

Отслеживать
задан 27 фев 2021 в 15:55
5 3 3 бронзовых знака
27 фев 2021 в 16:20

В зависимости от его действий, возможно стоит переделать приложение в сервис, управляемый без участия UI, а через панель Сервисов?

27 фев 2021 в 17:16

Если у вас приложение оконное, то в ответ на WM_CLOSE не разрушайте окно, а просто скрывайте — и приложение останется висеть в памяти. Чтобы добавить значок в трей, есть функция Win API: docs.microsoft.com/ru-ru/windows/win32/api/shellapi/…. Если приложение консольное, то можно сабклассить окно консоли и далее сделать с ним то же самое (но я этого не делал, так что насколько это сработает для консоли не скажу).

27 фев 2021 в 20:36
@LShadow77 можете сказать как скрывать приложение?)
2 мар 2021 в 10:32

@f211 Вызовом ShowWindow(hWnd,SW_HIDE). docs.microsoft.com/en-us/windows/win32/api/winuser/… Всё это легко гуглится.

3 мар 2021 в 13:45

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Вот, накатал пример. Должен работать (у меня работает), но если есть неточности или ошибки, пусть камрады поправят. При вводе ‘h’ скрывает консоль и размещает стандартную иконку приложения в трее (может появиться в скрытых значках панели). При двойном клике по иконке удаляет её из трея и снова отображает консоль. При вводе ‘q’ — выход. Как выяснилось, субклассить окно консоли, унаследованное от другого процесса, нельзя. По-этому для обработки событий от иконки в этом примере создаётся дополнительное невидимое окно.

#include #include #include #define WMU_TRAY_ICON_MESSAGE (WM_USER+1) #define CLASS_NAME "UnvisibleHandlerWin" LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); HWND g_hConWnd; bool g_bHidden = false; NOTIFYICONDATA g_niData; int main() < WNDCLASS wcl; HWND hWnd; HINSTANCE hInst; MSG msg; char c; g_hConWnd = GetConsoleWindow(); if (!g_hConWnd) return 1; hInst = GetModuleHandle(NULL); ZeroMemory(&wcl,sizeof(WNDCLASS)); wcl.lpfnWndProc = WndProc; wcl.hInstance = hInst; wcl.lpszClassName = CLASS_NAME; RegisterClass(&wcl); hWnd = CreateWindowEx(0,CLASS_NAME,"",0,0,0,0,0,NULL,NULL,hInst,NULL); if (!hWnd) return 1; ZeroMemory(&g_niData,sizeof(NOTIFYICONDATA)); g_niData.cbSize = sizeof(NOTIFYICONDATA); g_niData.uID = 0; g_niData.uFlags = NIF_ICON|NIF_MESSAGE; g_niData.hIcon = LoadIcon(NULL,IDI_APPLICATION); g_niData.hWnd = hWnd; g_niData.uCallbackMessage = WMU_TRAY_ICON_MESSAGE; fputs("Inputs:\n" " h - minimizing console to the system tray\n" " q - quit\n",stdout); while (true) < while (PeekMessage(&msg,hWnd,0,0,PM_REMOVE)) DispatchMessage(&msg); if (g_bHidden) continue; fputs(">", stdout); while (true) < c = getc(stdin); if ((c!=0xA)&&(c!=0xD)) break; >if (c=='h') < if (!Shell_NotifyIcon(NIM_ADD, &g_niData)) < fputs("Something wrong. Can't create the notification icon!\n",stdout); continue; >ShowWindow(g_hConWnd,SW_HIDE); g_bHidden = true; continue; > if (c=='q') break; fputs("Unknown input, try again!\n", stdout); > DestroyWindow(hWnd); return 0; > LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) < if (uMsg==WMU_TRAY_ICON_MESSAGE) < if (lParam==WM_LBUTTONDBLCLK) < Shell_NotifyIcon(NIM_DELETE, &g_niData); ShowWindow(g_hConWnd,SW_SHOW); SetForegroundWindow(g_hConWnd); g_bHidden = false; >> return DefWindowProc(hWnd,uMsg,wParam,lParam); > 

Screen — запускаем приложения в фоновом режиме

Screen — утилита позволяющая запускать приложения в фоновом режиме. Данная утилита полезная тем, что вы можете запустить любой процесс и отключиться от SSH сессии, а процесс продолжит выполняться.

Установка утилиты screen

sudo apt-get install screen 
yum install screen 

Для запуска утилиты достаточно выполнить команду screen после чего вы сразу же попадете в виртуальный терминал. В том случаи если вы используете сразу несколько виртуальных терминалов, будет правильнее, присваивать имя каждому из терминалов чтобы не запутаться.

Для задании имени виртуального терминала нужно выполнить команду с ключом -S

screen -S filecopy 

После выполнения команды вы подключитесь в виртуальный терминал с именем filecopy и можете приступать к работе.

Для отключения от терминала ( запущенная программа продолжит свою работу ) нужно нажать Ctrl+A+D после этого вы попадете в основной терминал.

Для подключения к вашему созданному виртуальному терминалу выполните команду

screen -x имя_терминала 

Либо если у вас создан всего один терминал

screen -r 

Просмотреть список запущенных терминалов можно командой

screen -ls

Полный список команд доступен по команде

man screen

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *