Gracias a la colaboración de Javier Pérez (
[email protected]) :
Desde mi informe Access llamo a mi aplicación :
Shell ("C:\anulaprocesos.EXE " & Me.Hwnd)
Desde mi programa obtengo el manejador de la ventana y llamo a la función:
Public Function ANULAR_PROCESO(ByVal MANEJADOR As Long) As Long
' Variables para control del proceso
Dim hProcessId As Long
Dim hThreadId As Long
Dim hProcess As Long
'__________de Javier Pé
[email protected]
' Obtenemos el identificador del proceso creador de la ventana
hThreadId = GetWindowThreadProcessId(MANEJADOR, hProcessId)
'A partir de este identificador de proceso se puede obtener un
'manejador del proceso:
hProcess = OpenProcess(PROCESS_TERMINATE, False, hProcessId)
'Ahora ya tienes el manejador que necesitas para TerminateProcess.
'(Nota: asegúrate de que los valores que obtienes son validos --distintos de cero-- antes de utilizarlos. Si no obtienes resultados válidos, prueba a utilizar otro tipo de acceso en la llamada a OpenProcess, como PROCESS_TERMINATE, que es realmente el único tipo de acceso que necesitas).
TerminateProcess hProcess, 0
End Function
Declarando previamente las funciones:
Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
%