Les meilleurs développeurs C# freelances sont sur Codeur.com
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
1 freelance a répondu à ce projet
1 proposition de devis en moins de 2h
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.