Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Win32 API
DF2 :: ФОРУМЫ > Основные форумы > Софт и железо > Программирование / Coding
gamecreator
первый вопрос: двойной клик отсылается мышью или получается соединением двух одинарных?
если второе, то:
- какая функция за это отвечает?
- каким способом можно перехватить сообщения до преобразования их в двойной клик?
Ennin
банально потыркавшись в настройках мыши, можно увидеть таймаут на даблклик
gamecreator
ну мне не удалось уловить момент преобразованию двух одинарных кликов, поэтому я предположил самый абсурдный вариант (двойной клик посылается от мыши).

ты лучше ответь где двойной клик образуется и как это перехватить
FakerNeo
LBN_DBLCLK


Добавлено ([mergetime]1210966859[/mergetime]):
В процедуре окна перехватывается данное сообщение и если
например

....
cmp uMsg, LBN_DBLCLC
jz NEXT

или

if uMsg=LBN_DBLCLC then

только до этого нужно проверить хендл окна на котором нажата кнопка это WM_COMMAND, перехватіваешь данное сообщение и в wParam (вроде или в lParam) окна возвращается хендл окна на котором нажата клавиша мыши



Добавлено ([mergetime]1210967414[/mergetime]):
хотя в принципе если тебе нужен просто двойной клик, то можно и не уточнять окно.

А если тебе нужно перехватить хендл в отладчике. То в ОЛЕ, например можно поставить брэйк на сообщение о двойном клике для любого окна

Добавлено ([mergetime]1210967490[/mergetime]):
//А если тебе нужно перехватить хендл
А если тебе нужно перехватить сообщение
Irh
Ага, под винду на ассемблере. rolleyes.gif

По-моему, дабл-клик приходит вместо второго клика, и эту замену делает система, если у класса окна установлен соответствующий стиль (CS_DOUBLECLICK). То есть, в некотором смысле, действительно мышь. Хотя, тут лучше посмотреть, можно залогить сообщения прямо в WinMain (или где вызывается GetMessage), потому что преобразование может происходить, скажем, и в TranslateMessage или тому подобное.
gamecreator
Берс уже обьяснил мне что это заложено в драйвера и перехватить клики до их замены невозможно стандартными способами.

А какой кусок кода в стандартных драйверах отвечает за это преобразование?
Guevara-chan
Цитата
Берс уже обьяснил мне что это заложено в драйвера и перехватить клики до их замены невозможно стандартными способами.

А что ты сделать-то хотел ?
gamecreator
хотел из двух последовательных одинарных кликов получить один (а точнее установить нижнюю границу для скорости двойного клика)
Guevara-chan
Цитата(gamecreator @ 17 May 2008, 15:59)
хотел из двух последовательных одинарных кликов получить один (а точнее установить нижнюю границу для скорости двойного клика)

В своем окне или вообще ?
gamecreator
вообще

Добавлено ([mergetime]1211127083[/mergetime]):
нашел тут одну фишку - инвертирует мышь с помощью перехвата драйверов. но она только под 9х sad.gif
FakerNeo
Описание:
function SetDoubleClickTime(Count: Word);

Добавлено ([mergetime]1211181044[/mergetime]):
или
Изменяй значение в HKEY_CURRENT_USER\Control Panel\Mouse\DoubleClickSpeed значение.
gamecreator
Цитата(FakerNeo @ 19 May 2008, 11:10)
Описание:
function SetDoubleClickTime(Count: Word);

ты снова не в теме. мне нужно установить нижнюю границу, а не верхнюю.
Irh
Что-то типа коррекции дребезга? То есть когда одно нажатие воспринимается системой как несколько последовательных.

Для клавиатуры есть подобная настройка в Accessibility (FilterKeys), для мыши не видно.

Как делаешь, через SetWindowsHook?
gamecreator
типа того. но вроде проблема в мыши, а не в системе

ага, но он не может отловить одиночные щелчки до преобразования
gamecreator
как перехватить запись в файл?
Guevara-chan
http://www.apihooks.com/AH6.HTM
Глянь.
Shaidar Haran
Чтобы перехватить запись в файл, надо написать драйвер для файловой системы, позволяющий это сделать. Например, потырь где-нибудь исходники filemon и посмотри, как это сделано там. Обычными хуками WinAPI конкретно момент записи в файл не перехватить.
gamecreator
я вот думаю: если подменить функцию дос, то это сработает?
Aнгeл
Цитата
Обычными хуками WinAPI конкретно момент записи в файл не перехватить.

Обычно это осуществляется много проще inject-ом своей dll во все загруженные процессы и перехватом функции WriteFile.
Используя функции ToolHelp32 перебираются хэндлы всем процессов и в адресное пространство каждого загружается своя dll через CreateRemoteThread, которая затем и сделает перехват нужных функций. Можно ещё перехватить и все CreateProcess, WinExec, чтобы не было такого, что программа успеет что-нибудь записать ДО внедрения DLL.
У меня есть пример на Делфи с перехватом все MessageBox-ов.
Монца
поделись, lizachaikinaсобакаgmail.com
Aнгeл
К сожалению, нужный файл мой антивирус удалил как шпионское ПО, но вот остальные 4 архива остались. Там демонстрации всех перехватов. Ну а написать на основе сорцов программу, работающую со всеми процессами, а не с одним, специалисту труда не составит.

Скачать 80 КБ
FBX
Как работать с MaskBlt имея картинку и место, куда оно должно быть нарисовано? Необходимо, чтобы черные пиксели исходной картинки отображались как прозрачные.
gamecreator
Не ту функцию ты выбрал. Используй TransparentBlt
FBX
Как имея изображение HBITMAP, грамотно его скопировать в памяти, сделав еще один HBITMAP ?
Etoprostoya
А причём тут WinAPI?
gamecreator
при всем. WnAPI и GDI достаточно близки
ChASnock
Цитата(FakerNeo @ 19 May 2008, 13:10)
Изменяй значение в HKEY_CURRENT_USER\Control Panel\Mouse\DoubleClickSpeed значение.

Information: если изменять ключ, то изменения будут применены к процессам, запущенным после этого, а если setdoubleclicktime, то все процессы обновятся.
FBX
Предположим, хочу обмениваться командами/данными между двумя запущенными приложениями с помощью SendMessage, могу ли я в качестве параметра передать указатель на блок данных? Всмысле, сможет ли другая программа по этому указателю что-нибудь прочитать, и если нет, то как организовать обмен данными?
Дьяк
Ну, во-первых, есть для этого пайпы. Во-вторых, сможет, если имеется описание структуры которую ты передаешь.
FBX
Оу, не, что-то не получается по "чужим" указателям читать...
FBX
Сделал через ReadProcessMemory, не знаю насколько это оптимально...
Дьяк
А чего ты хотел-то?
FBX
Передавать некоторые данные от нескольких приложений одному "центральному", так, чтобы оно их обработало синхронно (в одном потоке).
Berserker
Не оптимально. Удобнее через CreateFileMapping (-1, ...), MapViewOfFile для создания общей области памяти между процессами.
SerAlexandr
Даже не знаю, где спросить, спрошу здесь, создам работу модерам )
Кто-нибудь может порекомендовать учебник по проектированию пользовательских интерфейсов?
Etoprostoya
Ищи в гугле что-то вроде "GUI для чайников" или опиши более подробно, что тебе нужно.
SerAlexandr
чтоб я таки знал что мне нужно
Подозреваю, что мне в основном нужна книга с советами - не пиши зеденым по зеленому, а пиши черным по Серому белому и т.п. прикрутить их к 28 требованиям препода - тоже интересная задача
Berserker
Раскин. "Интерфейс"
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.