Shell32を機能させるには、C#アプリケーションに何を含める必要がありますか?
編集:
私のアプリケーションはshell32を認識できません。どのような参照またはライブラリを含める必要がありますか?私がやろうとしていることは:
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 referenceMicrosoft Shell Controls and Automationあなたshell32は使用する準備ができています...
このスレッドが古いことは知っていますが、私と同じ問題を抱えている人のためにこれを投稿します。上記のソリューションは、Windows8ではコンパイルされません
Shell32.Shell shell = new Shell32.Shell(); <=これはWindows8では機能しません
アプリをWindows8で実行する場合は、以下の回避策を使用してください。
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を使用するための適切なリファレンスができました。
プロジェクトに、COMライブラリMicrosoft Shell ControlsandAutomationへの参照を追加します。さらに、を使用するコードShell32.Shellがシングルスレッドアパートメントで実行されていることを確認します。たとえば、に[STAThread]属性を追加しますMain。
通話が認識されないように問題があると思われるので、次の一般的な記事を参照してください:http: //www.codeproject.com/KB/shell/csdoesshell1.aspx
それを超えて、あなたはあなたのために働いていないものの詳細を提供する必要があります。
以下に示すクラスは、C#のshell32のメソッドのいくつかに役立つはずです。プロジェクトを右クリックして、参照ウィンドウに「MicrosoftShellコマンドと自動化」の参照を追加する必要があります。
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インポートスタブクラスを作成することをお勧めします。DeskDriveを書いたMikeWardがどのようにそれをしたかを見てください。
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を参照することは非推奨です。.NETFramework4以降ではエラーが発生します。shell32.dllを使用するためだけに古い.NETFrameworkを使用すると、プログラムの機能が制限されます。Windows7以降および.NETFramework4以降のアプリケーションでは、代わりに常に.COMコンポーネントを使用する必要があります。プロジェクトを右クリックします。[参照の追加]をクリックします。[参照の追加]ダイアログの[.COM]タブをクリックします。Microso.ft Shell ControlsandAutomationを選択します。[OK]をクリックします