代码之家  ›  专栏  ›  技术社区  ›  Alex Jenter

如何检测从“启动”文件夹快捷方式启动?

  •  0
  • Alex Jenter  · 技术社区  · 16 年前

    我需要在我的程序Cintanotes中添加“Windows启动时运行”选项,但不想牺牲它的“清洁度”:它是一个100%可移植的免费软件,不应该在系统中留下痕迹。 我想到了自动检测从启动快捷方式运行,并自动最小化到系统托盘的想法。有办法吗?我使用C++和原始WiAPI。

    所以: -禁止写入注册表 -没有命令行参数

    谢谢!

    upd:问题不是如何最小化到系统托盘!问题是程序如何在不使用注册表和命令行参数的情况下区分正常运行和从启动文件夹快捷方式运行。

    4 回复  |  直到 16 年前
        1
  •  3
  •   paxdiablo    16 年前

    你的“清洁”充其量是一种人工构造。如果你告诉用户在启动文件夹中创建一个快捷方式,你已经留下了一个足迹(老实说,“myprog.exe”和“myprog.exe-m”之间没有什么区别)。在这种情况下,有一些比自动检测你的跑步方向更容易的方法。

    我将在您的程序(“安装”)中提供一个菜单选项,然后将软件安装到固定的磁盘位置(而不是闪存驱动器),包括必要的程序条目(开始、所有程序、Cintanotes)。

    作为该过程的一部分(甚至在安装之后),您可以让他们指定“从Windows开始”,然后为用户创建启动文件夹快捷方式。 具有 一个命令行选项,这样您的程序就可以知道它是否以这种方式运行。除非程序可用(即在固定磁盘上,而不是闪存驱动器上),否则不允许“从Windows开始”。

    用户不必担心创建快捷方式,更不用说带参数的快捷方式了。这使您的程序可以控制它的运行方式——两种模式,“已安装”(和“最小化启动”)或“不先安装就运行”(和“正常启动”)。

    类似于查找可执行文件的目录这样的操作不能简单地工作,因为启动程序的启动文件夹项很可能是指向它的快捷方式,所以您没有该路径。

    我认为这是一个典型的提问错误的案例。在回答您的特定问题时,我说:不,如果没有命令行参数,就无法说明您是从启动文件夹条目启动的。但是,我以前是错的,只要问我妻子:—)。其他人可能知道一种方法。

    将此添加为编辑,因为注释不允许有足够的空间:

    你问:

    当程序检测到“Windows启动时启动”选项正在从闪存驱动器运行时,您认为禁用该选项会怎么样?我想有种方法可以检测到这一点。

    这是个好主意,因为在安装前不允许自动运行是没有意义的(因为闪存驱动器可能不在那里)。一种可能性:

    1/从flash运行时,您从“myprog.exe”开始,因为您只需双击可执行文件并在正常窗口中运行。这提供了“安装到固定磁盘”而不是“从Windows开始”的选项。作为安装过程的一部分,您可以允许他们将已安装的副本设置为“从Windows开始”,而不是当前正在运行的副本。

    2/安装的程序可以设置为“myprog.exe-i”运行,因为您在start/allprograms中创建了该项。这将禁用“安装到固定磁盘”,但允许您切换“从Windows开始”。您可以选择是希望显式运行(由用户)启动正常还是最小化(请参见(3))。

    3/启动时的快捷方式可以是“myprog.exe-s”(同样,您之所以控制它是因为您创建了它)。这与(2)相同,但启动最小化(如果(2)启动最小化,则(2)和(3)之间没有区别,并且没有理由使用不同的命令行选项)。

    这样,每个选项都可以有您认为合适的不同行为。

        2
  •  3
  •   Giorgi    13 年前

    即使你已经解决了这个问题,我只是想说,它可以检测程序是否从快捷方式启动。一旦有了快捷方式路径,就可以将其与启动文件夹进行比较。

    请参阅“检测是否从快捷方式启动可执行文件”一节。 AT Undocumented CreateProcess

        3
  •  1
  •   Reji    16 年前

    检查注册表中的此项。 hkey_local_machine\software\microsoft\windows\currentversion\run并添加一个新的字符串键,将应用程序的路径作为值。并使用notifyiconda结构将应用程序最小化到托盘。

        4
  •  0
  •   Xn0vv3r    16 年前

    为什么不使用一个参数来启动最小化的应用程序,比如:

    YourProgram.exe -m