Bonjour à tous,
Je cherche une méthode pour intercepter les messages que ma télécommande (port USB) envoie à une application externe.
Le but étant de bloquer le message initial et de remplacer le message via l'API SendMessage.
- Je récupère sont hWnd sans problème. (dans ma var : mhXBMC_hWnd)
- Je parviens a envoyer via SendMessage
- Je ne parviens pas a intercepter et annuler le message initial.
On m'a dit qu'il fallait faire un Hook, mais je ne maitrise pas du tout et j'aurais souhaité une aide de votre part.
Mes API sont déclarées :
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const GWL_WNDPROC = (-4)
Public PrevProc As Long
Form_Load :
PrevProc = SetWindowLong(Me.hWnd, GWL_WNDPROC, AddressOf MyWndProc)
Form_Unload :
SetWindowLong Me.hWnd, GWL_WNDPROC, PrevProc
Public Function MyWndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error Resume Next
Dim retVal As Long
'// Interception des messages
Select Case Msg
'// On intercepte WM_KEYDOWN
Case WM_KEYDOWN
'//Intercepter et remplacer le message initial
Case WM_KEYUP
'//Intercepter et remplacer le message initial
Case Else
'// Intercepter autre ?
End Select
'// On demande que OldWndProc gère les messages courants
'// tels que les clicks,les Load, et autres...
retVal = CallWindowProc(OldWndProc, hwnd, Msg, wParam, lParam)
'// Retourne la valeur du traitement de OldWndProc à Windows
MyWndProc = retVal
End Function
Si je lance ca, je perd la main de mon application VB6 et je dois killer via Task Manager.
Comment dès lors, intercepter les messages de mon autre fenetre ?
(J'espère que j'ai été clair dans ma demande)
D'avance merci pour votre aide.