Ответ 1
Просто добавьте ссылку на Shell32.dll
из папки Windows\System32
и используйте ее:
Shell32.Shell shell = new Shell32.Shell();
shell.MinimizeAll();
Что мне следует включить в приложение С#, чтобы заставить Shell32 работать?
Edit:
Мое приложение не может распознать shell32. Какие ссылки или lib я должен включить? Я пытаюсь сделать это:
Shell32.Shell shell = new Shell32.Shell();
Что я получаю как ошибку:
Ошибка 1 Не удалось найти имя типа или пространства имен "Shell32" (вам не хватает директивы using или ссылки на сборку?)
Просто добавьте ссылку на Shell32.dll
из папки Windows\System32
и используйте ее:
Shell32.Shell shell = new Shell32.Shell();
shell.MinimizeAll();
возможно, это может помочь:
Add reference
.COM
в диалоге Add reference
Microsoft Shell Controls and Automation
ваш shell32
готов к использованию...
Я знаю, что эта ветка устарела, но я публикую ее для тех, кто имеет ту же проблему, что и я. Решение выше не компилируется под окнами 8
Shell32.Shell shell = новый Shell32.Shell(); <= это не работает с окнами 8
Используйте работу ниже, если вы хотите, чтобы ваши приложения запускались под окнами 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 });
}
Теперь у вас есть соответствующая ссылка для использования Shell32.Shell.
Я предполагаю, что у вас возникли проблемы с распознаванием любых вызовов, поэтому я приведу вас к этой общей статье: http://www.codeproject.com/KB/shell/csdoesshell1.aspx
Кроме того, вам нужно будет указать особенности того, что не работает для вас.
Класс, показанный ниже, должен помочь с некоторыми из методов shell32 в С#. вы должны добавить ссылку "Командная и автоматическая оболочка 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;
}
}
}
Если вам не нужен полный набор вызовов 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
Ссылка на фактическую shell32.dll устарела. Вы получите ошибки в .NET Framework 4+. Использование более старого .NET Framework только для использования shell32.dll ограничивает возможности вашей программы. В приложениях для Windows 7+ и .NET Framework 4+ вы всегда должны использовать вместо этого компонент .COM. Щелкните правой кнопкой мыши проект. Нажмите Добавить ссылку. Нажмите вкладку .COM в диалоговом окне Добавить ссылку. Выберите Microso.ft Shell Controls and Automation. Нажмите ОК
Добавьте в свой проект ссылку на COM-библиотеку Microsoft Shell Controls and Automation. Кроме того, убедитесь, что код, использующий Shell32.Shell
, выполняется в однопоточном апартаменте, например, добавив [STAThread]
в Main
.