0

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

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

谢谢!

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

4

4 回答 4

3

您的“清洁”似乎充其量只是一种人为的构造。如果您告诉用户在启动文件夹中创建快捷方式,那么您已经留下了足迹(老实说,“myprog.exe”和“myprog.exe -m”之间几乎没有区别) . 在这种情况下,有一些比自动尝试检测您从哪里运行更简单的方法。

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

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

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

诸如查找可执行文件的目录之类的东西不会起作用,因为启动程序的启动文件夹项可能是它的快捷方式,因此您将没有该路径。

我认为这是一个典型的问错问题的案例。在回答您的具体问题时,我说:不,如果没有一些命令行参数,就无法判断您是从启动文件夹条目启动的。但是,我以前错了,请问我的妻子:-)。其他人很可能知道一种方法。

添加此编辑,因为评论不允许足够的空间:

你问:

当程序检测到它正在从闪存驱动器运行时,您如何看待仅禁用“Windows 启动时启动”选项?我想有一种方法可以检测到这一点。

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

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

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

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

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

于 2009-01-19T07:46:04.750 回答
3

即使您已经解决了问题,我只是想说,可以检测程序是否从快捷方式启动。获得快捷方式路径后,您可以将其与启动文件夹进行比较。

请参阅Undocumented CreateProcess中的“检测可执行文件是否从快捷方式启动”部分

于 2010-11-11T12:36:15.457 回答
1

检查注册表中的此项。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 并添加一个新的字符串键,并将应用程序的路径作为值。并使用 NOTIFYICONDATA 结构将您的应用程序最小化到托盘。

于 2009-01-19T06:35:17.013 回答
0

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

YourProgram.exe -m
于 2009-01-19T06:31:37.800 回答