Salve, ho il seguente problema (S.O. W7):
Da un form MDI via menu lancio un file che sarà eseguito con la sua applicazione proprietaria, con il seguente comando:
Dim S As Object
Set S = CreateObject("Shell.Application")
S.ShellExecute (App.Path & "\Files\Prova 2.lin")
Funziona e il file si avvia ma, per ragioni che non dipendono da me ma dallo sviluppatore della applicazione originale, la finestra che si apre termina oltre la barra delle applicazioni di Windows 7, che la va a coprire proprio dove vi sono alcuni tasti di comando.
Allora con il seguente codice posso attivare e disattivare la barra:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Const SW_HIDE = 0
Private Const SW_SHOWNORMAL = 1
Dim WinHwnd As Long
Public Sub HideW7Bar()
WinHwnd = FindWindow("Shell_TrayWnd", "")
ShowWindow WinHwnd, SW_HIDE
End Sub
Public Sub ShowW7Bar()
ShowWindow WinHwnd, SW_SHOWNORMAL
End Sub
Il punto è che la disattivo, lancio il file e poi vorrei aspettare che chiudo il programma esterno prima di riattivarla.
Quindi il codice:
Dim S As Object
Set S = CreateObject("Shell.Application")
Call HideW7Bar
S.ShellExecute (App.Path & "\Files\Prova 2.lin")
Call ShowW7Bar
non va bene perché la barra si riattiva immediatamente.
Ho trovato routine per attendere che una applicazione esterna termini prima di proseguire il programma VB, ma non con il comando ShellExecute.
Per ora ho risolto mettendo la routine di riattivazione della barra nell’evento frmMDI.Click, praticamente quando il programma esterno termina basta un click del mouse per far riapparire la barra delle applicazioni di W7, ma non mi pare proprio una soluzione elegante. Qualche suggerimento?
Grazie
Filippo