Pregunta: | 18383 - CONTROL DE TAREAS |
Autor: | Jóse López |
Tengo un informe que a veces se hace muy pesado y se me ha ocurrido hacer un programa en visual Basic que se ejecute antes de realizar la consulta SQL, que active un timer y que pasado un tiempo, compruebe si la consulta o ventana activa es la de ACCESS y en cuyo caso abortar el proceso.
El problema es que no se como manejar el tema de las ventanas y la comunicación entre los programas. Estoy iniciandome en Visual Basic. Lo he intentado con un formulario de access pero al ejecutar el informe, access se queda bloqueado y me impide controlarlo. Agradezco cualquier sugerencia, macro, funcion,.... lo que sea Gracias |
Respuesta: | Jóse López |
La siguiente función termina el proceso que se está ejecutando. El manejador se lo doy desde access con
me.hwnd Public Function ANULAR_PROCESO(ByVal MANEJADOR As Long) As Long ' Variables para control del proceso Dim hProcessId , hThreadId ,hProcess As Long hThreadId = GetWindowThreadProcessId(MANEJADOR, hProcessId) hProcess = OpenProcess(PROCESS_TERMINATE, False, hProcessId) TerminateProcess hProcess, 0 End Function |
Respuesta: | Jóse López |
Soy yo misma.
Hasta ahora he conseguido obtener el manejador de la ventana y cerrarla, pero solo cuando el informe está en modo presentación o diseño, no cuando está ejecutandose, que es cuando me interesa. Todo esto lo he encontrado en API GUIDE Desde Visual Basic creo un programa que llama a la función: ************** LLamo a la función: EnumChildWindows GetDesktopWindow, AddressOf EnumChildProc, ByVal 0& Esta función realiza el proceso: Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long Dim sSave As String 'Get the windowtext length sSave = Space$(GetWindowTextLength(hwnd) + 1) 'get the window text GetWindowText hwnd, sSave, Len(sSave) 'remove the last Chr$(0) sSave = Left$(sSave, Len(sSave) - 1) 'pregunto si el nombre si el nombre de la ventana corresponde con el nombre 'de mi formulario de Access If InStr(1, sSave, "NOMBRE DEL INFORME ACCESS O PARTE DE EL") Then 'he encontrado la ventana que contiene el formulario que quiero abortar ' Le digo a Window que me cierre la ventana (es un intento por abortar) ' Solo la cierra cuando está en modo diseño y presentación ' si el informe esta en modo diseño, se cierra la ventana pero si se está ejecutando ' muestra un mensaje diciendo que no puede hacer nada con access en ese ' momento PostMessage hwnd, WM_CLOSE, 0&, 0& Exit Function End If 'continue enumeration EnumChildProc = 1 End Function |