2010-06-28 67 views
0

有誰知道有關Delphi的系統級API掛鉤?如何在Delphi中設置系統範圍的API鉤子?

我下載了madCodeHook,但它沒有任何源代碼,所以我不想使用它;我想自己編程。

我發現an article on Code Project,但它是在C++中。請幫助我在Delphi 2010中編寫它。

+5

madCodeHook肯定帶有源代碼,如果你買它。 – 2010-06-28 09:20:12

+0

但@TOndrej,他想自己寫。對於你甚至沒有打算使用的代碼來說,350歐元是相當昂貴的。 – 2010-06-28 14:58:33

+1

由於安全問題,madCodeHook的作者不會僅僅將代碼提供給任何人。如果你買了,如果你沒有得到的代碼。你必須額外購買它,並證明你會以良好的意圖使用它。至少在兩年前就是這樣。 – Runner 2010-06-28 19:30:55

回答

1

@Phoenix,你可以試試uallCollection庫,寫出來在德爾福7(我已經在德爾福2007測試,它工作正常),並附帶一組例子,可以從here和完整sourcecode下載。唯一的缺點是自07-07-2006以來沒有更新過,但我個人在Windows 7上測試過這個庫,它工作正常。

+0

我托盤uallCollection但它只獲得本地api鉤子。 我想注入一個DLL到系統進程(Hook Api函數跨系統) – Phoenix 2010-07-01 13:47:04

0

您必須使用鉤子程序(全局:整個系統;或本地:單個程序或線程)。

基本上,你會調用以下程序:

  • SetWindowsHookEx函數:安裝一個鉤子(監視系統事件)
  • 鉤子函數:這是由Windows調用的過程當我們「掛鉤」的事件發生時。
  • 的UnhookWindowsHookEx功能:去除你的鉤子

這是當地鉤子監視鍵盤輸入的一個簡單的例子:

//setting up the hook; 
//kbHook is a variable of type HHook (unit Windows); 
//kbr_Hook is the procedure that will be called once the event happens; 
kbHook:=setwindowshookex(WH_KEYBOARD,@kbr_Hook,0,GetCurrentThreadID()); 

MSDN文檔: http://msdn.microsoft.com/en-us/library/ms644990%28VS.85%29.aspx

好運

+0

+1,因爲這是正確的。有些人可能認爲這是不完整的,因爲鳳凰基本上要求「源代碼」,但這並不會使這個答案錯誤。 – 2010-06-28 10:43:49

+0

@Cosmin Prund:不,它不正確。問題是關於API掛鉤而不掛鉤API。掛鉤API是將代碼(DLL)加載到其他進程中的幾種可能方式之一 - 這是必需的步驟之一 - 但它不能解決API掛接(攔截API調用)的問題。 – 2010-06-28 10:54:33

+0

@TOndrej,你是對的,現在我明白了。 – 2010-06-28 11:49:28