Как определить запуск из ярлыка «Автозагрузка»? - PullRequest
0 голосов
/ 19 января 2009

Мне нужно добавить опцию «Запускать при запуске Windows» в моей программе CintaNotes, но я не хочу жертвовать ее «чистотой»: это свободно распространяемое ПО на 100% и не должно оставлять следов в системе. Мне пришла в голову идея автоматического определения запуска из ярлыка автозагрузки и автоматического сворачивания в системный трей. Есть ли способ сделать это? Я использую C ++ и сырой Winapi.

Итак: - Нет записи в реестр - Нет параметров командной строки

Спасибо!

UPD: вопрос НЕ в том, как свернуть в системный трей! Вопрос заключается в том, как программа может отличить обычный запуск от быстрого запуска папки без использования параметров реестра и командной строки.

Ответы [ 4 ]

3 голосов
/ 11 ноября 2010

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

См. Раздел «Обнаружение запуска исполняемого файла из ярлыка». "at Недокументированный CreateProcess

3 голосов
/ 19 января 2009

Ваша "чистота" в лучшем случае кажется искусственной конструкцией. Если вы говорите пользователю создать ярлык в папке запуска, вы уже оставляете след (и, если честно, между «myprog.exe» и «myprog.exe -m» есть небольшая разница) , В этом случае есть несколько более простых подходов, чем автоматическое определение того, откуда вы бежите.

Я бы просто предоставил пункт меню в вашей программе («Установить»), который затем установил бы программное обеспечение в папку с фиксированным диском (в отличие от флэш-диска), включая необходимую запись «Программы» («Пуск», «Все программы», CintaNotes).

В рамках этого процесса (или даже после установки) вы можете разрешить им указать «Начать с Windows», а затем создать ярлык папки запуска для пользователя с параметром командной строки , чтобы ваша программа может сказать, работает ли она таким образом. Нет смысла разрешать «Пуск с Windows», если программа не доступна (то есть на фиксированном диске, а не на флэш-диске).

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

Что-то вроде поиска каталога исполняемого файла не будет работать просто потому, что элемент папки запуска, запускающий вашу программу, скорее всего, будет ярлыком к нему, поэтому у вас не будет этого пути.

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

Добавление этого и правки, поскольку в комментариях недостаточно места:

Вы спрашиваете:

Что вы думаете о том, чтобы просто отключить опцию «Запуск при запуске Windows», когда программа обнаружит, что она запускается с флэш-накопителя? Я думаю, что есть способ обнаружить это.

Это хорошая идея, поскольку не имеет смысла разрешать автоматический запуск до тех пор, пока она не будет установлена ​​(поскольку флэш-накопитель может отсутствовать). Одна возможность:

1 / При запуске с флэш-памяти вы начинаете с «myprog.exe», поскольку вы просто дважды щелкнули исполняемый файл и запустились в обычном окне. Это дает возможность «Установить на фиксированный диск», но не «Начать с Windows». В рамках процесса установки вы можете разрешить им устанавливать установленную копию на «Пуск с Windows», но не текущую рабочую копию.

2 / Ваша установленная программа может быть настроена для запуска под именем «myprog.exe -i», так как вы создаете элемент в Start / AllPrograms. Это отключит «Установить на фиксированный диск», но позволит вам включить «Начать с Windows». Вы можете выбрать, хотите ли вы, чтобы явный запуск (пользователем) начинался нормально или был свернут (см. (3)).

3 / Ярлык в StartUp может быть «myprog.exe -s» (опять же, вы управляете этим, потому что создали его). Это идентично (2), но начинает сворачиваться (если (2) все равно было свернуто, различий между (2) и (3) нет, и нет причин для разных параметров командной строки).

Таким образом, каждый параметр может иметь различное поведение по вашему усмотрению.

1 голос
/ 19 января 2009

Проверьте реестр для этого ключа. HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Запустите и добавьте новый ключ String, указав в качестве значения путь к вашему приложению. и используйте структуру NOTIFYICONDATA для минимизации вашего приложения в трей.

0 голосов
/ 19 января 2009

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

YourProgram.exe -m
...