2011-07-23 10 views
3

私はあなたがそのような質問のために私を嫌っていることを知っています。しかし、誰かが次のコードが何をしているか教えてくれますか?このAPIは正確に何であり、何をしていますか?

私はいくつかのライブラリがロードされていることを意味します、私はそれを取得します。プラスいくつかの方法がありますが、それでも私はそれを取得しません。ここで

F.e:

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
     [return: MarshalAs(UnmanagedType.Bool)] 

はコードです:

private static class API 
    { 

     [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
     public static extern IntPtr SetWindowsHookEx(
      int idHook, 
      HookDel lpfn, 
      IntPtr hMod, 
      uint dwThreadId); 

     [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
     [return: MarshalAs(UnmanagedType.Bool)] 
     public static extern bool UnhookWindowsHookEx(IntPtr hhk); 

     [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
     public static extern IntPtr CallNextHookEx(
      IntPtr hhk, 
      int nCode, 
      IntPtr wParam, 
      IntPtr lParam); 

     [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
     public static extern IntPtr GetModuleHandle(
      string lpModuleName); 
    } 

あなたは私に行の行をそれを説明する必要はありません。少なくとも私がそれを読むことができる参考文献を与えてください。

Thxで事前に!

+4

すべてのコードでは、P/Invokeによって提供されるいくつかのメソッドが宣言されています。それ自体は何もしません。実行時に使用されるメソッドは、使用されているものに答えるためにより重要です。 –

答えて

3

このコードでは、P/Invokeを使用して、C#コードでWindows Hooksに関連するいくつかのWin32 API関数を呼び出すことができます。

投稿されたコードはメソッドのみを定義します。それを呼び出すのではないので、それだけで何もしません。コードの他の部分からメソッドを使用することができます。

2

ここには、P/Invokeについて説明している古いMSDNの記事があります。うまくいけば、これはあなたに役立ちます。

コードでは、マネージC#コードでアンマネージWin32 API関数を呼び出すことができます。

MSDNにはtutorialもあります。質問のようなコードを作成するP/Invokeプロセスがあります。

1

DllImportは、.NET/Managed Codeのアンマネージコード/ APIを呼び出すために使用されます。あなたが投稿したすべてのコードは、Win32 APIのwindowオブジェクトで作業しようとしています。

参考文献:

DLLImport

Win32 API

Win32 API to .Net API map

1

thisを見てみましょう。あなたのプログラムはどこかのイベントを監視するためにフックチェーンをフックにインストールしています。

dllimport属性自体によって、プログラムは前の回答のようにwin32 api関数を呼び出すことができます。

関連する問題