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

J'ai fait ce code, et fonctionne parfaitement, mais maintenant ... je veux le faire à Delphes, le problème est ... Je n'ai pas assez de connaissances pour le faire, et ... dans Google, je n'ai pas trouvé les informations dont j'ai besoin.Besoin d'aide pour convertir Vb.Net à Delphi (API Stuff (?))

Merci d'avance !.

+0

Si le code ci-dessus utilisait l'API Windows native, la conversion aurait été triviale (pour quelqu'un qui parle couramment Delphi). Maintenant, ce qui précède ne le fait pas; à la place, le code fait un usage intensif des classes .NET (je pense), qui ne sont pas présentes dans Delphi. –

+0

@Andreas Le code n'utilisait pas l'API Windows native donc OP a un réel problème. De plus, évitez-vous la VCL lors de l'écriture de code VCL afin qu'il soit facile de la convertir à un moment donné dans le futur? –

Répondre

2

Vous devez utiliser une API de niveau inférieur, l'API d'aide de l'outil. Un schéma de base de la façon d'obtenir ce dont vous avez besoin est la suivante:

  1. Appel CreateToolhelp32Snapshot() passant TH32CS_SNAPPROCESS.
  2. Parcourez ensuite les processus avec Process32First() et Process32Next() jusqu'à ce que vous trouviez le processus souhaité.
  3. Appelez le CloseHandle() pour fermer l'instantané.
  4. Appel CreateToolhelp32Snapshot() à nouveau, cette fois-ci passant TH32CS_SNAPMODULE et l'ID de processus souhaité trouvé à l'étape 2.
  5. Marchez les modules avec Module32First() et Module32Next() jusqu'à ce que vous trouviez le module que vous voulez.
  6. Appelez le CloseHandle() pour fermer l'instantané.
+0

Parfait mec, j'ai fait l'extrait, mais ... je ne peux pas le coller ici, (par la limite des caractères). Merci beaucoup! –

1

Vous pouvez utiliser les modules gratuits formulaire MadCollection (madKernel, si je ne me trompe pas) qui ont de telles bibliothèques. Le codage est très proche de celui de l'OP. (Je l'ai utilisé pour envoyer des messages au processus parent de l'un de mes programmes).

EDIT:
A propos des problèmes de licence, voir cette citation de la page du contrat de licence Madshi.net:

DU PRODUIT FREEWARE (S)

Les paquets "madBasic", "madKernel", « madShell " et" madSecurity "peut être utilisé librement pour usage non commercial et commercial utiliser, sans acheter une licence, à condition que:

(1) L'auteur Mathias Rauen reçoit un crédit approprié pour son travail.

(2) Le titulaire de licence ne déclare pas que la bibliothèque a été écrite par lui.

(3) Si le logiciel est modifié, tout logiciel contenant des modifications doit indiquer en bonne place dans le produit modifié ou de la documentation

(a) that it has been modified, 

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

et

(c) the date the modifications were made. 

(4) Les emballages mentionnés ne doivent pas être transféré à un tiers à moins que ce tiers ne reçoive une copie de cet accord et accepte d'être lié par tous ses termes et conditions .

+2

+1 C'est une bonne option, mais je tiens à souligner qu'elle est seulement gratuite pour une utilisation non commerciale. –

+0

Au moins dans l'installateur que j'ai ici, les modules ** madKernel, madSecurity, madShell et madBasic ** sont marqués comme freeware. La restriction s'applique uniquement à madExcept et madCodeHook. Je peux poster une capture d'écran si nécessaire. –

+0

Et j'ai utilisé seulement les unités madKernel et madStrings pour résoudre mon problème (je suis en train de parcourir mon code source maintenant). Donc, votre considération ne s'applique pas. –