C# – Win32 API calls in C# ?!?!
Verfasst von Gerald Huber am Montag, 7. Januar 2008
Wieder einmal eine Frage, die sich der ein oder andere sicherlich schon mal gestellt hat, was ist, wenn der Befehl/die Funktion die ich brauche nicht in der .NET-Library enthalten ist? – Klar, momentan gibt es (so gut wie .NET 3.5) aber es ist immer noch nicht alles von Windows „gewrappt“ worden.
Kann man also unter (innerhalb) von C# Win32-Api-Methoden aufrufen? – JA.
Und zwar so:
-
Wir machen unsere Funktion ausfindig. Z.B. die Methode den um die Workstation, also unsere aktuelle Windows-Sitzung zu sperren.
-
Die MSDN-Library sagt hierzu, dass wir die Methode
LockWorkStationaus deruser32.dll-Datei brauchen. -
Nun schreiben wir in unsere C#-Klasse folgende Zeilen:
[DllImport("user32.dll", SetLastError = true)]
public static extern bool LockWorkStation();
Hierbei Importieren wir die „user32.dll“ mittels „DllImport“ und müssen natürlich die Methode als „extern“ definieren, da sie ja aus dieser DLL-Datei importiert wird.
„SetLastError=true“ sagt nur, dass wir eine Fehlermeldung der Importierten Methode auslesen könnten.Anmerkung: Hätten wir zu dem DllImport-Attribute noch “ EntryPoint=“LockWorkStation“ “ geschrieben hätten wir unsere Methode anders benennen können, also z.B. wie folgt:
[DllImport("user32.dll", EntryPoint="LockWorkStation", SetLastError = true)]
public static extern bool Lock();
-
Das ist auch schon alles.
Viel Spass!
M. Denzer sagte
Hallo!
Ich bekomme eine „MissingMethodException“: PInvoke-DLL ‘user32.dll’ wurde nicht gefunden.
Was mache ich falsch? Ist ein Pocket PC 2003 Projekt mit dem Compact Framework 2.0.
Viele Danke für die Hilfe!
M. Denzer