Как использовать Shell32 в приложении C #? - PullRequest
28 голосов
/ 19 апреля 2011

Что я должен включить в приложение C #, чтобы заставить Shell32 работать?

Редактировать:

Мое приложение не может распознавать shell32.Какие ссылки или lib я должен включать?Я пытаюсь сделать следующее:

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

Что я получаю как ошибку:

Ошибка 1 Не удалось найти имя типа или пространства имен 'Shell32'(вам не хватает директивы using или ссылки на сборку?)

Ответы [ 9 ]

48 голосов
/ 19 апреля 2011

Просто добавьте ссылку на Shell32.dll из папки Windows\System32 и используйте ее:

Shell32.Shell shell = new Shell32.Shell();
shell.MinimizeAll();
46 голосов
/ 19 сентября 2013

может быть, это может помочь:

  1. Щелкните правой кнопкой мыши проект
  2. Нажмите Add reference
  3. Щелкните вкладку .COM в Add reference диалоге
  4. Выберите Microsoft Shell Controls and Automation
  5. Нажмите ОК

ваш shell32 готов к использованию ...

26 голосов
/ 26 сентября 2013

Я знаю, что эта ветка старая, но я выкладываю ее для тех, у кого такая же проблема, как и у меня. Решение выше не компилируется под windows 8

Shell32.Shell shell = новый Shell32.Shell (); <= это не работает с Windows 8 </strong>

Используйте обходной путь ниже, если вы хотите, чтобы ваши приложения работали под Windows 8.

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 });
}
6 голосов
/ 22 февраля 2013
  1. Щелкните правой кнопкой мыши свой проект в обозревателе решений.
  2. Выберите «Добавить ссылку ...» из выпадающего меню.
  3. Перейдите на вкладку «Обзор».
  4. Перейдите в каталог C: \ Windows \ System32.
  5. Выберите файл "shell32.dll". и нажмите кнопку «ОК».

Теперь у вас есть соответствующая ссылка для использования Shell32.Shell.

2 голосов
/ 22 декабря 2013

Класс, показанный ниже, должен помочь с некоторыми методами shell32 в C #. Вы должны добавить ссылку на «Команду и оболочку Microsoft Shell» вместе со справочным окном, щелкнув правой кнопкой мыши проект.

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;
            }


        }
    }
2 голосов
/ 19 апреля 2011

Я предполагаю, что у вас возникли проблемы с распознаванием любых вызовов, поэтому я отсылаю вас к этой общей статье: http://www.codeproject.com/KB/shell/csdoesshell1.aspx

Помимо этого, вам нужно будет указать, что именноне работает для вас.

1 голос
/ 20 октября 2016

Если вам не нужен полный набор вызовов API, вам лучше создать класс заглушки для импорта COM.Посмотрите, как это сделал Майк Уорд, который написал Desk Drive.

http://mike -ward.net / 2008/09/02 / a-lean-method-for-invoking-com-in-c / https://github.com/mike-ward/DeskDrive/blob/master/src/DeskDrive/Shell32.cs

0 голосов
/ 17 января 2019

Добавьте в свой проект ссылку на библиотеку COM Microsoft Shell Controls and Automation .Кроме того, убедитесь, что код, использующий Shell32.Shell, выполняется в однопоточной квартире, например, добавив атрибут [STAThread] в Main.

0 голосов
/ 09 июля 2018

Ссылка на фактическую shell32.dll устарела. Вы получите ошибки в .NET Framework 4+. Использование более старого .NET Framework только для использования shell32.dll ограничивает возможности вашей программы. В приложениях для Windows 7+ и .NET Framework 4+ вы всегда должны использовать вместо этого компонент .COM. Щелкните правой кнопкой мыши проект. Нажмите Добавить ссылку. Нажмите вкладку .COM в диалоговом окне Добавить ссылку. Выберите Microso.ft Shell Controls and Automation. Нажмите ОК

...