Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-12-2014, 13:17   #1
andreapav
Member
 
Iscritto dal: Oct 2008
Messaggi: 70
[VB6] Avviare applicazione esterna in una form

Ciao a tutti.

Ho due vecchie applicazioni in VB6, devo integrare una nell'altra e volevo semplicemente avviare la seconda in una form della prima.

Ho iniziato usando notepad come esempio, avvio correttamente l'exe ma non riesco a cambiargli il parent..non capisco cosa sbaglio.
Il codice è:

Codice:
pid = Shell("notepad.exe")
SetParent pid, frmMDI.hwnd
MoveWindow pid, 0, 1000, frmMDI.ScaleWidth, frmMDI.ScaleHeight, 1
Grazie in anticipo.
andreapav è offline   Rispondi citando il messaggio o parte di esso
Old 29-12-2014, 13:47   #2
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Prima di tutto fai un test sul valore di ritorno, se restituisce null chiama GetLastError per ottenere informazioni sull'errore.
Poi, devi utilizzare le funzioni GetWindowLong e SetWindowLong per azzerare il bit WS_POPUP e impostare il bit WS_CHILD. Come se non bastasse, devi utilizzare SetWindowPos con il flag SWP_FRAMECHANGED.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 29-12-2014, 14:45   #3
andreapav
Member
 
Iscritto dal: Oct 2008
Messaggi: 70
Grazie, ma non mi è chiaro cosa fanno questi due metodi e come li devo usare.

A occhio ho provato con:
gwl = GetWindowLong(pid, GWL_HINSTANCE)
per prendere l'istanza (anche con GWL_WNDPROC), e poi
swl = SetWindowLong(pid, GWL_HWNDPARENT, frmMDI.hwnd)
per aggiornargli il parent. Infine
swp = SetWindowPos(pid, HWND_TOP, 0, 1000, 0, 0, SWP_FRAMECHANGED)
per modificargli la posizione. Non vedo nulla di diverso.

gwl così però non serve a nulla, ma se lo uso al posto di pid ho errori.
andreapav è offline   Rispondi citando il messaggio o parte di esso
Old 29-12-2014, 15:33   #4
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Come dicevo devi utilizzare le funzioni GetWindowLong e SetWindowLong per azzerare il bit WS_POPUP e impostare il bit WS_CHILD:
Codice:
style = GetWindowLong(myWindow, GWL_STYLE)
style = style And Not WS_POPUP
style = style Or WS_CHILD
SetWindowLong(myWindow, GWL_STYLE, style)
Rivedendo il tuo codice mi sono accorto che stai passando a SetParent il pid invece dell'handle, devi scrivere ancora un po' di codice:
http://msdn.microsoft.com/en-us/magazine/cc301495.aspx
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 07-01-2015, 09:17   #5
andreapav
Member
 
Iscritto dal: Oct 2008
Messaggi: 70
Ciao.
Riporto nel caso possa essere utile in futuro, la soluzione.

Codice:
Option Explicit

Private my_lang As String  ' indica la lingua corrente della form

''''''''''''''''''''''''''''''''''''''''''''''''''''''

Const GW_HWNDNEXT = 2
Const SW_SHOW = 5

'Const WS_THICKFRAME = &H40000
Const WS_CLIPSIBLINGS = &H4000000
Const WS_CLIPCHILDREN = &H2000000
Const WS_VISIBLE = &H10000000
Const WS_DISABLED = &H8000000
Const WS_MINIMIZE = &H20000000
Const WS_MAXIMIZE = &H1000000
Const WS_CAPTION = &HC00000
Const WS_BORDER = &H800000
Const WS_DLGFRAME = &H400000
Const WS_VSCROLL = &H200000
Const WS_HSCROLL = &H100000
Const WS_SYSMENU = &H80000
Const WS_THICKFRAME = &H40000
Const WS_MINIMIZEBOX = &H20000
Const WS_MAXIMIZEBOX = &H10000


Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwprocessid As Long) As Long

Function ProcIDFromWnd(ByVal hwnd As Long) As Long
   Dim idProc As Long
    
   ' Get PID for this HWnd
   GetWindowThreadProcessId hwnd, idProc
    
   ' Return PID
   ProcIDFromWnd = idProc
End Function
      
Function GetWinHandle(hInstance As Long) As Long
   Dim tempHwnd As Long
    
   ' Grab the first window handle that Windows finds:
   tempHwnd = FindWindow(vbNullString, vbNullString)
    
   ' Loop until you find a match or there are no more window handles:
   Do Until tempHwnd = 0
      ' Check if no parent for this window
      If GetParent(tempHwnd) = 0 Then
         ' Check for PID match
         If hInstance = ProcIDFromWnd(tempHwnd) Then
            ' Return found handle
            GetWinHandle = tempHwnd
            ' Exit search loop
            Exit Do
         End If
      End If
    
      ' Get the next window handle
      tempHwnd = GetWindow(tempHwnd, GW_HWNDNEXT)
   Loop
End Function

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Private Sub Command1_Click()

    Dim hWndChild As Long
    Dim hInst As Long
  
    ' run/show application (get handler)
    hInst = Shell(frmMDI.ExtApplicationPath)
    hWndChild = GetWinHandle(hInst)
  
    Call SetParent(hWndChild, Me.hwnd)
     
    ' remove control box..
    Dim NewStyle As Long
    NewStyle = SetWindowLong(hWndChild, GWL_STYLE, WS_VISIBLE Or WS_CLIPSIBLINGS)
 
    ' window resize...
    Call ShowWindow(hWndChild, SW_MAXIMIZE)

End Sub
andreapav è offline   Rispondi citando il messaggio o parte di esso
Old 07-01-2015, 09:42   #6
andreapav
Member
 
Iscritto dal: Oct 2008
Messaggi: 70
Riguardo al FindWindow, se necessario, definire la caption della form che si sta cercando:

Codice:
   tempHwnd = FindWindow(vbNullString, frmMDI.ExtApplicationCaption)
andreapav è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
NVIDIA, Jensen Huang: 'Venderemo il dopp...
YouTube, risolto un bug che impediva il ...
Huawei accelera sui chip AI: Ascend 960D...
Claude si arricchisce con nuove funzioni...
Oggi costa 34,99€ la friggitrice ad aria...
Finalmente sotto i 500€ un bel portatile...
Scende ancora di più il compresso...
Space Pioneer starebbe realizzando un pr...
SpaceX ritirerà ''a breve'' il Fa...
La Luna ha un nuovo cratere di grandi di...
ROG Cronox: ASUS alza l'asticella dei ca...
Lenovo annuncia nuovi sistemi per la vir...
M6 e M5 Ultra, i primi benchmark conferm...
La nuova falla della cybersecurity &egra...
The Blood of Dawnwalker, il sequel potre...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:14.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v