Вопрос по winforms, c#, tilt, mousewheel – Почему мое приложение не получает сообщения о наклоне колесика мыши?

1

В этом вопросеHow to detect mouse wheel tilt опубликован и принят ответ, который показывает необходимый код.

Я реализовал этот код в существующих приложенияхWndProc метод (который работает для других сообщений, которые мне нужно перехватить), но он не работает. Я проверил иWndProc Похоже, что не получает никаких сообщений, не говоря уже о сообщениях со значением0x020E когда я наклоняю колесо мыши.

Я использую Microsoft Wireless Laser 5000 в Windows XP SP3 (полностью исправленный) с установленным .NET 3.5 SP1.

Я обновил драйверы Intellipoint до версии 7.0.258.0 от 05.08.2009.

Другие приложения (например, Visual Studio, Word, paint.NET) получают и воздействуют на наклон колесика мыши, поэтому это должно быть мое приложение, но я не вижу, что я делаю неправильно.

Просто для полноты вот мой код:

    protected override void WndProc(ref Message m)
    {
        Trace.WriteLine(string.Format("0x{0:X4}", m.Msg));
        switch(m.Msg)
        {
            case WM_EXITSIZEMOVE:
                Opacity = 1.0;
                break;
            case WM_SYSCOMMAND:
                int command = m.WParam.ToInt32() & 0xfff0;
                if (command == SC_MINIMIZE && this.minimizeToTray)
                {
                    MinimizeToTray();
                }
                break;
            case WM_MOUSEHWHEEL:
                // Handle tilting here
                break;
        }
        base.WndProc(ref m);
    }

Trace.WriteLine вызов - это попытка проверить, проходят ли сообщения наклона. Другие сообщенияWM_EXITSIZEMOVE а такжеWM_SYSCOMMAND принимаются Сообщения определяются как:

    private const int WM_EXITSIZEMOVE = 0x0232;
    private const int WM_SYSCOMMAND = 0x0112;
    private const int SC_MINIMIZE = 0xF020;
    private const int WM_MOUSEHWHEEL = 0x020E;

NOTE I removed the [hardware] tag, as I'm 99% sure it's not the hardware that's at fault as other applications are receiving the messages.

UPDATE

Я добавил в свое приложение многострочное текстовое поле с полосами прокрутки, которое принимает и воздействует на сообщения о наклоне колесика мыши. Так что все, что мне нужно сделать, это найти код для этого;)

UPDATE

Этот вопрос на SuperUser может иметь какое-то отношение к этому - я буду следить за ответами там.

@skaffman - не уверен насчет аппаратного тега. Я на 99% уверен, что мышь работает правильно - см. Мои заметки о других приложениях, работающих с наклоном. ChrisF♦
Используете ли вы WndProc в вашей форме? Daniel A. White
@ Даниэль - да, я должен был это прояснить в вопросе. ChrisF♦

Ваш Ответ

1   ответ
1

EDIT: Вы также можете вызвать m.ToString () в вашем методе WndProc, чтобы получитьname (!) сообщения, которое вы получили. (Это делается с помощью гигантского переключателя вSyetm.Windows.Forms.MessageDecoder.MsgToString)

Обратите внимание, что сообщения могут отправляться только тому элементу управления, который имеет фокус, а не самой форме; если это так, выmight хочу использоватьфильтр сообщений.

Также обратите внимание, что разные мыши посылают разные сообщения колесика мыши. У меня есть мышь Logitech, которая отправляет0x20E сWParam это отрицательно для левой прокрутки и положительно для правой прокрутки.

EDIT (в ответ на комментарии)

Помните, что горизонтальная прокрутка была добавлена после вертикальной прокрутки и не поддерживается старыми программами. Поэтому драйвер мыши вполне может искать горизонтальные полосы прокрутки и явно их прокручивать. Попробуйте добавить в форму горизонтальную полосу прокрутки, расположенную отрицательно, чтобы пользователь ее не увидел, и посмотрите, что изменится.

Это внутренний тип; это вызывается Message.ToString
Вы можете увидеть это в Reflector или .Net Reference Source.
Другие сообщения, похоже, отправляются в форму - щелчки мышью и т. Д., - но я проверю это. ChrisF♦
MessageDecoder.MsgToString, по-видимому, не существует в .NET 3.5. ChrisF♦
Сообщения наклона колеса отправляются драйвером мыши, а не самой Windows (AFAIK), поэтому они могут вести себя по-разному. Spy ++ также может выполнять поиск во всех дочерних окнах (параметры ведения журнала)

Похожие вопросы