C#Windows api代码包-获取指向PIDL的快捷方式的目标

C#Windows api代码包-获取指向PIDL的快捷方式的目标,c#,windows,shell,winapi,C#,Windows,Shell,Winapi,我正在尝试获取特定进程(程序a)的appusermodelid(aumid),以便程序B可以使用SetCurrentProcessExplicitAppUserModelID(),然后将任务添加到程序a的跳转列表中 如果我将aumid设置为例如MSEdgeDev,这会很好地工作,问题是获取目标进程的aumid。目前,我正在使用此代码枚举shell:appsfolder项以获取每个已安装程序的exe路径和aumid,然后查找匹配的exe路径并获取匹配的aumid var FOLDERID_Apps

我正在尝试获取特定进程(程序a)的appusermodelid(aumid),以便程序B可以使用SetCurrentProcessExplicitAppUserModelID(),然后将任务添加到程序a的跳转列表中

如果我将aumid设置为例如MSEdgeDev,这会很好地工作,问题是获取目标进程的aumid。目前,我正在使用此代码枚举shell:appsfolder项以获取每个已安装程序的exe路径和aumid,然后查找匹配的exe路径并获取匹配的aumid

var FOLDERID_AppsFolder = new Guid("{1e87508d-89c2-42f0-8a7e-645a0f50ca58}");
        ShellObject appsFolder = (ShellObject)KnownFolderHelper.FromKnownFolderId(FOLDERID_AppsFolder);
        Process target = Process.GetProcessesByName("notepad")[0];
        foreach(var app in (IKnownFolder)appsFolder)
        {
            string name = app.Name;
            string aumid = app.Properties.System.AppUserModel.ID.Value;
            string path = app.Properties.System.Link.TargetParsingPath.Value;

            if (target.MainModule.FileName == path)
                dosomething();
        }
这适用于某些程序,但其他程序是没有文件目标的快捷方式。有什么方法可以让我得到这些捷径的实际目标吗?或者是否有更好的方法获得特定流程的aumid

编辑: 以下是我遇到问题的快捷方式类型:


我正在寻找一种方法来获取这些快捷方式的实际目标exe。

“但其他快捷方式没有文件目标。”例如?无论是关于比较两个字符串的方式,都需要一种不区分大小写的比较方法,例如:
if(String.compare(path,target.MainModule.FileName,true)==0)
,@DrakeWu MSFT抱歉,我应该说得更清楚。我说的是根本不显示目标路径的快捷方式,我在文章中添加了一个编辑示例。恐怕您需要将
GetCurrentProcessExplicitAppUserModelID
注入指定的进程。对于您提供的示例,可以将
app.Name
与进程名称进行比较。