Newsgroup: it.comp.lang.visual-basic
Titolo: Applicazioni windows dentro programma vb

Ciao a tutto il ng.
Per un progetto a cui sto lavorando, mi hanno richiesto una feature di 
questo tipo!
Un programma, graficamente suddiviso in due frame. Un frame dovrebbe 
contenere un  menu. L'altro frame dovrebbe contenere delle applicazioni 
(tipo word.. excel.. player dvd etc): Mediante il menu, l'utilizzatore 
decide quale applicazione aprire nel secondo frame!!!!!!
In pratica... mi richiedono un programma che contenga al suo interno 
altri programmi....
Mi ricordo di aver sentito qualcosa a riguardo... credo la strada sia 
agire con gli hwnd delle finestre.. ma nn ho idea se stia andando x la 
direzione giusta...
Qualche buon'anima a gia avuto esperienza a riguardo???
Grazie 1024!!!
Francesco.

 Francesco.
Andrea

 OleContainer.
Scusa, il componente VB si chiama solo OLE.
Andrea

>>OleContainer.
avevo gia provato questa strada.. ma nn è proprio quello che mi 
richiedono...
Da quello che ho visto con OleContainer posso integrare alcune delle 
funzionalità del programma che includo... ma nn il programma stesso...
Quello che servirebbe a me è proprio la finestra del programma 
all'interno di un mio frame vb.. in maniera tale che qualsiasi programma 
  mi venga chiesto di aprire.. resti sempre il menu della mia 
applicazione  in primo piano a fianco del programma stesso.
Un sistema dove un utente puo' aprire vari programmi pero' sempre 
all'interno di una finestra di un altro programma che fa da 
"controllore" ...
Grazie!

 applicazione  in primo piano a fianco del programma stesso.
Quindi quello che vuoi fare e' paragonabile a una barra di Winzoz fissa con
dei pif ai vari programmi ?
Setti la barra in primo piano e fissa , clicchi sul collegamento Word con
parametro "finestra intera" e si aprira' su tutto lo schermo Word ecc...

 "controllore" ...
una soluzione la puoi trovare nelle api setparent (e correlate) e
movewindow.
un esempio preso dalla API-Guide  e rielaborato puo' essere questo:
apri un progetto con due form, dove in form2
caption=""
borderstyle=1
controlbox=false
in form1
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long
Private Declare Function GetParent Lib "user32" _
    (ByVal hWnd As Long) As Long
Private Declare Function SetParent Lib "user32" _
    (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" _
    (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function GetWindow Lib "user32" _
    (ByVal hWnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function DestroyWindow Lib "user32" _
    (ByVal hWnd As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" _
    (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function MoveWindow Lib "user32" _
    (ByVal hWnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As
Long, _
    ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Const GW_HWNDNEXT = 2
Dim MioHwnd As Long
Private Sub Form_Load()
    'inserisco form2 in form1
    Form2.Show
    SetParent Form2.hWnd, Me.hWnd
    MoveWindow Form2.hWnd, 50, 50, 250, 250, 1
    'Carica il programma
    MioHwnd = Shell("c:\windows\notepad.exe", vbNormalNoFocus)
    If MioHwnd = 0 Then GoTo GestERRO
    MioHwnd = CercaHwnd(MioHwnd)
    'lo inserisce nel form contenitore
    MoveWindow MioHwnd, 0, 0, 200, 200, 1
    SetParent MioHwnd, Form2.hWnd
    Exit Sub
GestERRO:
    MsgBox hWnd & "  Programma non avviabile"
End Sub
Function CercaHwnd(ByVal Valore_Pid As Long) As Long
    Dim Cerca_Hwnd As Long, Cerca_Pid As Long, Cerca_Id As Long
    'Cerca la prima window
    Cerca_Hwnd = FindWindow(ByVal 0&, ByVal 0&)
    Do While Cerca_Hwnd <> 0
        'Controlla non sia una finestra figlio
        If GetParent(Cerca_Hwnd) = 0 Then
            'Richiede le finestre nel processo
            Cerca_Id = GetWindowThreadProcessId(Cerca_Hwnd, Cerca_Pid)
            If Cerca_Pid = Valore_Pid Then
                CercaHwnd = Cerca_Hwnd
                Exit Do
            End If
        End If
        'Passa alla finestra successiva
        Cerca_Hwnd = GetWindow(Cerca_Hwnd, GW_HWNDNEXT)
    Loop
End Function
Private Sub Form_Unload(Cancel As Integer)
    Unload Form2
    'scarica il notepad
    DestroyWindow MioHwnd
    'termina il processo
    'TerminateProcess GetCurrentProcess, 0
End Sub
beppe