Bonsoir,
Quelques précisions par rapport au titre :
Comment identifier le process client initialisant une instance activeX, depuis ce dernier,
sans avoir recours ni à WMI ni à GetCurrentProcessId ?
Version imprimable
Bonsoir,
Quelques précisions par rapport au titre :
Comment identifier le process client initialisant une instance activeX, depuis ce dernier,
sans avoir recours ni à WMI ni à GetCurrentProcessId ?
Bonsoir, DarkVader
Ouille .... (tu as une solution dans tes manches, toi, hein ... Si oui et que tu la donnes ici, tu vas faire au moins un heureux). Je ne vois pas comment, même en interceptant les messages de Windows, on pourrait y parvenir, sauf à posséder le source de l'ActiveX, à le modifier et à le recompiler.Citation:
sans avoir recours ni à WMI ni à GetCurrentProcessId ?
Tu m'allèches, là... (tu as la solution ?)
Attends....Citation:
Comment identifier le process client initialisant une instance activeX, depuis ce dernier,
J'en conclus que tu es en train de développer l'activex et que tu veux y insérer une instruction telle qu'il serait en mesure de savoir quel processus en aurait initialisé une instance. C'est bien çà ?
J'ai bien dit depuis l'instance de l'activeX donc (pour un process synchrone)
on récupère le process courant et depuis WMI dans la liste des process, le parent
mais cette solution n'est valide que pour win 2000 et sup.
Ouille ouille.
Car, bien sûr, je devine que tu veux obtenir cette information pendant le RunTime et à l'initialisation, avant même que l'activex instancié ne devienne totalement opérationnel... C'est çà ?:oops:
Tu lis dans mes pensées.
Je cherche, je cherche...
bien que je sois à peu près certain de ce que je vais tout droit vers le ravin...
Dur dur, de trouver comment gérer le intialize d'un activeX au runtime .... j'ai mon diable de petit doigt qui ne cesse de me répéter que je m'y étais déjà cassé les dents il y a quelques années...
Mais je cherche à nouveau quand même...:oops:
pauvre de moi ...
Je ne vois guère que 2 bouts à tirer : hinstance et objptr
objptr (caché par VB) arrive déjà trop tard (a posteriori et pas à priori, donc inconnu dans ce maudit initialize....
hinstance ? oui mais comment ? du côté de l'appelant, pas de l'ocx ...car là aussi, ce serait trop tard ... si même l'objet Ambient n'est pas disponible, au runtime, tant que l'initialize n'est pas terminé.
Le Init est pire : présent uniquement en mode design...
Et impossible également de renseigner une propriété créée à des fins ad hoc dans l'ocx puisqu'elle non plus ne serait pas disponible avant la fin de l'initialize...
Je viens de retrouver un document .doc que j'avais fait à l'époque pour retracer, dans chacun des modes, l'ordre chronologique d'utilisation des évènements d'un activex... et de le regarder à nouveau... tu le veux ?
Edit : bon . Je viens de le rajouter (je le supprimerai demain) Gaffe ... il est écrit dans une très vieille version de Word pour Windows 95.
edit pièce jointe remplacée par un .rtf
Impossible d'ouvrir le document sans plantage.
Pour le composant concerné il s'agit d'une dll activeX.
J'ai supprimé le zip du .doc et l'ai changé pour un de .rtf (à ouvrir avec Wordpad plutôt qu'avec Word). Les grisés sont perdus, mais l'essentiel y est.
L'ordre devrait être rigoureusement le même pour une dll activex.
Le mieux que je puisse faire
Peut être que cela te suffira ?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Option Explicit Dim m_ObjParent As Object Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long Public Property Get ObjParent() As Object Set ObjParent = m_ObjParent End Property Private Sub UserControl_ReadProperties(PropBag As PropertyBag) Dim hProcId As Long Dim lRet As Long Set m_ObjParent = Extender.Parent UserControl.AutoRedraw = True UserControl.Print m_ObjParent.hDC UserControl.Print m_ObjParent.hwnd lRet = GetWindowThreadProcessId(m_ObjParent.hwnd, hProcId) UserControl.Print "ProcId " & CStr(hProcId) UserControl.Print "ThreadId " & CStr(lRet) m_ObjParent.AutoRedraw = True 'va générer un nouveau hDc/hWnd m_ObjParent.Print m_ObjParent.hDC m_ObjParent.Print m_ObjParent.hwnd lRet = GetWindowThreadProcessId(m_ObjParent.hwnd, hProcId) m_ObjParent.Print "ProcId " & CStr(hProcId) m_ObjParent.Print "ThreadId " & CStr(lRet) End Sub
Bonjour,
Il s'agit d'une dll activex