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

Résolu
vicosta Messages postés 178 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 30 novembre 2011 - 19 oct. 2008 à 19:01
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre 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

7 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
20 oct. 2008 à 02:55
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
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
19 oct. 2008 à 19:42
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
0
vicosta Messages postés 178 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 30 novembre 2011
19 oct. 2008 à 20:29
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
19 oct. 2008 à 21:33
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vicosta Messages postés 178 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 30 novembre 2011
19 oct. 2008 à 22:29
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)
0
vicosta Messages postés 178 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 30 novembre 2011
20 oct. 2008 à 21:30
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
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
20 oct. 2008 à 22:07
alors n'oublie pas de la valider ^^
++
0
Rejoignez-nous