Важная информация
Показано с 1 по 10 из 10

Тема: Получение глобального состояния кнопок мыши.

  1. #1 Получение глобального состояния кнопок мыши. 
    Разбирающийся
    Регистрация
    13.10.2013
    Сообщений
    53
    Сказал(а) спасибо
    52
    Поблагодарили 34 раз(а) в 22 сообщениях
    Здравствуйте.

    Вот уж сколько бьюсь над вопросом: "Как получить состояния кнопок мыши не зависимо, где эта мышь находится".
    Самое необычное, что напрямую такой API функции в Windows нет. Вот, что нашел, то, что хоть как то подходит:
    mouse_event - проблема в том, что он не получает состояние мыши, а его "синтезирует", +он, как уверяет MSDN, устарел;
    GetMousePos - только координаты мыши, без кнопок;
    DragDetect - никак не хочет работать. Упорно выводит 0 (дескать, failure):
    Код FreeBasic:
    Type poin
    	x As Long
    	y As Long
    End Type
    Dim d As Function (p1 As Integer, p2 As poin) As Integer
    Dim c As Function () As Integer
    Dim As Any Ptr memseg
    Dim As poin p
    memseg=DylibLoad("user32.dll")
    d=DylibSymbol(memseg, "DragDetect")
    c=DylibSymbol(memseg, "GetCapture")
    Print d(c(), p)
    Print p.x, p.y
    Что удивительно, если в последнем коде запрашивать значения функции несколько раз (около 7), то программа аварийно
    закрывается (а за пару раз до закрытия выдает некие странные результаты);
    GetRawInputData - все настолько запутанно, что я даже код написать не смог;
    Всевозможные макросы:
    - GET_XBUTTON_WPARAM
    - GET_MOUSEORKEY_LPARAM
    - и подобные
    отсутствуют как вид в библиотеках user32.dll или kernel32.dll:
    Код FreeBasic:
    Dim As Any Ptr memseg0, memseg1
    memseg0=DylibLoad("kernel32.dll")
    memseg1=DylibLoad("user32.dll")
    Dim f As Function (p1 As Integer) As Integer
    f=DylibSymbol(memseg0, "GET_XBUTTON_WPARAM")
    Print f
    f=DylibSymbol(memseg1, "GET_XBUTTON_WPARAM")
    Print f
    Выводит два нуля. На MSDN про dll, где до них можно достучаться, ничего не сказано.

    Прошу вашей помощи.
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для FelixMacintosh
    Регистрация
    20.01.2014
    Сообщений
    390
    Сказал(а) спасибо
    57
    Поблагодарили 45 раз(а) в 37 сообщениях
    еще есть GetCapture
    Нет подписи : (
    Ответить с цитированием  
     

  3. Пользователь сказал cпасибо:

    Good.Morning (13.06.2014)

  4. #3  
    Разбирающийся
    Регистрация
    13.10.2013
    Сообщений
    53
    Сказал(а) спасибо
    52
    Поблагодарили 34 раз(а) в 22 сообщениях
    FelixMacintosh, спасибо,
    но функция не возвращает то, что мне нужно. Лишь хэндл окна, где находится мышь.

    Если приглядеться к коду, данному мной, видно, что я ее уже пытался использовать:
    Код FreeBasic:
    c=DylibSymbol(memseg, "GetCapture")
    Ответить с цитированием  
     

  5. #4  
    Профи Аватар для FelixMacintosh
    Регистрация
    20.01.2014
    Сообщений
    390
    Сказал(а) спасибо
    57
    Поблагодарили 45 раз(а) в 37 сообщениях
    я заметил, поэтому хотел отредактировать сообщение.. не вышло
    Нет подписи : (
    Ответить с цитированием  
     

  6. #5  
    Профи Аватар для FelixMacintosh
    Регистрация
    20.01.2014
    Сообщений
    390
    Сказал(а) спасибо
    57
    Поблагодарили 45 раз(а) в 37 сообщениях
    а вообще нужно цикл сообщения окна создать,
    затем посмотреть какие оконные сообщения возвращаются
    с помощью CallWindowsProc ..от этого отталкиваться
    Нет подписи : (
    Ответить с цитированием  
     

  7. Пользователь сказал cпасибо:

    Good.Morning (13.06.2014)

  8. #6  
    Разбирающийся
    Регистрация
    13.10.2013
    Сообщений
    53
    Сказал(а) спасибо
    52
    Поблагодарили 34 раз(а) в 22 сообщениях
    CallWindowsProc
    Гм... Попробую
    Ответить с цитированием  
     

  9. #7  
    Профи Аватар для FelixMacintosh
    Регистрация
    20.01.2014
    Сообщений
    390
    Сказал(а) спасибо
    57
    Поблагодарили 45 раз(а) в 37 сообщениях
    я в разделе VB выложил пример отлова сообщений
    чтоб синхронизировать оцовское и дочернее окно...
    Нет подписи : (
    Ответить с цитированием  
     

  10. #8  
    Профи Аватар для FelixMacintosh
    Регистрация
    20.01.2014
    Сообщений
    390
    Сказал(а) спасибо
    57
    Поблагодарили 45 раз(а) в 37 сообщениях
    и не стоит забывать что окна помимо положения на площади еще имеют порядок
    верхнее нижнее самое верхнее и тд, а ловить сообщения придется от самого верхнего окна, я так думаю

    обычно это рабочий стол, GetDesktopWindow , вобщем есть глобальный хэндл...
    Нет подписи : (
    Ответить с цитированием  
     

  11. #9  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,846
    Сказал(а) спасибо
    1,816
    Поблагодарили 945 раз(а) в 807 сообщениях
    Записей в блоге
    1
    Good.Morning, мне Стас давал решение, посмотри там в конце темы. Пример с DirectInput.
    Сам я не железячник и ничего по поводу этого сказать не могу, для меня это чистой воды "магия".
    http://iforum.pro/freebasic-93/obsuz...nnoe-1544.html
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  12. Пользователь сказал cпасибо:

    Good.Morning (13.06.2014)

  13. #10  
    Модератор
    Регистрация
    19.02.2014
    Сообщений
    403
    Сказал(а) спасибо
    108
    Поблагодарили 303 раз(а) в 191 сообщениях
    Записей в блоге
    36
    Для этого есть функция GetAsyncKeyState
    UA6527P
    Ответить с цитированием  
     

  14. Пользователь сказал cпасибо:

    Good.Morning (13.06.2014)

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Переназначение кнопок внешних устройств пк
    от N501071 в разделе Общие вопросы программирования
    Ответов: 1
    Последнее сообщение: 29.11.2013, 21:35
  2. Имитация нажатия кнопкой мыши
    от FSC в разделе С++ Builder
    Ответов: 0
    Последнее сообщение: 23.10.2013, 14:50
  3. Ответов: 0
    Последнее сообщение: 11.09.2013, 21:40
  4. Ответов: 0
    Последнее сообщение: 01.09.2013, 17:37
  5. Ответов: 18
    Последнее сообщение: 30.08.2013, 10:12
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •