2011-05-08 51 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