Salut, un hook, RawInput ou DirectInput..
Si tu fais un LowLevelHook, les boutons 4 et 5 sont nommés X1 et X2. Dans la méthode callback le paramètre wParam doit contenir le message WM_XBUTTONDOWN et la paramètre lParam contient une structure MSLLHOOKSTRUCT avec le champ mouseData qui indique si il s'agit du bouton X1 ou X2;
Ca donne quelque chose comme ça : ( pas testé, car j ai pas de souris avec 5 boutons )
private unsafe IntPtr LowLevelMouseProc( int code, UIntPtr wParam, IntPtr lParam )
{
if ( code == HC_ACTION )
{
switch ( ( int )wParam )
{
case WM_LBUTTONDOWN :
this.Text = "LEFT BUTTON";
break;
case WM_RBUTTONDOWN :
this.Text = "RIGHT BUTTON";
break;
case WM_MBUTTONDOWN :
this.Text = "MIDDLE BUTTON";
break;
case WM_XBUTTONDOWN : // X1 ou X2
MSLLHOOKSTRUCT* p = ( MSLLHOOKSTRUCT* )lParam;
this.Text = "X" + ( ( short )( p->Data >> 16 ) ) + " BUTTON";
break;
}
}
return CallNextHookEx( hHook, code, wParam, lParam );
}
Pour SendInput, tu as un exemple ici :
http://www.csharpfr.com/infomsg_NUM-PAD-VIRTUEL-SENDINPUT_905039.aspx