как отловить сообщение мыши через WinAPI

программирование C# WinAPI

Сабж.
Под руками имеется глобальный хук, позволяющий произвести необходимые манипуляции при нажатии клавиши мыши.
Моя задача умещается в следующее предложение:
"Когда клавиша мыши нажата выполнить необходимые действия, после отменить нажатие клавиши мыши"
Глобально отследить нажатие и делать действия получается, а вот отменить нажатие я не смог.

Вычитал, что для этого необходимо принимать сообщения через GetMessage или PeekMessage, а после этого обнулять сообщение.
Но видимо моих мозгов не хватает для того чтобы это реализовать.

Я подключаю функцию вот так:
[StructLayout(LayoutKind.Sequential)]
public struct NativeMessage
{
public IntPtr handle;
public uint msg;
public IntPtr wParam;
public IntPtr lParam;
public uint time;
public Point p;
}

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct POINT
{
public int X;
public int Y;
}

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool PeekMessage(ref NativeMessage lpMsg, HandleRef hWnd, uint wMsgFilterMin, uint wMsgFilterMax, uint wRemoveMsg);

И после в том коде где обрабатывал "нужные при клике действия" ниже дописывал:
var msg = new APIDll.NativeMessage();
GCHandle handle = GCHandle.Alloc(msg);
foundMessage = APIDll.PeekMessage(ref msg, new HandleRef(Form1.Main,Form1.Main.Handle), 0, 0, 0);
msg.msg = 0;
handle.Free();

так же пробовал использовать заместо HandleRef тип IntPtr. Пробовал закидывать на это место параметр из глобального хука мыши lParam.

Но результата не произошло. ПРОШУ ПОМОГИТЕ С ЯВНЫМ ПРИМЕРОМ. Без посыланий в гугл, в поиск и фраз аля "используй функцию ляляля". Я хочу спросить не только название функции, но и что в нее вводить, откуда брать эти значения для функции. И куда ее вводить если это принципиально.

BlockInput не предлагать! Нужна блокировка именно путем отсева сообщений.

ЕСЛИ КТО ТО СМОЖЕТ НАПИСАТЬ ПРИМЕР НА СИ ШАРПЕ БУДЕТ ПРОСТО НЯШКА
Ответы:
Нужно засунуть в ПЯТЫЙ параметр PeekMessage константу PM_REMOVE
Это будет означать, что сообщение поймал ты, и знаешь что с ним делать. Если оно твоё - обрабатывай, если не твоё - вызови DispatchMessage(msg) чтобы швырнуть последующим обработчикам.
В общем, изучи параметры  PeekMessage.


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.