Я создаю приложение WPF с некоторыми хакерскими действиями для встраивания элементов Form в один и тот же слой рендеринга.По сути, я делаю рендеринг формы вне экрана и создаю макет формы в образе WPF.У меня также есть низкоуровневая ловушка мыши, которая крадет события из приложения WPF, если они предназначены для макета формы, и вместо этого использует PostMessage (...) для отправки событий скрытому элементу формы.
Если я возвращаю ненулевое значение из моей процедуры ловушки, указывающей на то, что есть событие (даже если я все еще вызываю все ловушки мыши в очереди), курсор застревает в одной позиции.Я предполагаю, что это потому, что позиция курсора обрабатывается на некотором уровне приложений WPF, которого событие не достигает.
Я подумал, что было бы неплохо, чтобы приложение WPF не узнало о событии ввсе потому, что я мог сам установить положение курсора - в конце концов, к событию мыши привязаны координаты.К сожалению, кажется, что эти координаты мыши ужасно неверны.Фактически, независимо от того, где находится мой курсор, я всегда получаю одинаковые координаты.
Вот мой код:
if (nCode >= 0){
MOUSEHOOKSTRUCT_LL mousehookstruct_ll1 =
((MOUSEHOOKSTRUCT_LL)Marshal.PtrToStructure(((IntPtr)lParam), typeof(MOUSEHOOKSTRUCT_LL)));
if (mousehookstruct_ll1 != null) {
if ((user != null) && user.SystemMouseHookProc(nCode, wParam, lParam, new Point(mousehookstruct_ll1.pt_x, mousehookstruct_ll1.pt_y), mousehookstruct_ll1.dwExtraInfo)) {
return new IntPtr(1);// CallNextHookEx(this.MessageHookHandle, 1, wParam, lParam);// It doesn't matter that I don't call CallNextHook here.
}
}
}
GC.KeepAlive(this);
return CallNextHookEx(this.MessageHookHandle, nCode, wParam, lParam);
}
Затем в user.SystemMouseHookProc(...) Я распечатываю правильную позицию курсора, за которой следуют координаты, заданные крючком мыши, и результат всегда выглядит примерно так:
Курсор: 523 578
{X =1985777551, Y = 1985777602} // Эта координата никогда не меняется
Этот вывод явно неверен.Что я могу сделать, чтобы получить правильные координаты мыши от крючка мыши?
Спасибо.
PS Это решение взято из популярного онлайн.К сожалению, это решение не соответствовало моим потребностям, поэтому мне пришлось изменить его на эту форму.