l'ho copiato dal tuo sito; sezione Api/n.54:
Option Compare Database
Option Explicit
Declare Function GetParent Lib "user32" _
(ByVal hwnd As Long) As Long
Declare Function EnumWindows Lib "user32.dll" _
(ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function GetWindowThreadProcessId Lib "user32" _
(ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Type EnumWindowsData
ProcessID As Long
hwnd As Long
End Type
'******************************************************************
' Esegue il nuovo processo e restituisce l'Hwnd
' della sua Finestra principale.
'******************************************************************
Public Function hWndShell(ByVal Job As String, _
Optional WindowStyle As VbAppWinStyle = vbMinimizedNoFocus) As Long
Dim ProcessID As Long
' Verifica che il WindowStyle sia applicabile
If (WindowStyle < vbHide) Or (WindowStyle > vbMinimizedNoFocus) Then
WindowStyle = vbMinimizedNoFocus
End If
' Lancia il processo con la modalità richiesta.
On Error Resume Next
ProcessID = Shell(Job, WindowStyle)
On Error GoTo 0
' Recupera l'Handle della finestra relativa al nuovo processo.
If ProcessID Then
hWndShell = hWndProcess(ProcessID)
End If
End Function
Public Function hWndProcess(ByVal ProcessID As Long) As Long
Dim ewd As EnumWindowsData
'******************************************************************
' Cicla attraverso l'Enumerazione delle Finestre di sistema cercando di recuperare
' l'hWnd della Main Window puntata dal Processo.
'******************************************************************
ewd.ProcessID = ProcessID
Call EnumWindows(AddressOf EnumWindowsProc, VarPtr(ewd))
hWndProcess = ewd.hwnd
End Function
'***********************************
' Private Methods
'***********************************
Private Function EnumWindowsProc(ByVal hwnd As Long, _
lParam As EnumWindowsData) As Long
Dim PID As Long ' Verifica che sia una top-level window.
If GetParent(hwnd) = 0 Then
' Verifica il processo di appartenenza
Call GetWindowThreadProcessId(hwnd, PID)
If PID = lParam.ProcessID Then
lParam.hwnd = hwnd
End If
End If
' Restituisce True per continuare se non ha trovato
' l'Hwnd relativo al PID.
EnumWindowsProc = (lParam.hwnd = 0)
End Function
il codice che mi hai scritto
va nello stesso modulo dove ho inserito il codice
della chiamata?
grazie