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

Signaler
Messages postés
178
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
30 novembre 2011
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
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

7 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
36
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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
36
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
Messages postés
178
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
30 novembre 2011

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
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
25
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
Messages postés
178
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
30 novembre 2011

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)
Messages postés
178
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
30 novembre 2011

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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
36
alors n'oublie pas de la valider ^^
++