2011-07-23 62 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

這是舊版MSDN文章解釋P/Invoke和發生了什麼事情。希望這可以幫助你。

代碼的作用是讓您的託管C#代碼調用非託管Win32 API函數。

這裏還有一個MSDN上的tutorial,它引導您通過P/Invoke創建類似您的問題的代碼的過程。

1

看看this。你的程序在某處安裝了一個hook到windows hook chain來監視一些事件。

dllimport屬性本身允許程序調用win32 api函數,就像前面提到的答案一樣。