我需要从应用程序的任务栏上下文菜单中删除应用程序启动和“将此应用程序固定到任务栏”。原因是应用程序不能独立启动,它必须从另一个应用程序中获取信息。
有谁知道怎么做?
根据这篇文章,您可以使用Windows API 代码包,但所需的类是内部的。OP 说他们复制了 50k 行代码以使其正常工作。我不确定自那篇帖子以来它是否有所改善,但这是我刚刚想到的一种解决方法。由于您只能将 EXE 文件(以及根据评论的快捷方式)固定到任务栏,因此您可以将应用程序重命名为非 exe 扩展名(大多数非 exe 扩展名无法固定)。
当您想从其他应用程序调用它时,将其重命名为.exe
,启动它,然后再次重命名它。例如:
Process p = new Process();
//fake extension so it can't be drag/dropped to taskbar
string fakeExtensionName = @"C:\MyFile\myProgram.test";
//what it's actually called
string exeExtensionName = @"C:\MyFile\myProgram.exe";
//rename the fake one to the real one
File.Move(fakeExtensionName, exeExtensionName);
p.StartInfo.FileName = exeExtensionName;
//launch the real one
p.Start();
//rename it back to the fake extension
File.Move(exeExtensionName, fakeExtensionName);
如果他们真的想要,任何人都可以将其重命名为 exe,因此您的程序应该假设用户可以直接启动它并处理该场景,但是任何文件都可以通过将其重命名为 exe 来固定到任务栏,因此周围没有保护那。
好的,我在这里找到了一个丑陋但简单的解决方案https://stackoverflow.com/a/3872503/1323570
显然,注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileAssociation\AddRemoveNames 包含一些在可执行文件中可能不存在的单词,如果应该可以固定的话。
您还可以在此处阅读更多信息:http ://www.west-wind.com/weblog/posts/2009/Oct/08/Application-that-wont-Pin-to-Taskbar-in-Windows-7
编辑:
找到了正确的方法:
添加密钥:
HKEY_CLASSES_ROOT\Applications\Example.exe\NoStartPage
参考: http: //msdn.microsoft.com/en-us/library/windows/desktop/hh127439 (v=vs.85).aspx