C# 检测应用程序是否固定到任务栏

C# 检测应用程序是否固定到任务栏,c#,wpf,windows,taskbar,C#,Wpf,Windows,Taskbar,我有一个C#/WPF应用程序,我想根据它是否是从windows任务栏上的固定链接启动的,给出不同的行为 有没有办法检测我的应用程序是否被固定到任务栏上 有没有办法检测我的应用程序是否已从任务栏上的固定项目启动 您可以通过检查文件夹%appdata%\Microsoft\internetexplorer\Quick Launch\user pinted\task来检测当前用户的应用程序是否被固定到任务栏,所有固定应用程序的快捷方式都存储在该文件夹中。例如(需要向Windows脚本主机对象模型添加C

我有一个C#/WPF应用程序,我想根据它是否是从windows任务栏上的固定链接启动的,给出不同的行为

  • 有没有办法检测我的应用程序是否被固定到任务栏上
  • 有没有办法检测我的应用程序是否已从任务栏上的固定项目启动

  • 您可以通过检查文件夹
    %appdata%\Microsoft\internetexplorer\Quick Launch\user pinted\task
    来检测当前用户的应用程序是否被固定到任务栏,所有固定应用程序的快捷方式都存储在该文件夹中。例如(需要向Windows脚本主机对象模型添加COM引用):

    还有一种方法可以检测应用程序是否从固定的项目启动。为此,您需要
    GetStartupInfo
    WinAPI函数。在其他信息中,它将为您提供当前进程启动时使用的快捷方式(或仅文件)的完整路径。例如:

    [DllImport("kernel32.dll", SetLastError = true, EntryPoint = "GetStartupInfoA")]
    public static extern void GetStartupInfo(out STARTUPINFO lpStartupInfo);
    
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct STARTUPINFO
    {
        public uint cb;
        public string lpReserved;
        public string lpDesktop;
        public string lpTitle;
        public uint dwX;
        public uint dwY;
        public uint dwXSize;
        public uint dwYSize;
        public uint dwXCountChars;
        public uint dwYCountChars;
        public uint dwFillAttribute;
        public uint dwFlags;
        public ushort wShowWindow;
        public ushort cbReserved2;
        public IntPtr lpReserved2;
        public IntPtr hStdInput;
        public IntPtr hStdOutput;
        public IntPtr hStdError;
    }
    
    用法:

    STARTUPINFO startInfo;
    GetStartupInfo(out startInfo);
    var startupPath = startInfo.lpTitle;
    
    现在,如果您已经从任务栏启动了应用程序,
    startupPath
    将指向
    %appdata%\Microsoft\internetexplorer\Quick Launch\User pinted\taskbar
    的快捷方式,因此有了所有这些信息,就可以轻松检查应用程序是否从任务栏启动

    STARTUPINFO startInfo;
    GetStartupInfo(out startInfo);
    var startupPath = startInfo.lpTitle;