Ik heb twee zelf geschreven applicaties.
Een main-programma en een update-programma.
Het update-programma moet, zoals de naam al doet vermoeden, update mijn main-programma als er op een voorgedifineerde plaats op het netwerk een nieuwere versie staat van dat programma.
Als ik het update-programma 'stand-alone' gebruik met meegeving van de argumenten gaat alles prima.
Als ik in mijn main-programma met shell het update-programma aanroep gaat het niet goed omdat het main-programma 'aanblijft' en de kopieeractie van het update-programma daardoor mislukt. Ik kan niet overschrijven omdat de applicatie open is (permission denied). Dit is allemaal zeer begrijpelijk en ik probeer dan ook eerst het main-programma te sluiten alvorens te kopieren.
Dit sluiten krijg ik niet voor elkaar, ik gebruik daarvoor Sendmessage.
Hier eerst wat snipplets ter verduidelijking.
In de Main() van het main-programma:
Het update-programma:
Het lijkt erop dat lHwnd (App.hInstance van de aanroepende applicatie) niet de juiste handle is. lHwnd is overigens wel met een groot getal gevuld.
Ik zie vast iets over het hoofd, maar ik kom er niet meer uit
Ik heb me al suf gezocht en overal kom ik bovenstaande code tegen.
Hopelijk hebben jullie enige suggesties hoe ik SendMessage wel moet gebruiken.
Een main-programma en een update-programma.
Het update-programma moet, zoals de naam al doet vermoeden, update mijn main-programma als er op een voorgedifineerde plaats op het netwerk een nieuwere versie staat van dat programma.
Als ik het update-programma 'stand-alone' gebruik met meegeving van de argumenten gaat alles prima.
Als ik in mijn main-programma met shell het update-programma aanroep gaat het niet goed omdat het main-programma 'aanblijft' en de kopieeractie van het update-programma daardoor mislukt. Ik kan niet overschrijven omdat de applicatie open is (permission denied). Dit is allemaal zeer begrijpelijk en ik probeer dan ook eerst het main-programma te sluiten alvorens te kopieren.
Dit sluiten krijg ik niet voor elkaar, ik gebruik daarvoor Sendmessage.
Hier eerst wat snipplets ter verduidelijking.
In de Main() van het main-programma:
code:
1
2
3
4
5
6
7
8
9
10
11
12
| Public Sub Main()
If NewVersionAvailable() Then
'start update programma:
sProgramm = App.Path & "\update.exe " & _
argumenten... & _
App.hInstance
Call Shell(sProgramm, vbNormalFocus)
End
Else
MDIForm1.Show
End If
End Sub |
Het update-programma:
code:
1
2
3
4
5
6
7
8
9
| Public Function voerUpdateUit()
'handle van aanroepen applicatie
'deze sluiten, dit is als argument meegegeven,
'is de App.hInstance van de aanroepende applicatie:
lRetval = SendMessage(lHwnd, WM_CLOSE, ByVal 0&, ByVal 0&)
...
fso.CopyFile sNewFilename, sCurrentfile, True
...
End Function |
Het lijkt erop dat lHwnd (App.hInstance van de aanroepende applicatie) niet de juiste handle is. lHwnd is overigens wel met een groot getal gevuld.
Ik zie vast iets over het hoofd, maar ik kom er niet meer uit
Ik heb me al suf gezocht en overal kom ik bovenstaande code tegen.
Hopelijk hebben jullie enige suggesties hoe ik SendMessage wel moet gebruiken.