El menu de múltiples ejecutables en VB6

Hola, tengo un proyecto hecho en VB que funciona como el menu de varios ejecutables hechos en VB.
Los llamo de la forma:
Shell "C:\Direccion\Proyecto.exe", vbNormalFocus
Mi problema es que entre "EXEs" no existe el "show 1", osea, no se inhabilita el menu cuando trabajo en los otros exes, la idea es que parezca un solo sistema, que no puedas seguir accediendo al menu mientras estas trabajando en uno de los subproyectos.
¿Existe forma de emular que inhabilito el menu o hacerlo?
Muchas gracias de antemano.

1 respuesta

Respuesta
1
En primer lugar disculpa el retraso pero he estado de vacaciones.
No se si te he entendido bien. Creo que quieres que el menú del primer programa no funcione cuando se está ejecutando alguno de los 'sub-programas'.
Se me ocurre que podrías cortar el acceso al menú cuando se estén ejecutando alguno de los otros ejecutables.
Con el siguiente código puedes comprobar si un programa está ejecutándose. Si lo pones al inicio de la ejecución del menú puedes hacer fácilmente lo que te comentaba. La forma de llamar a la función sería algo así: "UsoDePrograma("nombrePrograma.exe").
Un saludo
Option Explicit
Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProccessId As Long) As Long
Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Public Type PROCESSENTRY32
    dwSize As Long
    cntUsage As Long
    th32ProcessId As Long
    th32DefaultHeapId As Long
    th32ModuleId As Long
    cntThreads As Long
    th32ParentProcessId As Long
    pcPriClassBase As Long
    dwFlags As Long
    szExeFile As String * 260
End Type
Public Function UsoDePrograma(ByVal nombre_programa As String) As Integer
    Dim programa As String
    Dim hSnapShot As Long
    Dim uProceso As PROCESSENTRY32
    Dim res As Long
    Dim n_procesos As Integer
    n_procesos = 0
    hSnapShot = CreateToolhelpSnapshot(2&, 0&)
    If hSnapShot <> 0 Then
        uProceso.dwSize = Len(uProceso)
        res = ProcessFirst(hSnapShot, uProceso)
        Do While res
            programa = Left$(uProceso.szExeFile, _
                        InStr(uProceso.szExeFile, Chr$(0)) - 1)
            If UCase$(Right$(programa, Len(nombre_programa))) = _
               UCase$(nombre_programa) Then
                n_procesos = n_procesos + 1
            End If
            res = ProcessNext(hSnapShot, uProceso)
        Loop
        Call CloseHandle(hSnapShot)
    End If
    UsoDePrograma = n_procesos
End Function
Wow!, Muchas gracias por tu ayuda.
Me encantaría saber dónde aprendiste eso para leer la documentación, si puedes, te agradecería la referencia (bibliografía o liga). Muchas gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas