Shell API über DllImport hinzufügen

03/09/2007 - 14:34 von Grumbach, Andre | Report spam
Hallo zusammen,
ich habe vor geraumer Zeit ein Programm geschrieben, das auf die Shell32.ddl
zugreift.

Dazu habe ich einfach eine Reference auf diese DLL gemacht und kann dann
einfach drauf zugreifen.

Nachdem ich die Klasse:
Shell32.ShellClass initalisiert habe, kann ich mir über
shell.NameSpace(Pfad) den Ordner ausgeben lassen.
Das funktioniert nun auch alles ganz gut.

Nun würde ich jedoch die Referenz entfernen (da ich durch Vista immer eine
andere Version habe),
Nun ist jedoch die Frage wie ich solche funktionen neu einbinden kann.
Ich bin bisher auf Sachen wie z.B.
[DllImport("shell32.dll")] gestossen, jedoch bekomm ich immer einen PInvoke
Fehler.
wen ich folgende Methode aufrufe:

[DllImport("shell32.dll")]
public static extern object NameSpace(object dir);

Kann mir jemand sagenw ei ich Methoden aus der DLL so einbinden kann, das
der Aufruf funktioniert?

Danke schon einmal,
Andre
 

Lesen sie die antworten

#1 Frank Dzaebel
03/09/2007 - 15:17 | Warnen spam
Hallo Andre,

Shell32.ShellClass initalisiert habe, kann ich mir über
shell.NameSpace(Pfad) den Ordner ausgeben lassen.
Das funktioniert nun auch alles ganz gut.



ja.


Nun würde ich jedoch die Referenz entfernen (da ich durch
Vista immer eine andere Version habe), [...]
Kann mir jemand sagenw ei ich Methoden aus der DLL so einbinden kann, das
der Aufruf funktioniert?



Brauchst Du ggf. gar nichts einbinden, da
COM-Objekt. Kannst Du z.B. versionslos über
folgende Konstruktion(en) erreichen:

(ungeprüft auf Vista)

{
Type typeShell = Type.GetTypeFromProgID("Shell.Application", true);
object shell = Activator.CreateInstance(typeShell);
object folder = Call(shell, "NameSpace", @"C:\Windows");
object folderItem = Call(folder, "ParseName", "clock.avi");
MessageBox.Show(Call(folder, "GetDetailsOf",
folderItem, 2).ToString());
}

private object Call(object target, string methodName,
params object[] parameters)
{
return target.GetType().InvokeMember(methodName,
BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding,
null, target, parameters);
}

Andere Sache:
Geht denn unter Vista das Einbinden des COM-Verweises
auf die "Microsoft Shell Controls And Automation" DLL nicht?


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen