Geralds Thought Shed

Gedanken zu .Net, C#, Java, Windows, Linux, Mobile-Life und mehr….

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:

  1. Wir machen unsere Funktion ausfindig. Z.B. die Methode den um die Workstation, also unsere aktuelle Windows-Sitzung zu sperren.
  2. Die MSDN-Library sagt hierzu, dass wir die Methode LockWorkStation aus der user32.dll-Datei brauchen.
  3. 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();
  4. Das ist auch schon alles.
     

Viel Spass!

Eine Antwort zu “C# – Win32 API calls in C# ?!?!”

  1. 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

Einen Kommentar schreiben

XHTML: Du kannst diese Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>