Goal: To be able to find point(X,Y) of element on windows desktop application which been clicked without performing click itself.
Not working solution I've added mousekeyhook Nuget package to my .net core WPF application, it working fine ( when click and event raising with correct position), but each time that program hit breakpoint( for specific below example - at M_Events_MouseDown method) the mouse starts to lag for about 20 seconds.
Also i have found that in WinForms application it works smoothly
MouseKeyHook implementation:
public partial class MainWindow : Window
{
private IKeyboardMouseEvents m_Events;
public MainWindow()
{
InitializeComponent();
SubscribeGlobal();
}
private void SubscribeGlobal()
{
Unsubscribe();
Subscribe(Hook.GlobalEvents());
}
private void Subscribe(IKeyboardMouseEvents events)
{
m_Events = events;
m_Events.MouseDown += M_Events_MouseDown;
}
private void M_Events_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
Console.WriteLine($"Mouse down :{e}");
}
private void Unsubscribe()
{
if (m_Events == null)
return;
m_Events.MouseDown -= M_Events_MouseDown;
}
}
This is a known issue and low-level hook behavior by design.
When you hook into the mouse event processing chain, your code is one of many other processors. Every hooked piece of code has a possibility to suppress or modify further processing. Nevertheless, there is a time limit to do so. If you set a breakpoint, windows call your code, your code does not respond, a timeout occurs and it starts over.
See a similar question for details. The second answer with more upvotes is the better one.: Low level mouse hook - mouse freeze on breakpoint