Lisa
Lisa

Reputation: 3181

How to use Shell32 within a C# application?

What should I include within a C# application in order to make Shell32 work?

Edit:

My application can't recognize shell32. What references or lib should I include? What I'm trying to do is:

Shell32.Shell shell = new Shell32.Shell(); 

What I'm getting as an error:

Error 1 The type or namespace name 'Shell32' could not be found (are you missing a using directive or an assembly reference?)

Upvotes: 41

Views: 85252

Answers (8)

Du D.
Du D.

Reputation: 5310

This solution does not compile under windows 8 and later. For that, a workaround can be found here:

using Shell32;

private Shell32.Folder GetShell32Folder(string folderPath)
{
    Type shellAppType = Type.GetTypeFromProgID("Shell.Application");
    Object shell = Activator.CreateInstance(shellAppType);
    return (Shell32.Folder)shellAppType.InvokeMember("NameSpace",
        System.Reflection.BindingFlags.InvokeMethod, null, shell, new object[] { folderPath });
}

Upvotes: 33

gonzobrains
gonzobrains

Reputation: 8036

  1. Right click your project in the solution explorer.
  2. Choose "Add Reference..." from the drop-down menu.
  3. Click the "Browse" tab.
  4. Navigate to the C:\Windows\System32 directory.
  5. Choose the shell32.dll file. and press the "OK" button.

You now have the appropriate reference for using Shell32.Shell.

Upvotes: 8

noztol
noztol

Reputation: 524

If you don't need the full set of API calls, you maybe better off creating a COM import stub class. See how Mike Ward who wrote Desk Drive did it.

Link 1

Link 2

Upvotes: 2

Tim Flinn
Tim Flinn

Reputation: 61

C# .Net I do not understand the full question but this is working for me.

[DllImport("Shell32.dll")]
        public static extern int ShellExecuteA(int hwnd, string lpOperation, string lpFile, int lpParameters, int lpDirecotry, int nShowCmd);

private void pictureBox1_Click(object sender, EventArgs e)
        {
            int open;
            open = ShellExecuteA(0, "open", "https://google.com", 0, 0, 1);
        }

Using a picturebox to open a link.

Upvotes: 1

Vasiliy Ermolovich
Vasiliy Ermolovich

Reputation: 24637

Just add a reference to Shell32.dll from the Windows\System32 folder and use it:

Shell32.Shell shell = new Shell32.Shell();
shell.MinimizeAll();

Upvotes: 63

Edward Brey
Edward Brey

Reputation: 41728

Add to your project a reference to the COM library Microsoft Shell Controls and Automation. Additionally, ensure that the code using Shell32.Shell is running in a single threaded apartment, e.g. by adding the [STAThread] attribute to Main.

Upvotes: 4

Mr.X
Mr.X

Reputation: 31345

maybe this can help:

  1. Right click project
  2. Click Add reference
  3. Click .COM tab in Add reference dialogue
  4. Select Microsoft Shell Controls and Automation
  5. Click OK

your shell32 is ready to use...

Upvotes: 64

user3126891
user3126891

Reputation: 39

The class shown below should help with some of the methods of shell32 in C# . you should add the reference of "Microsoft Shell command and automation" with the reference window by righting clicking the project .

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

    namespace MusicMuttPrototype
    {
        public class clsShellFileInfo
        {
            public Exception errorException;
            public enum FileDetailInfo
            {
                Name = 0,
                Year = 15,
                Size = 1,
                Track_Number = 19,
                Type = 2,
                Genre = 20,
                Date_Modified = 3,
                Duration = 27,
                Date_Created = 4,
                Bit_Rate = 28,
                Date_Accessed = 5,
                Protected = 23,
                Attributes = 6,
                Camera_Model = 24,
                Status = 7,
                Date_Picture_Taken = 25,
                Owner = 8,
                Dimensions = 26,
                Author = 9,
                Not_used = 27,
                Title = 10,
                Not_used_file = 28,
                Subject = 11,
                //Not_used = 29,
                Category = 12,
                Company = 30,
                Pages = 13,
                Description = 31,
                Comments = 14,
                File_Version = 32,
                Copyright = 15,
                Product_Name_Chapter = 33,
                //Scripting Quicktest Profess11ional Page 63 
                Artist = 16,
                Product_Version = 34,
                Album_Title = 17,
                Retrieves_the_info_tip_inf = -1
            }

            public string getFileDetails(string fileFolder, string filePath, FileDetailInfo infotype)
            {
                string strReturnval = "";
                try
                {
                    Shell32.Shell fileshell = new Shell32.Shell();
                    Shell32.Folder fileshellfolder = fileshell.NameSpace(fileFolder);
                    Shell32.FolderItem Item = fileshellfolder.ParseName(filePath);
                    strReturnval = fileshellfolder.GetDetailsOf(Item, (int)infotype);
                }
                catch (Exception ex)
                {

                    errorException = ex;
                }
                return strReturnval;
            }


        }
    }

Upvotes: 2

Related Questions