检测应用程序是否固定在任务栏上

扬·罗斯基格尔

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

  1. 有没有办法检测我的应用程序是否已固定到任务栏?
  2. 有没有办法检测我的应用程序是否已从任务栏上的固定项目启动?
EVK

您可以通过检查%appdata%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar存储所有固定应用程序快捷方式的文件夹,来检测当前用户是否将应用程序固定到任务栏例如(需要添加对Windows脚本宿主对象模型的COM引用):

private static bool IsCurrentApplicationPinned() {
    // path to current executable
    var currentPath = Assembly.GetEntryAssembly().Location;            
    // folder with shortcuts
    string location = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar");
    if (!Directory.Exists(location))
        return false;

    foreach (var file in Directory.GetFiles(location, "*.lnk")) {
        IWshShell shell = new WshShell();
        var lnk = shell.CreateShortcut(file) as IWshShortcut;
        if (lnk != null) {  
            // if there is shortcut pointing to current executable - it's pinned                                    
            if (String.Equals(lnk.TargetPath, currentPath, StringComparison.InvariantCultureIgnoreCase)) {
                return true;
            }
        }
    }
    return false;
}

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

[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\Internet Explorer\Quick Launch\User Pinned\TaskBar,因此使用所有这些信息,很容易检查应用程序是否从任务栏启动。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

固定在Windows任务栏上的应用程序上的标题匹配

是否可以在任务栏上显示每个应用程序的编号?

将用Netbeans创建的Java程序固定在任务栏上?

是否可以将应用程序固定到辅助显示器上的任务栏?

为什么应用程序无法在任务栏上显示其任务栏图标?

隐藏应用程序在任务栏上显示Word UserForm

无论如何移动(交换)通过键盘固定在任务栏上的图标?

杀死固定在任务栏上的进程的快捷方式?

程序卡在任务栏上

在任务栏中更改正在运行的应用程序的图标(非固定图标)

启动应用程序时ClickOnce应用程序在任务栏中的图标消失

如何在任务栏上的Steam上下文菜单中将应用程序添加到Pinned

固定在任务栏上的快捷方式似乎失去了某些菜单内容

如何使用系统托盘/任务栏图标制作跨平台 Kivy 应用程序,即使应用程序未聚焦/在任务栏模式下也能检测键盘输入

客户应用程序图标未显示在任务栏中-为什么?

如何在任务栏Delphi 2010中更改应用程序图标

将参数传递给固定在任务栏中的可执行文件

是否可以将AIR应用程序固定在任何打开的窗口上?

将Java应用程序固定到Windows 7任务栏

无法将任何固定的应用程序显示到“开始”菜单或任务栏

固定到任务栏时,由什么决定应用程序名称?

如何将启动器应用程序固定到任务栏

使用Inno Setup从任务栏取消固定应用程序,开始菜单

使用 Qt 控制固定应用程序到任务栏的路径

如何在任务栏上设置一个像Skype预览应用程序一样的星号?

Windows 7中任务栏中缺少正在运行的应用程序和固定的应用程序图标

Windows 10:将多个应用程序窗口设置为不在任务栏中合并

如何在任务栏中仅显示活动桌面的应用程序?(Lubuntu 18.10)

如何为出现在任务栏中的应用程序的缩略图重新排序?