在 运行 时间获取 Windows 程序快捷方式的名称?

Get name of Windows program's shortcut at run time?

在 unix/linux 中,如果程序链接到另一个名称并以该名称调用,则符号链接的名称本身在 ARGV[0] 下可用。但是,在 Windows 中,如果我有一个可执行文件的快捷方式并通过快捷方式调用它,ARGV[0] 是原始程序名称,而不是快捷方式名称。

在Windows下有什么方法可以在运行时获取程序的快捷方式名称吗?

例如,假设在 linux 中我有一个名为 "origprog" 的可执行文件,并且我执行以下操作:

ln -s origprog newprog

如果我运行“./origprog”,ARGV[0]就是“./origprog”,如果我运行“./newprog”,ARGV[0]就是“. /newprog".

但是,在 Windows 下,假设我有一个名为 "origprog.exe" 的程序,我创建了一个名为 "newprog.exe.lnk" 的快捷方式。

如果我调用 "c:\path\to\origprog.exe",ARGV[0] 是 "c:\path\to\origprog.exe",如果我调用 "c:\path\to\newprog.exe.lnk",ARGV[0] 也是 "c:\path\to\origprog.exe"。 Windows 在 运行 时间有什么办法可以查明程序实际上是通过 "c:\path\to\newprog.exe.lnk" 调用的吗?

提前致谢。

有很多方法可以做到这一点,例如使用 CreateProcess 和朋友以编程方式调用流程时;通过这些,您可以确定整个命令行的外观,甚至可以省略文件名,这样 argv[0] 成为第一个参数,而 'normally' 将成为 argv[1].

如果同样可以用快捷方式完成,我不知道。您始终可以创建一个启动器可执行文件和它的快捷方式。

至于在不触及快捷方式本身的情况下实际查明是否 运行 使用快捷方式,我非常怀疑这是可能的。资源管理器读取快捷方式并调用指定程序;您无法知道 为什么 资源管理器启动了您的应用程序。