Hi allemaal,
Ik ben bezig met een soort van Multimedia shell (a la meedio) maar dan wat lichter. Binnen deze shell mag er maar een beperk aantal andere programma's gestart worden. (vooraf gedefineerd welke). Deze andere applicaties draaien 'binnen' mijn shell.
Dit heb ik nu allemaal werkend, maar ik wil ook dat sommige applicaties NIET afgesloten kunnen worden. Ik ben daarmee aan de slag gegaan en heb de volgende code:
en
Het lijkt echter wel alsof de setHook niet goed werkt. Het oude adres (de return value) is altijd 0. Weet iemand waar mijn fout zit. Wanneer ik als applicatie zichzelf gebruik werkt het wel. Kan ik soms geen WindowProc van een andere applicatie overschrijven?
Tot zover ben ik gekomen met debuggen, en op internet vind ik ook enkel voorbeelden waar de eigen WindowProc wordt gewijzigd en niet die van een andere applicatie.
NB. Dit hele Messaging systeem is voor mij redelijk nieuw, ben hier nog maar pas mee begonnen.
Ik ben bezig met een soort van Multimedia shell (a la meedio) maar dan wat lichter. Binnen deze shell mag er maar een beperk aantal andere programma's gestart worden. (vooraf gedefineerd welke). Deze andere applicaties draaien 'binnen' mijn shell.
Dit heb ik nu allemaal werkend, maar ik wil ook dat sommige applicaties NIET afgesloten kunnen worden. Ik ben daarmee aan de slag gegaan en heb de volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| Private Const GWL_WNDPROC = (-4)
Private Const WM_CLOSE As Long = &H10
Private lngOldProc As Long
Public Function getWindowHandler(title As String) As Long
getWindowHandler = FindWindow(vbNullString, title)
End Function
Public Function WindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_CLOSE Then
MsgBox "Closure"
Else
WindowProc = CallWindowProc(lngOldProc, hwnd, Msg, wParam, lParam)
End If
End Function
Public Function setHook(handler As Long)
lngOldProc = SetWindowLongA(handler, GWL_WNDPROC, AddressOf WindowProc)
End Function
Public Function closeApp(handler As Long)
SendMessage handler, WM_CLOSE, 0, 0&
End Function |
en
code:
1
2
3
4
| Dim handler As Long
handler = getWindowHandler(" *** Applicatie *** ")
setHook (handler)
closeApp (handler) |
Het lijkt echter wel alsof de setHook niet goed werkt. Het oude adres (de return value) is altijd 0. Weet iemand waar mijn fout zit. Wanneer ik als applicatie zichzelf gebruik werkt het wel. Kan ik soms geen WindowProc van een andere applicatie overschrijven?
Tot zover ben ik gekomen met debuggen, en op internet vind ik ook enkel voorbeelden waar de eigen WindowProc wordt gewijzigd en niet die van een andere applicatie.
NB. Dit hele Messaging systeem is voor mij redelijk nieuw, ben hier nog maar pas mee begonnen.