C# Asynchronous Download File with Progress

// Sample call : DownLoadFileInBackground2 ("http://www.contoso.com/logs/January.txt");

public static void DownLoadFileInBackground2(string address)
    WebClient client = new WebClient ();
    Uri uri = new Uri(address);

    // Specify that the DownloadFileCallback method gets called
    // when the download completes.
    client.DownloadFileCompleted += new AsyncCompletedEventHandler (DownloadFileCallback2);

    // Specify a progress notification handler.
    client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressCallback);
    client.DownloadFileAsync (uri, "serverdata.txt");

private static void UploadProgressCallback(object sender, UploadProgressChangedEventArgs e)

    // Displays the operation identifier, and the transfer progress.
    Console.WriteLine("{0}    uploaded {1} of {2} bytes. {3} % complete...", 


private static void DownloadProgressCallback(object sender, DownloadProgressChangedEventArgs e)
     // Displays the operation identifier, and the transfer progress.    
     Console.WriteLine("{0}    downloaded {1} of {2} bytes. {3} % complete...",         (string)e.UserState,         
        e.BytesReceived,         e.TotalBytesToReceive,                    e.ProgressPercentage);


Source: https://msdn.microsoft.com/en-us/library/ms144196(v=vs.110).aspx

Add an Application Shortcut to Windows File Explorer’s Context Menu

Context menu for right click on folders in left panel of Windows File Explorer or on background of a directory in right panel

  1. HKEY_CLASSES_ROOT\Directory\Background\shell if you are administrator
  2. HKEY_CURRENT_USER\Software\Classes\directory\Background\shell if you are a normal user

Context menu for right click on folders in right panel of Windows File Explorer

  1. HKEY_CLASSES_ROOT\Directory\shell if you are administrator
  2. HKEY_CURRENT_USER\Software\Classes\directory\shell if you are a normal user

Context menu for any file

  1. HKEY_CLASSES_ROOT\*\shell if you are administrator
  2. HKEY_CURRENT_USER\Software\Classes\*\shell if you are a normal user

In all cases:

  1. add a new key under “shell”, naming it as you want to name the context menu item
  2. add a new key inside this key, named command (mandatory name)
  3. edit the “default” property in “command” to myprogrampath\path\path\executable.exe %1 to pass the file path and name of the selected file to your custom program.

C# Example

Add a String Value to the key called “AppliesTo” and set its value to “under:{path}”

In my example, I want it to only look in the T Drive, so my String value is “AppliesTo”:”under:T:”.

In C#, this is easily accomplished with the following:

RegistryKey _key = Registry.ClassesRoot.OpenSubKey("Folder\\Shell", true);
RegistryKey newkey = _key.CreateSubKey("My Menu Item");
newkey.SetValue("AppliesTo", "under:T:");

RegistryKey subNewkey = newkey.CreateSubKey("Command");
subNewkey.SetValue("", "C:\\yourApplication.exe");


Full Detailed Example

With a quick registry tweak, you can add any application to any Windows Explorer context menu. You can even add application shortcuts to your desktop’s context menu and launch your favorite applications just by right-clicking on your desktop.

Getting Started

First, launch regedit.exe from the Start menu.

Expand the HKEY_CLASSES_ROOT key.

Specific File Types

As an example, let’s add an option to the context menu for .gif files.

First, scroll down to the .gif key under HKEY_CLASSES_ROOT.

Select it and look at its “(Default)” value. In this case, the default value is “giffile”.

Head to down to the giffile\shell key, also under HKEY_CLASSES_ROOT.

First, right-click the shell key and create a new key. Name the key what you want the option to appear as in the menu. Next, right-click the key you just created and create a new subkey under it. Name the new key “command.”

Double-click the “(Default)” value in the command key and enter the path to the .exe file in the following format:

C:\\Program Files\\Something\\something.exe %1

Be sure to use the double backslashes and end the path with %1. The %1 passes the selected file name to the program.

The option will appear immediately.

Only When Pressing Shift

To have a shortcut appear only when you press Shift while right-clicking, create a string value named “Extended” in the action’s main key.

All File Types

The HKEY_CLASSES_ROOT\*\shell key holds options that appear when you right-click any type of file.

First, navigate to the *\shell key.

Next, create a key with the same structure.

You’ll see the option when you right-click any type of file.

Desktop Menu

Use the HKEY_CLASSES_ROOT\DesktopBackground\shell key to have a shortcut appear when you right-click the desktop.

Omit the %1 part of the command because you only want Windows to launch the app, not try to pass anything to it.

Folder Menus

Use the HKEY_CLASSES_ROOT\Directory\shell key to have the option appear when you right-click a directory.

Use the HKEY_CLASSES_ROOT\Directory\Background\shell key to have an option appear when you right-click the background of a directory in a Windows Explorer window.

Source: http://www.howtogeek.com/107965/how-to-add-any-application-shortcut-to-windows-explorers-context-menu/


Create html and chm documentation from C# or C++ Visual Studio source code

Products to be used


Doxygen (doxywizard.exe) is used to generate HTML documentation from source files. Furthermore, it generates the elements needed to create the .chm (compressed HTML) file too. Doxygen can be used under the terms of the GNU General Public License. Doxygen can be downloaded from www.doxygen.org.

Microsoft HTML Help Workshop ®

HTML Help Workshop (hhw.exe) is used to generate compressed HTML files (.chm). This tool is free and can be downloaded from here.

Procedure for generating the technical documentation

Generating HTML files

  • Execute Doxygen GUI frontend (doxywizard.exe).
  • Configure the parameters by using either “Wizard” or “Expert” mode.
  • In order to prepare the .chm file generating, in “Output” tab, it has to check “HTML” and “prepare for compressed HTML” in wizard mode. Whether the expert mode has been chosen, in “HTML” tab, it has to check “GENERATE_HTMLHELP” and to enter the .chm filename (with the extension) in “CHM_FILE” field.
  • Save the configuration file.
  • Run the generating process by clicking on the “Start” button.
  • Check the result by executing “index.html” in the “html” sub folder.
In addition of the html documentation, three more files are supposed to be generated in the “html” sub folder: “index.hhp”, “index.hhc” and “index.hhk”.

Generating compressed HTML file (.chm)

  • Execute HTML Help Workshop (hhw.exe).
  • Open the project file: index.hhp.
  • Eventually change the compiled file location to drop it in the “Doc” folder.
  • Compile the HTML files.
  • Outside HTLM Help Workshop, open the created file in order to  check it.

C# and C++ comments restrictions in Visual Studio ®

Doxygen recognize the C# and C++ comments tags like ///<summary></summary>,///<param></param>, ///<returns></returns> and the other ones. But, for example, under Windows version, it does not recognize the line feed in comments.
So, whether you want to go beyond these basic features and if you want  to format your comments, the best way is to use the Doxygen tags inside the standard comments tags (refer to Doxygen documentation for details).
The Visual Studio compiler does not send any warning about these, but, unfortunetly, these tags appear in the tooltips in the editor.
Below is a sample with “\n” tag for the line feed and, “\code” and “\endcode” to show the encapsulated text like code pattern in the output help file.
/// <summary>
/// Load a config XML file.
/// \n\n XML file format:
/// \code
/// <Parent>
///     <Child Name='ID' Type='Type1' />        
///     ...
/// </Parent>
/// \endcode
/// </summary>

 Visual Studio® and Html Help Workshop® are registered trademarks of Microsoft.

How to Configure the Linux Grub2 Boot Menu the Easy Way

Installing Grub Customizer

The tool in question is called Grub Customizer, created by Daniel Richter. He’s provided a PPA to make installing the tool quick and easy.

Open a terminal window (Ctrl+Alt+T or Applications > Accessories > Terminal) and type in the following commands.

sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get updatesudo apt-get install grub-customizer

GrubCustomizer will now show up in the Applications > System Tools menu.

Or you can open it from the command line.

gksudo grub-customizer

Hide Boot Menu Options

Over time, your boot menu can get cluttered with old versions of the Linux kernel. In a previous article, we showed you how to remove these manually; Grub Customizer makes this process much easier.

When Grub Customizer starts up, you’ll see a list of all the items that show up in the boot menu.

To hide entries that you don’t want to see anymore, simply uncheck the checkbox next to them.

Click the Save button at the top-left to make your changes permanent.

You can uncheck entire sections if you don’t want Grub2 to probe for new operating systems, or give you the option to test your computer’s memory.

Note that, unlike the manual method, this process does not actually remove the kernels from your computer, it just hides them from the boot menu.

Customize Grub Behavior

Grub Customizer can do much more than hide boot menu entries! Opening up the Preferences window lets you customize almost every aspect of Grub.

For example, you can set the default boot menu entry to a certain position, or a specific item.

If you’re bored by the default white-text-on-black-background look of Grub2, you can add a background image and customize text colors.

And, for Grub2 experts, you can set advanced settings much more easily than by editing the configuration files manually.

Grub Customizer is a great addition to any Linux installation that uses Grub2!

Thanks to How-To Geek commenter Hugues for recommending this program!See this Ubuntu Forums post for more detailed information on Grub Customizer.

Source: How to Configure the Linux Grub2 Boot Menu the Easy Way