Question

At the moment I am developing an application and want to add a Windows (7) JumpList. I followed several tutorials and studied documentation, but I can't figure out how to get the job done. In short: I want a recent list of last choosen files. So after closing the app, the user can easily open a recent file with my application. I already implemented some file association mechanism.

Is it possible to share some code/ tutorial how I can solve above problem?

Thank you in advance!

*I already tried the next few projects/ tutorials:

*The code of Coding 4 Fun works, but I don't know how to develop a recent file list.

Was it helpful?

Solution

You can check out this article. Instead of showing result in WPF you need to show it in jumplist.

Why dont you try storing the recently opened file names in a database or an xml file and read it to set the jumplist.

For eg.

private void ReportUsage()

   {

       XmlDocument myXml = new XmlDocument();

       myXml.Load(historyXml);

       string list = historyXml;

       jumpList.ClearAllUserTasks();

       foreach (XmlElement el in myXml.DocumentElement.ChildNodes)

       {

           string s = el.GetAttribute("url");

           JumpListLink jll = new JumpListLink(Assembly.GetEntryAssembly().Location, s);

           jll.IconReference = new IconReference(Path.Combine("C:\\Program Files\\ACS Digital Media\\TOC WPF Browser\\Icon1.ico"), 0);

           jll.Arguments = el.GetAttribute("url");

           jumpList.AddUserTasks(jll);

       }

       jumpList.Refresh();

   }



Or a beginners solution will be retain all the file paths into a Queue of given maximum capacity and adding them at run-time into a menuItem. Sorry I didnt have time to write the whole code.

OTHER TIPS

As it is described in your second article, your application must be registered as a handler for targeted file extension, otherwise the recent category for your Jumplist won't show up. You can find more details about file association registration there.

You can either manually register your application but you will need admin right so it is not recommended, or create a setup project for your application like described in the coding 4 fun article, or you can let the user associate the file extension.

Here is a sample which works for me under Windows Seven without registration, by just right clicking the text file I want to load and choosing "Open With" and browse to my application.

The sample require Windows API Code Pack

public partial class Form1 : Form
{
    [STAThread]
    static void Main(string[] args)
    {
        var file = args != null && args.Length > 0 ? args[0] : string.Empty;

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1(file));
    }

    public Form1()
        : this(string.Empty)
    {
    }

    public Form1(string file)
    {
        InitializeComponent();

        Open(file);
    }

    [DllImport("user32.dll")]
    private static extern uint RegisterWindowMessage(string message);

    private uint wmTBC;

    /// <summary>
    /// Registers the window message for notification when the taskbar button is created.
    /// </summary>
    /// <param name="e">The event args.</param>
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        wmTBC = RegisterWindowMessage("TaskbarButtonCreated");
    }

    /// <summary>
    /// Handles the window message for notification of the taskbar button creation.
    /// </summary>
    /// <param name="m">The window message.</param>
    protected override void WndProc(ref Message m)
    {
        base.WndProc(ref m);
        if (m.Msg == wmTBC)
        {
            OnTaskbarButtonCreated();
        }
    }

    /// <summary>
    /// Override this method to recieve notification when the taskbar button is created on Windows 7 machines and above.
    /// </summary>
    protected void OnTaskbarButtonCreated()
    {
        if (TaskbarManager.IsPlatformSupported)
        {
            jumpList = JumpList.CreateJumpList();
            jumpList.KnownCategoryToDisplay = JumpListKnownCategoryType.Recent;
            jumpList.Refresh();
        }
    }

    JumpList jumpList;

    private void openToolStripMenuItem1_Click(object sender, EventArgs e)
    {
        using (OpenFileDialog ofd = new OpenFileDialog())
        {
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                Open(ofd.FileName);
            }
        }
    }

    private void Open(string file)
    {
        try
        {
            if (!string.IsNullOrEmpty(file) && File.Exists(file))
            {
                textBox1.Text = File.ReadAllText(file);

                if (TaskbarManager.IsPlatformSupported)
                {
                    jumpList.AddToRecent(file);
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }


    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    #region Windows Form Designer generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
        this.textBox1 = new System.Windows.Forms.TextBox();
        this.menuStrip1 = new System.Windows.Forms.MenuStrip();
        this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
        this.openToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
        this.menuStrip1.SuspendLayout();
        this.SuspendLayout();
        // 
        // textBox1
        // 
        this.textBox1.Location = new System.Drawing.Point(12, 27);
        this.textBox1.Multiline = true;
        this.textBox1.Name = "textBox1";
        this.textBox1.Size = new System.Drawing.Size(796, 306);
        this.textBox1.TabIndex = 0;
        // 
        // menuStrip1
        // 
        this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
        this.openToolStripMenuItem});
        this.menuStrip1.Location = new System.Drawing.Point(0, 0);
        this.menuStrip1.Name = "menuStrip1";
        this.menuStrip1.Size = new System.Drawing.Size(820, 24);
        this.menuStrip1.TabIndex = 1;
        this.menuStrip1.Text = "menuStrip1";
        // 
        // openToolStripMenuItem
        // 
        this.openToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
        this.openToolStripMenuItem1});
        this.openToolStripMenuItem.Name = "openToolStripMenuItem";
        this.openToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
        this.openToolStripMenuItem.Text = "File";
        // 
        // openToolStripMenuItem1
        // 
        this.openToolStripMenuItem1.Name = "openToolStripMenuItem1";
        this.openToolStripMenuItem1.Size = new System.Drawing.Size(152, 22);
        this.openToolStripMenuItem1.Text = "Open";
        this.openToolStripMenuItem1.Click += new System.EventHandler(this.openToolStripMenuItem1_Click);
        // 
        // Form1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(820, 345);
        this.Controls.Add(this.textBox1);
        this.Controls.Add(this.menuStrip1);
        this.MainMenuStrip = this.menuStrip1;
        this.Name = "Form1";
        this.Text = "Form1";
        this.menuStrip1.ResumeLayout(false);
        this.menuStrip1.PerformLayout();
        this.ResumeLayout(false);
        this.PerformLayout();

    }

    #endregion

    private System.Windows.Forms.TextBox textBox1;
    private System.Windows.Forms.MenuStrip menuStrip1;
    private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem;
    private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem1;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top