Retracé le handle d'une app a son lancement.

Contenu du snippet

Salut, j'ai cherché (et cherché) beaucoup pour se code
Il permet d'avoir le handle d'une application que vous lancé

Merci de me laissé vos commentaires et vos suggestions

Source / Exemple :


Public Declare Function NextWindow Lib "user32" Alias "GetWindow" (ByVal hWND As Long, ByVal wCmd As Long) As Long
Public Declare Function TxtWindow Lib "user32" Alias "GetWindowTextA" (ByVal hWND As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function idPapa Lib "user32" Alias "GetParent" (ByVal hWND As Long) As Long
Public Declare Function MoveWindow Lib "user32" (ByVal hWND As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Public Declare Function SetPapa Lib "user32" Alias "SetParent" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

Private Type APPBLOCK
 hWND(1 To 1024) As Long
 Count As Integer
End Type

Public Function csProcessList() As APPBLOCK
Dim OAPP As APPBLOCK
    Dim hWND As Long
    Dim TitreFenetre As String * 255
    Dim Titre As String
    Dim papa, i As Integer
    i = 1
    hWND = NextWindow(RecupHandleBureau(), 5)
    Do While hWND <> 0
        TitreFenetre = String(255, 0)
        R = TxtWindow(hWND, TitreFenetre, 255)
        papa = idPapa(hWND)
        If TitreFenetre <> String(255, 0) Then
            Titre = TitreFenetre
            Titre = Left(Titre, R)
            OAPP.hWND(i) = hWND
            i = i + 1
        End If
        hWND = NextWindow(hWND, 2)
    Loop
    OAPP.Count = i - 1
    csProcessList = OAPP
End Function

Public Function GetLastHwnd(OAPP As APPBLOCK) As Long
Dim i As Integer, temp As APPBLOCK
temp = OAPP
DoEvents
OAPP = csProcessList
DoEvents
i = 1
While i < OAPP.Count + 1
 If HwndExist(OAPP.hWND(i), temp) = True Then
 Else
  GetLastHwnd = OAPP.hWND(i)
  Exit Function
 End If
 i = i + 1
Wend
 GetLastHwnd = -1
End Function

Public Function HwndExist(sHwnd As Long, OldData As APPBLOCK) As Boolean
Dim i As Integer
i = 1
While i < OldData.Count + 1
 If OldData.hWND(i) = sHwnd Then: HwndExist = True
 i = i + 1
Wend
HwndExist = False
End Function

Public Function CygCRun(Program As String) As Long
 Dim fa As APPBLOCK
 fa = csProcessList()
 DoEvents
 On Error GoTo ReportError
 Shell Program, vbNormalFocus
 DoEvents
 CygCRun = GetLastHwnd(fa)
 Exit Function
ReportError:
 CygCRun = -1
End Function

Conclusion :


Pour utiliser le code:
Mettez tout le code dans un module
ensuite vous le lancer comme suit

dim a as long
a=CygCRun("C:\Windows\Notepad.exe")

a contiendra le # d'handle de notepad.exe ( a moin q'une autre application soit lancé au meme moment )

je sais pas trop quel niveau est cette source, donc je la mets niv.2

Encore une foix laissé vos commentaires et vos suggestions, svp.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.