将上下文菜单添加到桌面背景

时间:2014-01-11 04:15:17

标签: c# contextmenu desktop

我有一个我想在系统托盘中运行的程序。当我的程序运行时,我想在用户点击桌面时为其提供上下文菜单。

例如,假设用户点击桌面(不在任何文件夹,图标等上,仅在桌面上)。我会为他们提供一个上下文菜单,例如:

wallpaper context menu screenshot

我知道如何使用注册表文件(.REG)添加这些文件:

[HKEY_CLASSES_ROOT\DesktopBackground\Shell\Wallpaper]
"MUIVerb"="Wallpaper Settings"
"SubCommands"="Next;Previous;Reset"
"Position"="bottom"

; Next
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Next]
@="Next"

; Previous
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Previous]
@="Previous"

; Reset
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Reset]
@="Reset"

在我的程序中,我尝试将这些条目添加到注册表中,但由于程序未以管理员身份运行,因此我一直遇到权限问题。我也不想强迫我的程序的最终用户以管理员身份运行它。

如何编写将上下文菜单添加到桌面背景但不必以管理员身份运行的程序?或者我可以吗?

我的程序是否必须作为服务运行?

谢谢。

1 个答案:

答案 0 :(得分:0)

在安装过程中应用.REG文件。

如果您自己制作安装程序:

var path = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Next";
Microsoft.Win32.Registry.LocalMachine.CreateSubKey(path, true); // True makes it writeable
Microsoft.Win32.Registry.LocalMachine.OpenSubKey(path).SetValue("@", "Reset", Microsoft.Win32.RegistryValueKind.String);

值得庆幸的是,没有办法做这个没有管理权限。

相关问题