Ich verwende die Vorlage von https://alanbondo.wordpress.com/2008/06/22/creating-a-system-tray-app-with-c/ zum Erstellen eines Taskleistensymbols, das über ein Kontextmenü verfügt.Numerieren Sie den Inhalt von Ordnern/Unterordnern mit der rechten Maustaste auf das Kontextmenü der Taskleiste in C#
ich in der Lage bin eine der Tasten haben einen Explorer-Prozess starten, der an die Wurzel eines Verzeichnisses öffnet mit dieser Funktion
private void MyApps(object sender, EventArgs e)
{
String currentUser = Environment.UserName.ToString();
Process explorer = new Process();
explorer.StartInfo.FileName = "explorer.exe";
explorer.StartInfo.Arguments = @"C:\Users\" + currentUser + @"\desktop\MyApps";
explorer.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
explorer.Start();
}
Was würde ich lieber tun, ist das System Tray-Icon-Taste hat, wenn Klicken Sie auf, erweitern Sie in ein Untermenü, das den Inhalt des gewünschten Verzeichnisses enthält, das selbst durchsuchbare Unterordner enthält. Stellen Sie sich das Startmenü (vor Windows 8) mit verschachtelten Menüs und Anwendungen vor. das ist das Verhalten, das ich nachahmen möchte.
Was ich bis jetzt gefunden habe, sind mehrere Projekte, die Leute geschrieben haben, um ihre eigene angepasste Windows Explorer-Shell zu erstellen, müssen tatsächlich so weit gehen, um den Inhalt des gewünschten Ordners im Rechtsklick-Kontextmenü dynamisch aufzuzählen eines Taskleistensymbols?
Ich bin viel bequeme Visual Studio Formulare für .NET-Anwendungen verwenden, aber von dem, was ich gelesen habe, gibt es keinen Weg, um tatsächlich ‚verstecken‘ die Form beim Start, so jetzt ich C# bin mit
Irgendwelche Ratschläge oder Vorschläge würden geschätzt. Vielen Dank!
Bearbeiten: Hier ist der aktualisierte Code mit der vorgeschlagenen Methode zum rekursiven Auffüllen des Menüelements mit dem Inhalt des angegebenen Verzeichnisses. Ich bin jetzt erhalte eine Fehlermeldung, dass „System.Windows.Forms.MenuItem“ enthält keine Definition für DropDownItems
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
namespace MyTrayApp
{
public class SysTrayApp : Form
{
[STAThread]
public static void Main()
{
Application.Run(new SysTrayApp());
}
private NotifyIcon trayIcon;
private ContextMenu trayMenu;
public SysTrayApp()
{
trayMenu = new ContextMenu();
trayMenu.MenuItems.Add("Exit", OnExit);
trayMenu.MenuItems.Add("My Applications").Click += new EventHandler(MyApps);
trayIcon = new NotifyIcon();
trayIcon.Text = "MyTrayApp";
trayIcon.Icon = new Icon(SystemIcons.Application, 40, 40);
trayIcon.ContextMenu = trayMenu;
trayIcon.Visible = true;
}
protected override void OnLoad(EventArgs e)
{
Visible = false; // Hide form window.
ShowInTaskbar = false; // Remove from taskbar.
base.OnLoad(e);
}
private void OnExit(object sender, EventArgs e)
{
Application.Exit();
}
protected override void Dispose(bool isDisposing)
{
if (isDisposing)
{
trayIcon.Dispose();
}
base.Dispose(isDisposing);
}
private void MyApps(object sender, EventArgs e)
{
String currentUser = Environment.UserName.ToString();
string[] directories = Directory.GetDirectories(@"C:\Users\" + currentUser + @"\desktop\My Applications");
foreach (string dir in directories)
{
string[] subdir = Directory.GetDirectories(dir);
this.trayMenu.MenuItems.Add(dir);
foreach (string sub in subdir)
{
(trayMenu.MenuItems[trayMenu.MenuItems.Count - 1] as MenuItem).DropDownItems.Add(sub);
}
string[] files = Directory.GetFiles(dir);
foreach (string file in files)
{
this.trayMenu.MenuItems.Add(file);
}
}
}
}
}
wollen es nicht eine sehr schwierige Aufgabe sein. Sie müssen die Unterordner mit 'Directory.GetDirectories' auflisten und das Kontextmenü mit diesen Informationen erzeugen. Aber ich habe es nicht versucht, wenn Sie haben und irgendein spezifisches Problem haben, stellen Sie eine andere Frage darüber – Pikoh
Ist das wahrscheinlich, nur eine Liste des Inhalts des gewünschten Verzeichnisses zu bevölkern, verglichen mit einer Abkürzung zu den Akten, die sein können Einzelklick, um die einzelnen Dateien direkt aus der Liste zu starten? – gunstarone