Les meilleurs développeurs C# freelances sont sur Codeur.com

Aide sur système de hook sur windows

 Fermé·Moins de 500 €·1 offre·679 vues·2 interactions


Nous avons développé un système de hook sur windows qui permet de connaitre et de remonter dans un fichier csv ce qui a été cliqué (onglet, texte, menus, sous-menus, icônes) par l'utilisateur.
Le système fonctionne très bien avec la très grande majorité des applications (90%) mais pas sur toutes.

Sur certaines applications, notre système ne capte qu'une partie mais pas la totalité des éléments
cliqués.
Par exemple avec photoshop la capture des sous menus est excellente mais pas des menus
ou icônes. Sur Open Office et Libre Office, le système ne fonctionne pas.

Tout notre système repose sur WINAPI et .Net Framework
exemple de code pour .Net Framework :


/**
* LowLevel mouse Event
*/
int MouseEvents(int code, IntPtr wParam, IntPtr lParam)
{

if (code < 0)
return CallNextHookEx(_hook, code, wParam, lParam);

if (code == HookCodes.HC_ACTION)
{
// Marshal the MSLLHOOKSTRUCT data from the callback lParam
MSLLHOOKSTRUCT mouseHookStruct = (MSLLHOOKSTRUCT)
Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));

// Get the mouse WM from the wParam parameter
MouseMessage wmMouse = (MouseMessage)wParam;

if (wmMouse == MouseMessage.WM_LBUTTONDOWN )
{
IntPtr win = WindowFromPoint(mouseHookStruct.pt);
if (EventHandlerList != null)
{
EventHandlerList(this, new SysEventInfo { Hwnd = win, mouse = mouseHookStruct, Lparam = lParam, Wparam = wParam});
}
}

}
return CallNextHookEx(_hook, code, wParam, lParam);
}

//.........

public class SysEventInfo : EventArgs
{
public IntPtr Hwnd { get; set; }
public IntPtr Lparam { get; set; }
public IntPtr Wparam { get; set; }
public MSLLHOOKSTRUCT mouse { get; set; }
}

//.......

// Methode 1 :
/*
* SendMessage WM_GETTEXT to the HWND
*/
GetText(IntPtr hwnd){
string result;
StringBuilder sb = new StringBuilder(65535);
SendMessage(hwnd, (int)WM_GETTEXT, (IntPtr)sb.Capacity, sb);
return sb.ToString();
}

// Methode 2 :
public static AutomationElement GetCurrentElement(SysEventInfo info)
{
IntPtr hwnd = info.Hwnd;
System.Drawing.Point mouse = new System.Drawing.Point(info.mouse.pt.X, info.mouse.pt.Y); AutomationElement element;
try
{
element = AutomationElement.FromPoint(new System.Windows.Point(mouse.X, mouse.Y));
}
catch (Exception e)
{
element = AutomationElement.FromHandle(hwnd);
}

return element;
}

Si vous êtes compétent dans ce domaine, vous pouvez nous contacter. Sinon merci de ne pas postuler à
cette offre de prestation.

Budget indicatif : Moins de 500 €

Publication : 24 avril 2017 à 15h09

Profils recherchés : Développeur C# freelance, Développeur Windows freelance

Le profil du client est reservé aux prestataires abonnés

Créer un compte

1 freelance a répondu à ce projet

1 proposition de devis en moins de 2h

Publier un projet similaire

Chaque jour, des centaines de clients utilisent Codeur.com pour trouver un prestataire. Créez votre compte dès maintenant, remplissez votre profil et trouvez de nouveaux clients.

Trouver des nouveaux clients

Votre navigateur Web n’est plus à jour. Il ne permet pas d’afficher correctement le site Codeur.com.
Nous vous invitons à mettre à jour votre navigateur ou à utiliser un autre navigateur plus récent.