Как программно добавить программу в автозагрузку
Конечно же, вы видели множество программ, запускающихся автоматически во время загрузки системы. В Windows есть немало способов добавить программу в автозагрузку. Сегодня мы рассмотрим наиболее простой и популярный способ, который заключается в добавлении специальной записи в реестр. Разумеется, как и ранее, мы будем писать программу на Си и Windows API.
Для решения задачи нам понадобятся следующие процедуры.
GetModuleFileName записывает в буфер szFileName полный путь до файла, содержащего заданный модуль, загруженный текущим процессом. Если hModule == NULL, возвращается полный путь до исполняемого файла текущего процесса. Аргумент dwChars должен быть равен размеру буфера в TCHAR’ах. В случае ошибки процедура возвращает ноль, в случае успеха — значение, отличное от нуля.
GetWindowsDirectory записывает в буфер szWinPath путь до каталога Windows, который «C:\WINDOWS», «Z:\WINNT» и так далее. Аргумент dwChars должен быть равен размеру буфера в TCHAR’ах. В случае ошибки процедура возвращает ноль, в случае успеха — значение, отличное от нуля.
Процедура CopyFile копирует файл szFrom в szTo. Если файл с именем szTo уже существует, то процедура перезаписывает его в случае, если bFailIfExists == FALSE, и завершается с ошибкой иначе. В случае ошибки возвращается ноль, в случае успеха — значение, отличное от нуля.
RegOpenKey открывает заданный ключ реестра и записывает хэндл открытого ключа в hKey. Первый аргумент — это либо хэндл открытого или созданного ранее ключа, либо одно из предопределенных значений, например, HKEY_USERS, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE и так далее. В аргументе szSubKey передается имя ключа, который требуется открыть. Это должен быть подключ ключа, переданного первым аргументом. В случае успеха процедура возвращает ERROR_SUCCESS. В случае ошибки возвращается одно из значений, определенных в Winerror.h. В отличие от процедур, с которыми мы работали до этого момента, RegOpenKey никак не связана с GetLastError.
Процедура RegSetValueEx устанавливает значение, а также тип, заданного ключа реестра и принимает следующие аргументы. Слева направо — хэндл ключа реестра, имя устанавливаемого значения, зарезервированный аргумент, тип устанавливаемого значения, указатель на значение, размер значения в байтах, включая завершающий ноль для строк. С возвращаемыми значениями все обстоит так же, как и в случае с RegOpenKey.
RegCloseKey закрывает хэндл, соотвествующий ключу реестра. Возвращаемые значения — как у RegOpenKey и RegSetValueEx. Помимо названных процедур для работы с реестром существует великое множество других, но они устроены аналогично и в рамках данной заметки нам не понадобятся.
А теперь — решение:
BOOL SelfAutorun ( ) {
HKEY hKey = NULL ;
LONG lResult = 0 ;
TCHAR szExeName [ MAX_PATH + 1 ] ;
TCHAR szWinPath [ MAX_PATH + 1 ] ;
GetModuleFileName ( NULL , szExeName , STRLEN ( szExeName ) ) ;
GetWindowsDirectory ( szWinPath , STRLEN ( szWinPath ) ) ;
lstrcat ( szWinPath , L " \\ Autorun.exe" ) ;
if ( 0 == CopyFile ( szExeName , szWinPath , FALSE ) ) {
return FALSE ;
}
lResult = RegOpenKey (
HKEY_LOCAL_MACHINE ,
L "Software \\ Microsoft \\ Windows \\ CurrentVersion \\ Run" ,
& hKey ) ;
if ( ERROR_SUCCESS != lResult ) {
return FALSE ;
}
RegSetValueEx ( hKey , L "Autorun" , 0 , REG_SZ , ( PBYTE ) szWinPath ,
lstrlen ( szWinPath ) * sizeof ( TCHAR ) + 1 ) ;
RegCloseKey ( hKey ) ;
return TRUE ;
}
INT main ( ) {
SelfAutorun ( ) ;
MessageBox ( NULL , L "Hello!" , L "Autorun" , 0 ) ;
ExitProcess ( 0 ) ;
}
Если теперь скомпилировать и запустить программу, она будет запускаться при каждой загрузке Windows. При этом в каталоге C:\WINDOWS появится файл Autorun.exe, а через regedit.exe будет видна соответствующая запись в реестре. Разумеется, все это будет работать, только если вы сидите под админом. Простой пользователь не имеет прав на запись в C:\WINDOWS, а также в ветвь реестра HKLM. Однако ничто не мешает положить программу в любой другой каталог и воспользоваться ветвью реестра HKCU.
В качестве домашнего задания можете погуглить на предмет существования других способов добавления программ в автозагрузку, желательно, через реестр, и автоматизировать один из этих способов. Если хотите, можете даже разместить свой код на каком-нибудь Pastebin, а я его проверю. Ну и, как обычно, не нужно стесняться критиковать мой код, задавать вопросы или же просто делиться возникшими во время прочтения данной заметки мыслями в комментариях!
Автозагрузка представляет собой функцию Windows, которая запускает любую программу после полной загрузки компьютера. В неё просто вносить новые программы, требующие постоянного включения. Иногда требуется настраивать автоматическую загрузку самому пользователю. После прочтения статьи вы поймете, как добавить программу в автозагрузку.
До начала работы проверьте настройки выбранной программы. Убедитесь, что там не активирована функция, позволяющая запускать программу сразу после включения устройства. Если нашли эту функцию – включите её и перезапустите компьютер.
Как добавить программу в автозагрузку в Windows 7
В случае, если вам никак не удалось найти в настройках эту функцию, программу придется включать своими силами.
С помощью папки "Автозагрузка"
Самый простой метод – перенесение программной иконки в блок автоматической загрузки («Пуск», графа «Все программы»). С помощью правой кнопки мыши откройте меню, найдите там строку «Открыть»:
Перейти в раздел папки возможно и другим путем: зайдите в блок «Выполнить» одновременным нажатием Win+R, в пустом поле напишите shell:Startup. Появится окно с элементами раздела «Автозагрузка»:
Дальше просто скопируйте файл в папку:
Программное обеспечение запустится автоматическим образом только у администратора, под учетной записью которого она активировалась. Чтобы это стало доступным и другим пользователям, продублируйте её в папку Startup. Найти её можно в меню «Выполнить» или же просто ввести в строку Пуска: shell:Common:Startup:
С помощью MSconfig
Как добавить программу в автозагрузку Windows при помощи MSconfig:
1) Зайдите в пуск, вбейте в строке поиска «MSconfig» и осуществите запуск под именем администратора:
2) Кликните на закладку «Автозагрузка» в интерфейсе программы;
3) Поставьте галочки напротив нужных элементов и разрешите автоматическую загрузку:
В этой программе отображаются практически все ключи для запуска, т.к. она тесно взаимодействует с реестром Windows и может собрать все данные из него. Так вы сможете плотно работать с элементами запуска программы во время загрузки операционной системы.
С помощью реестра
До начала работы необходимо перейти в реестровый редактор. Открываем окно «Выполнить», вбиваем туда слово "regedit":
Ищем в базе реестра строку активации автоматической загрузки:
· линия HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run вносит изменения в папку автоматической загрузки только для действующего администратора;
· линия HKEY_USER_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run позволяет загружать программное обеспечение любому человеку, находящемуся в текущий момент под своим логином.
В наиболее подходящий для вас список добавьте новый «Строковый параметр» с любым именем, а в строку «Значение» внесите адрес выбранной программы:
С помощью CСleaner
В бесплатной утилите CCleaner легко разобраться с вопросом – как поставить программу в автозагрузку. Данный метод является наиболее простым, по сравнению с предыдущими:
1. Запустите программный продукт. Для скачивания можно выбрать полную версию (необходимо устанавливать) или мобильную (можно не устанавливать);
2. Переместитесь во вкладку «Сервис» - она находится в левом меню;
3. Нажмите на строку «Автозагрузка». Для добавления программ, выделите их мышкой и нажмите на кнопку «Включить»:
Как добавить программу в автозагрузку в Windows 10
В устаревших операционных системах папка с автозагрузкой открывалась сразу через «Пуск». В неё тут же разрешалось перекинуть любой ярлык. В Windows 10 эту папку из меню разработчики решили убрать. Но появились другие методы, удобные для использования в этой версии.
С помощью папки «Автозагрузка»
Начнем с того, что папка автоматической загрузки никуда не делась. Она всего лишь переместилась из пуска в другой файловый объект. Перемещаемся в неё поэтапно (в скобках приведен аналог на английском): Пользователи (Users) - имя вашего пользователя (User_name) - appData – roaming – Microsoft – Windows - Главное меню (Start menu) - Программы (Programms) - Автозагрузка (Startup).
Таким методом папка открывается долго, поэтому быстрее будет сделать это через меню «Выполнить». Задержите одновременно кнопки на клавиатуре Windows-R, пропишите в строке «shell:startup»:
Через некоторое время после успешного ввода команды появится объект хранения мгновенной загрузки, доступный авторизованному пользователю. Далее ярлык программного обеспечения нужно перенести в папку. Оно запуститься само одновременно с включением компьютера и активацией пользовательских данных.
Чтобы поставить программу в автозагрузку Windows 10 другим пользователям следует нажать «Windows-R», и далее - "shell:common startup". Снова сохранить копию программного ярлыка.
Через планировщик задач
Таким методом любая программа сможет благополучно проходить автоматическую загрузку, спустя какое-то время после включения Windows. Это значительно уменьшает число загрузок после активации компьютера. Следовательно, времени на неё требуется меньше.
Включите планировщик задач. Далее одновременно нажмите Windows-R и введите «taskschd.msc»:
Затем создайте простую задачу (активная строка справа), появится окно «мастер». Назовите свою задачу и жмите «Далее». Выйдет вопрос о времени активации программного обеспечения, выбирайте «во время запуска компьютера», и далее – «Запуск программы».
В графе «Обзор», можно выбрать программное обеспечение, нужное для автоматизированного запуска. Далее в активной строке рядом появится подробный адрес exe-файла.
На завершающем этапе проверьте все данные и подтвердите операцию (кнопка «Готово»). Задача выполнится и сохранится, а программа уже сможет загружаться одновременно с операционной системой.
Когда нужно отсрочить время загрузки программы, откройте эту задачу в Планировщике и найдите её свойства. В строке «Триггеры» выберите графу «При запуске» и щелкните «Изменить».
Появится окно, в котором добавление программы в автозагрузку можно скорректировать по параметрам. Для того чтобы ввести отсрочку, нужно воспользоваться командой «Отложить задачу». Затем выйдите отовсюду и щелкните «ОК», чтобы изменения сохранились:
Через реестр
Запустить автоматическую загрузку любого программного обеспечения в Windows 10 тоже можно через реестр. С этой целью нужно зажать Windows-R, следом ввести regedit в строку для ввода.
Запустится реестровый редактор. Для того, чтобы добавить программу в автозагрузку, переместитесь в раздел HKEY_CURRENT_USER. А, чтобы открыть доступ всем другим - HKEY_LOCAL_MACHINE.
Когда откроется нужный реестр, вызовите меню правой кнопкой мыши нажмите на соответствующую графу, чтобы создать новый строковый параметр. Разверните этот параметр и напишите подробный путь к выбранной программе.
Сохраните изменения и перезагрузите компьютер, чтобы проверить установку:
С помощью MSconfig
Добавление программы в автозагрузку Windows через MSconfig включает шесть этапов:
1. Нажмите на «Пуск» правой кнопкой компьютерной мыши;
2. Выберите строку «Выполнить»;
3. Появится маленькое окно, введите в него: «msconfig»;
4. В появившейся вкладке разверните пункт «Автозагрузка»;
5. Раскройте список задач в диспетчере;
6. Выберите строку с нужной программой и активируйте её:
Таким образом, мы рассмотрели все методы, которые помогут вам самостоятельно добавить любое программное обеспечение в автоматическую загрузку в операционной системе Windows. Выбирайте любой понравившийся вам способ, и действуйте.
Если воспользоваться данными способами не получилось, то мастера «Службы добрых дел» помогут. Мы работаем круглосуточно. Консультируем по телефону или в удобное время выезжаем на дом, либо в офис. Звоните или оставляйте заявку на сайте, если возникли вопросы, и срочно требуется помощь.
Все замечательно программа прописывается, но проблема в том, что в "Сосотяние" стоит отключено, как сделать так чтобы стало "включено"?
Простой 21 комментарий
Забавно. По идее, если в реестре есть ключ и значение к нему, то всё работает. А на всякие криворукие taskmgr-ы можно не смотреть. По факту, всё должно работать, выйдите из системы и войдите обратно или перезагрузите комп.
Ternick, перезапускал, не запускается(Программа)
(про запись смотрел через стандартный Task Manager Windows)
Olegofr3n77, Странно. Кстати, зачем оно нужно ? char arr[MAX_PATH] = < '\0' >; Насколько я понял, то это значит создать массив длинной в 256 символов и присвоить первым элементом нуль-терминатор ? Хотя нуль-терминатор обозначает конец строки, а не её начало.
Кстати он перезаписывается функцией GetModuleFileName, так что смысл этого присваивания 0;
Olegofr3n77, Забавно, но не логично. Что-то мне подсказывает, что тебе лучше стороной обходить WINAPI, ты ещё не умеешь пользоваться массивами и переменными в принципе.
Olegofr3n77, Ну так и в чём вопрос ? Шуруйте изучать банальные вещи, указатели, переменные, типы данных и пока не лезьте в самую глубину WINAPI.
Olegofr3n77, Вопрос в том, что всё работает, просто вы идёте длинным путём и скорее всего, где-то накосматили по этому и не работает, я могу вам дать подобный код который работает, но вы ничему не научитесь !
Ternick, >где-то накосматили
возможно
>я могу вам дать подобный код который работает
Так давайте, посмотрим
Olegofr3n77, Исключительно ради проверки, могу вам скинуть готовый билд, с антивирусным отчётом и того же содержания что и ваш, устроит ?
Ternick, При всем уважении, не открываю на своем пк софт в котором не уверен.
Да и все таки интересен код.
Ternick, Так смысл мне его туда закидывать? На моем пк все добавляется в автозагрузку, я говорил про статус, а не про то, что софт не добавляется
Olegofr3n77, Идеально, смени имя параметра и запусти от администратора на всякий. А также советую сделать хотя бы MessageBox, если он доходит вообще до создания ключа по пути в реестре. К слову, HKCU\..\CurrentVersion\Run создаётся сам по себе, автоматически системой. И мне не понятно зачем вы используете RegCreateKeyEx, вместо RegOpenKey.
Ternick,
От имени Администратора не помогает.
>А также советую сделать хотя бы MessageBox
Сделал, отрабатывает, но по прежнему "Состояние" остается в позиции "отключено"
Olegofr3n77, Посмотри в regedit, всё ли там нормально, у меня такой проблемы никогда не было. У меня есть VM c win10 build 2004 и всё нормально работает и там.
При написании некоторых программ, иногда требуется добавить в них функционал для добавления приложения в автозапуск системы. Пользователю будет намного удобнее и проще поставить галочку в настройках программы, вместо того, чтобы самому запускать редактор реестра и прописывать необходимые параметры.
Немного теории
Я надеюсь, что все знают как добавить вручную приложение в автозапуск через редактор реестра. Перед тем как писать код, нужно четко представлять, как это делается вручную.
Итак, запускаем стандартное приложение ОС для работы с реестром. Это должны знать все, но все же чтобы это смог сделать каждый кратко опишу. Либо C:\Windows\regedit.exe, либо Пуск -> Выполнить, написать в поле regedit, нажать ОК.
Открылся редактор реестра. Переходим по ветке HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
Раздел Run содержит строковые параметры которые содержат пути к запускаемым приложениям. Т.е. если создать строковый параметр а в качестве его значения написать полный путь до программы, то при запуске ОС это приложение автоматически запустится.
Практика
Итак, все то что я описал выше, нужно будет реализовать программно.
Код предельно прост. Опишем константу, в которой будет имя создаваемого параметра в разделе Run
Далее нужно добавить пространство имен. В нем содержатся класс RegistryKey для работы с реестром.
Теперь напишем функцию, которая будет получать параметр типа bool. Если передадим True то приложение добавится в автозагрузку, иначе удалится.
Теперь о том как это работает. Сначала в переменную ExePath получаем путь до исполняемого файла приложения. Затем создаем класс RegistryKey и переходим к разделу Run. Дальше производим анализ переданного в функцию параметра autorun. Если true, то нужно будет создать параметр с именем name и значением ExePath. Тем самым при запуске Windows, приложение будет запускаться. Если autorun = false, то нужно будет просто удалить параметр с именем name. После этого нужно будет вызвать метод Close(), для того чтобы закрыть раздел и записать его на диск.
Функция возвращает True в случае успешного добавления программы в автозагрузку и False в случае ошибки.
Осталось только вызвать функцию SetAutorunValue(). Например, выложите 2 кнопки на форму. При нажатии на одну выполните код
При нажатии на другую
Таким образом, одна кнопка будет добавлять в автозагрузку, другая убирать из автозагрузки программу.
Как программно добавить своё приложение в автозагрузку? Вопрос, с которым рано или поздно сталкивается любой разработчик. В сети Интернет можно встретить не мало примеров кода, однако некоторые важные нюансы почти всегда остаются за кадром, что может ввести начинающего разработчика в рутину поиска решения.
Вся задача сводится к правке реестра. Можно встретить множество рекомендаций, которые предлагают добавить в реестр запись где будет указан путь к исполняемому файлу, и не редко попадаются неактуальные на сегодня примеры кода, которые хорошо работали на Windows XP, но не будут работать на более новых версиях операционной системы. Если на операционной системе старше чем Windows XP попытаться добавить запись в ветку "HKEY_LOCAL_MACHINE" (как это можно встретить в некоторых примерах), то Вы наткнётесь на проблему доступа к этой ветке на запись. Манипуляции с манифестом и запуск приложения от имени администратора не сработают в автозагрузке и варианты обойти UAC достаточно проблематично реализуются. Мало кто вспоминает про такой важный параметр как домашний каталог, что также в некоторых ситуациях приводит к вылету ошибки. Если Ваше приложение записывает какие нибудь данные в файл, который хранится в том же каталоге что и исполняемый файл, и если добавить такое приложение в автозагрузку и забыть при этом корректно указать домашний каталог, то Вы получите ошибку "нет доступа в папку System32\", так как именно эта папка является домашним каталогом по умолчанию. В поисках рабочего решения для автозагрузки мне пришлось потратить немало времени, и в итоге, я решил сделать заметку по этому вопросу и поделится своим опытом, который возможно будет полезен и ещё кому нибудь.
Если коротко, то для того чтобы программно добавить приложение в автозагрузку и получить рабочий вариант необходимо выполнить следующие действия:
- Создать ярлык.
- В параметрах ярлыка не забыть указать домашний каталог.
- Внести запись в реестр и добавить путь к ярлыку в ветку "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\".
Ниже привожу код с комментариями:
Для начала нужно добавить ссылку на библиотеку Windows Script Host Object Model (раздел COM) и подключить пространство имён в самом начале программы (using IWshRuntimeLibrary;)
Комментарии
always i used to read smaller articles or reviews which as well
clear their motive, and that is also happening with this post which I
am reading at this time.
Читайте также: