Télécommande et Interception des messages d'une fenetre

cs_Fraggy Messages postés 95 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 2 juin 2010 - 22 août 2008 à 01:17
cs_Fraggy Messages postés 95 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 2 juin 2010 - 3 sept. 2008 à 22:01
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.

3 réponses

cs_Fraggy Messages postés 95 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 2 juin 2010
24 août 2008 à 17:09
Je suis étonné que personne n'ai encore répondu.
Ceci dit, je vais être plus précis :

Est-il possible de hooker une fenêtre autre que mon appli et de d'intercepter tout les messages qui transitent ?
Dans le même régistre, est-il possible de hooker une fenêtre qui utilise DirectInput et de recevoir tout ses messages ?

Un petit exemple serait fortement apprécié.
Merci d'avance, à ceux qui répondront.

Fraggy.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 sept. 2008 à 05:18
te faut une dll pour hook sur hWnd d'une appli externe.

voir http://www.cppfrance.com/codes/HOOK-DLL-HOOK-FACILE-VB6_41774.aspx

pour te simplifier la vie.
0
cs_Fraggy Messages postés 95 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 2 juin 2010
3 sept. 2008 à 22:01
Merci Rey, pour ta réponse.
Malheureusement dans cette source, il n'y a pas la DLL.
Comme j'ai pas C++, je ne peux pas la compiler moi-même :/

Tu pourrais me la faire parvenir pour que je teste ça ?
0
Rejoignez-nous