我有一个打开* .postfix文件的c#程序。
如果用户运行指向我的文件类型的(.lnk)快捷方式,我的程序将打开目标。
那么,我的程序怎么知道它是由(.lnk)快捷方式启动的(并获取它的文件路径)?
在某些情况下,我需要替换.lnk文件。
谢谢!
被修改的 首先,感谢那些回答我问题的人。
通过关注@Anders的答案,我发现我的问题就在这里。
我对Windows注册表进行了一些更改,因此浏览器知道将自定义协议字符串抛给某个程序。
这样的事情......
[InternetShortcut] URL = myProtocol:// ABCDEFG .....
这也许是我失去lpTitle的原因。 :(
我将尝试这种方式: 每当我的程序调用时,当然用%1进行,程序检查当前打开的资源管理器(Window),并尝试使用IWebBrowserApp获取它的当前路径。当然,使用该路径和桌面扫描并分析* .lnk以确定要替换哪一个。
我认为这可能有用,但不确定。我会尝试。 继续
答案 0 :(得分:3)
你没有。没有办法做到这一点。故事结束。
答案 1 :(得分:3)
在原生代码中,您可以致电GetStartupInfo,如果在STARTF_TITLEISLINKNAME
中设置STARTUPINFO.dwFlags
位,则.lnk的路径位于STARTUPINFO.lpTitle
。我不知道是否有.NET方法来获取此信息,您可能需要P / Invoke ...
答案 2 :(得分:0)
如果您使用Visual Studio安装项目来构建安装程序并执行文件类型关联,则应遵循以下说明http://www.dreamincode.net/forums/topic/58005-file-associations-in-visual-studio/
基本上,您将文件路径作为参数传递给您的程序。然后,如果它是控制台应用程序或Windows窗体,您应该检查Program.Main
中的参数
static void Main(string[] args)
{
//if file association done with Arguments %1 as per forum post above
//you file path should be in args[0]
string filePath = null;
if(args != null && args.Length > 0)
filePath = args[0];
}
对于WPF应用程序,您需要在应用程序的StartUp事件中处理该应用程序
void App_Startup(object sender, StartupEventArgs e)
{
string filePath = null;
if ((e.Args != null) && (e.Args.Length > 0))
{
filePath = e.Args[0];
}
}