Comment retrouver l'app.path d'un projet .exe à partir d'un .ocx y incorporé ? [Résolu]

Messages postés
182
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
30 novembre 2011
- - Dernière réponse : PCPT
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
- 20 oct. 2008 à 22:07
Sous le code d'un .ocx, j'aimerais pouvoir enregistrer un fichier .ini dans l'app.path d'un project .exe auquel cet .ocx a été incorporé

Merci de vos réponses
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
23
3
Merci
me semble pas qu'il y ai besoin d'indiquer le handle de la form...



Private Declare Function 
GetModuleFileName
Lib
"kernel32" 
Alias 
"GetModuleFileNameA" 
(
ByVal 
hModule 
As Long

ByVal 
lpFileName
As String
,
ByVal
nSize
As Long
)
As
Long


Function 
GetExtenderAppPath() 
As String

    Dim strFileName As String * 255
    Call GetModuleFileName(0&, strFileName, 255)
    GetExtenderAppPath = Left$(strFileName, InStrRev(strFileName, ""))
End Function

 
<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 123 internautes nous ont dit merci ce mois-ci

Commenter la réponse de PCPT
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
23
0
Merci
salut,
tu l'obtiens grâce à l'API getmodulefilename

me semble qu'il y a un exemple sur codyx.org
++

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Commenter la réponse de PCPT
Messages postés
182
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
30 novembre 2011
0
Merci
j'ai testé cette api et ça ne marche pas.

la propriété app.hinstance d'un .exe est différente de l'app.hinstance d'un ocx y incorporé

Code sur un OCX:
Function GetPathInstance() As String
Dim strFileName As String
Dim lngCount As Long
strFileName = String(255, 0)
lngCount = GetModuleFileName(App.hInstance, strFileName, 255)
GetPathInstance= Left(strFileName, lngCount)

Resultat: le dossier où se trouve l'OCX
Commenter la réponse de vicosta
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Bonjour,

la fonction GetModuleFileName attend un hwnd Ce hwnd est celui de la Form abritant ton UserControl.
La propriété Extender de ton userControl te retourne l'objet Form l'abritant
Il ne te reste alors quà passer à la fonction le hwnd de cet objet
Commenter la réponse de jmfmarques
Messages postés
182
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
30 novembre 2011
0
Merci
Merci à tous, mais pas encore resolu...

@jmfmarques: j'ai testé la propriété Usercontrol.Extender.Parent.Hwnd dans GetModuleFileName

la réponse est une chaîne vide.

après quelques modifications du code, la réponse est:
c:\windows\system32\msvbvm60.dll

Je cherchais le .EXE

Function GetExtenderAppPath() As String
Dim strFileName As String * 255
Dim lngCount As Long
Dim hInstance As Long
Const GWW_HINSTANCE = (-6)

hInstance = GetWindowLong(Usercontrol.Extender.Parent.Hwnd, GWW_HINSTANCE)
lngCount = GetModuleFileName(hInstance, strFileName, 255)
GetExtenderAppPath = Left(strFileName, lngCount)
Commenter la réponse de vicosta
Messages postés
182
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
30 novembre 2011
0
Merci
Merci PCPT, ton code est une des meilleures solutions pour la fonction GetExtenderAppPath à incorporer dans un OCX

J'avais trouvé la méthode suivante, qui marche aussi, mais je pense que la tienne est plus légère

Function GetExtenderAppPath() As String
Dim ProcessName As String * 256
Dim lSize As Long
Dim hProcess As Long
Const PROCESS_VM_READ = 16
Const PROCESS_QUERY_INFORMATION = 1024
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION + PROCESS_VM_READ, 0, GetCurrentProcessId)
lSize = GetModuleFileNameExA(hProcess, 0, ProcessName, 256)
GetExtenderAppPath = InStrRev(ProcessName, "") 'Left(ProcessName, lSize)
End Function
Commenter la réponse de vicosta
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
23
0
Merci
alors n'oublie pas de la valider ^^
++
Commenter la réponse de PCPT