我需要从应用程序的任务栏上下文菜单中删除应用程序启动和"Pin this Application to taskbar"。原因是应用程序不能独立启动,它必须从另一个应用程序获得信息。
有人知道怎么做吗?
根据这篇文章,你可以使用Windows API代码包,但所需的类是内部的。操作人员说他们复制了5万行代码才让它工作起来。我不确定自从那篇文章以来它是否有所改善,但这里有一个我刚刚想到的解决办法。由于您只能将EXE文件(和快捷方式按注释)固定到任务栏,您可以将应用程序重命名为非EXE扩展名(大多数非EXE扩展名不能固定)。
当你想从其他应用程序调用它时,将其重命名为.exe
,启动它,然后再次重命名。例如:
Process p = new Process();
//fake extension so it can't be drag/dropped to taskbar
string fakeExtensionName = @"C:MyFilemyProgram.test";
//what it's actually called
string exeExtensionName = @"C:MyFilemyProgram.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_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorer fileasassociation AddRemoveNames包含一些可能在可执行文件中不存在的单词,如果可能的话。
您也可以在这里阅读更多内容:http://www.west-wind.com/weblog/posts/2009/Oct/08/Application-that-wont-Pin-to-Taskbar-in-Windows-7
编辑:找到正确的方法:
添加键:
HKEY_CLASSES_ROOT 程序 Example.exe NoStartPage
裁判:http://msdn.microsoft.com/en-us/library/windows/desktop/hh127439 (v = vs.85) . aspx