2011-05-08 85 views
1
Dim ThisModule As IntPtr 
    Dim Proc As Process() = Process.GetProcessesByName("Sol") 

    For i = 0 To Proc(0).Modules.Count - 1 
     If (Proc(0).Modules(i).ModuleName.ToString.Contains("UxTheme")) Then 
      ThisModule = Proc(0).Modules(i).BaseAddress 
     End If 
    Next 

我已經使這個代碼,並完美的作品,但現在...我想在Delphi中,它的問題是...我還沒有足夠的知識,使其在谷歌,我還沒有找到我需要的信息。需要幫助轉換Vb.Net德爾福(API的東西(?))

在此先感謝!

+0

如果上面的代碼會使用本地Windows API,那麼轉換對於在Delphi中流暢的人來說可能是微不足道的。現在,上面沒有;相反,代碼會大量使用.NET類(我認爲),這在Delphi中不存在。 – 2011-05-08 20:06:07

+0

@Andreas該代碼沒有使用本機Windows API,所以OP有一個真正的問題。在編寫VCL代碼時,您還會避免使用VCL,以便在未來的某個時間很容易進行轉換? – 2011-05-08 20:09:16

回答

2

您需要使用較低級別的API(工具幫助API)。如何獲得所需內容的基本概述如下:

  1. 致電CreateToolhelp32Snapshot()通過TH32CS_SNAPPROCESS
  2. 接下來步驟Process32First()Process32Next(),直到找到您想要的過程。
  3. 致電CloseHandle()關閉快照。
  4. 呼叫CreateToolhelp32Snapshot(),這一次傳球TH32CS_SNAPMODULE和所需的進程ID在步驟2中發現
  5. 走模塊與Module32First()Module32Next(),直到你找到你想要的模塊。
  6. 致電CloseHandle()關閉快照。
+0

完美的傢伙,我做了這個片段,但是...我不能將它粘貼在這裏,(由字符數限制)。 謝謝! – 2011-05-15 20:31:31

1

你可以使用免費的模塊形式MadCollection(瘋狂的內核,如果我沒有弄錯)哪些有這樣的庫。編碼非常接近OP的編碼。 (我用它將消息發送給我的程序的父進程)。

編輯:
關於授權許可的煩惱,看到Madshi.net許可協議頁面這句話:

免費軟件產品(S)

的套餐 「madBasic」, 「madKernel」,「madShell 「 和」madSecurity「可以自由使用 非商業和商業 使用,無需購買許可證, 前提是:

(1)作者 Mathias Rauen爲他的工作給予了適當的獎勵 。

(2)被許可人確認 不聲稱他的圖書館被寫入 。

(3)如果軟件被修改,任何軟件包含修改必須突出在 改性產品或文件

(a) that it has been modified, 

    (b) the identity of the person or entity that made the modifications 

(c) the date the modifications were made. 

(4)提及的包必須未說明轉讓給任何第三方,除非 此類第三方收到本協議的副本並同意按其所有條款和條件約束 。

+2

+1這是一個不錯的選擇,但我會指出它僅供非商業用途免費使用。 – 2011-05-08 21:56:24

+0

至少在我這裏的安裝程序中,模塊** madKernel,madSecurity,madShell和madBasic **被標記爲免費軟件。限制僅適用於madExcept和madCodeHook。如果需要,我可以發佈屏幕截圖。 – 2011-05-09 16:55:33

+0

我只使用單位madKernel和madStrings來解決我的問題(我正在瀏覽我的源代碼)。所以你的考慮不適用。 – 2011-05-09 17:08:59