Pregunta

Necesito agregar el " Ejecutar cuando Windows inicie " opción a mi programa CintaNotes, pero no quiero sacrificar la " limpieza " de esto: es un programa gratuito 100% portátil y no debe dejar rastros en el sistema. Se me ocurrió la idea de detectar automáticamente el funcionamiento desde el acceso directo de Inicio y minimizarlo automáticamente en la bandeja del sistema. ¿Hay una manera de hacerlo? Estoy usando C ++ y Winapi sin formato.

Entonces: - No escribir en el registro - Sin parámetros de línea de comando

¡Gracias!

UPD: ¡La pregunta NO es cómo minimizar la bandeja del sistema! La pregunta es cómo puede un programa diferenciar entre la ejecución normal y la ejecución desde un acceso directo a la carpeta de inicio sin utilizar el registro y los parámetros de la línea de comandos.

¿Fue útil?

Solución

Su " limpieza " parece ser una construcción artificial en el mejor de los casos. Si le está diciendo al usuario que cree un acceso directo en la carpeta de inicio, ya está dejando huella (y, para ser sincero, hay poca diferencia entre "myprog.exe" y "myprog.exe -m" ;). En ese caso, hay algunos enfoques más fáciles que intentar automáticamente detectar desde dónde se está ejecutando.

Simplemente proporcionaría una opción de menú en su programa (" Instalar ") que luego instalaría el software en una ubicación de disco fijo (en lugar de la unidad flash), incluida la entrada de Programas requerida (Inicio, Todos los programas , CintaNotes).

Como parte de ese proceso (o incluso después de la instalación), puede dejar que especifiquen "Comenzar con Windows" y luego crea el acceso directo a la carpeta de inicio para el usuario con una opción de línea de comando para que su programa pueda saber si se está ejecutando de esa manera. No tiene sentido permitir "Comenzar con Windows" a menos que el programa esté disponible (es decir, en el disco fijo, no en la unidad flash).

Su usuario nunca tendrá que preocuparse por crear atajos, y mucho menos con parámetros. Y esto le da a su programa el control sobre cómo se ejecuta: dos modos, "instalados". (y comenzar minimizado) o "ejecutar sin instalar primero" (y comenzar normal).

Algo como encontrar el directorio del ejecutable no funcionará simplemente porque el elemento de la carpeta de inicio que inicia su programa probablemente sea un acceso directo, por lo que no tendrá esa ruta.

Creo que este es un caso clásico de hacer la pregunta incorrecta. En respuesta a su pregunta específica, le digo: no, no hay forma de saber que ha sido lanzado desde una entrada de carpeta de inicio sin algunos parámetros de línea de comandos. Pero, me he equivocado antes, solo pregúntale a mi esposa :-). Alguien más puede conocer una manera.

Agregando esto y una edición ya que los comentarios no permiten suficiente espacio:

Usted pregunta:

  

¿Qué piensas de deshabilitar el " Iniciar cuando Windows inicia " opción cuando el programa detecta que se está ejecutando desde la unidad flash? Supongo que hay una manera de detectar esto.

Esa es una buena idea ya que no tiene sentido permitir la ejecución automática hasta que esté instalada (ya que la unidad flash puede no estar allí). Una posibilidad:

1 / Ejecutando desde flash, comienza con "myprog.exe" ya que solo hizo doble clic en el ejecutable y lo ejecutó en una ventana normal. Esto presenta la opción de " Instalar en disco fijo " pero no " Comience con Windows " ;. Como parte del proceso de instalación, puede permitirles configurar la copia instalada para "Comenzar con Windows". pero no la copia actual en ejecución.

2 / Su programa instalado se puede configurar para ejecutarse como " myprog.exe -i " ;, ya que crea el elemento en Inicio / Todos los programas. Esto deshabilitaría " Instalar en disco fijo " pero le permite alternar " Comience con Windows " ;. Puede elegir si desea que la ejecución explícita (por parte del usuario) comience normal o minimizada (consulte (3)).

3 / El acceso directo en StartUp puede ser " myprog.exe -s " (de nuevo, controlas esto porque lo creaste). Esto es idéntico a (2) pero comienza minimizado (si (2) comenzó minimizado de todos modos, no hay distinción entre (2) y (3) y no hay razón para diferentes opciones de línea de comandos).

De esa manera, cada opción puede tener un comportamiento diferente como mejor le parezca.

Otros consejos

Aunque ya resolvió el problema, solo quería decir que es posible detectar si el programa se inició desde el acceso directo. Una vez que tenga la ruta de acceso directo, puede compararla con la carpeta de inicio.

Consulte la sección "Detectar si se inició un ejecutable desde un acceso directo " en Proceso de creación no documentado

Verifique el registro para esta clave. HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run y ??agregue una nueva clave de cadena con la ruta de su aplicación como valor. y use la estructura NOTIFYICONDATA para minimizar su aplicación en la bandeja.

¿Por qué no utiliza un argumento para iniciar la aplicación minimizada como:

YourProgram.exe -m
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top