Полная версия этой страницы:
Win32 API
gamecreator
16 May 2008, 15:27
первый вопрос: двойной клик отсылается мышью или получается соединением двух одинарных?
если второе, то:
- какая функция за это отвечает?
- каким способом можно перехватить сообщения до преобразования их в двойной клик?
банально потыркавшись в настройках мыши, можно увидеть таймаут на даблклик
gamecreator
16 May 2008, 17:18
ну мне не удалось уловить момент преобразованию двух одинарных кликов, поэтому я предположил самый абсурдный вариант (двойной клик посылается от мыши).
ты лучше ответь где двойной клик образуется и как это перехватить
FakerNeo
16 May 2008, 22:51
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]):
//А если тебе нужно перехватить хендл
А если тебе нужно перехватить сообщение
Ага, под винду на ассемблере.
По-моему, дабл-клик приходит вместо второго клика, и эту замену делает система, если у класса окна установлен соответствующий стиль (CS_DOUBLECLICK). То есть, в некотором смысле, действительно мышь. Хотя, тут лучше посмотреть, можно залогить сообщения прямо в WinMain (или где вызывается GetMessage), потому что преобразование может происходить, скажем, и в TranslateMessage или тому подобное.
gamecreator
17 May 2008, 13:27
Берс уже обьяснил мне что это заложено в драйвера и перехватить клики до их замены невозможно стандартными способами.
А какой кусок кода в стандартных драйверах отвечает за это преобразование?
Guevara-chan
17 May 2008, 14:14
Цитата
Берс уже обьяснил мне что это заложено в драйвера и перехватить клики до их замены невозможно стандартными способами.
А что ты сделать-то хотел ?
gamecreator
17 May 2008, 14:59
хотел из двух последовательных одинарных кликов получить один (а точнее установить нижнюю границу для скорости двойного клика)
Guevara-chan
18 May 2008, 09:52
Цитата(gamecreator @ 17 May 2008, 15:59)
хотел из двух последовательных одинарных кликов получить один (а точнее установить нижнюю границу для скорости двойного клика)
В своем окне или вообще ?
gamecreator
18 May 2008, 19:11
вообще
Добавлено ([mergetime]1211127083[/mergetime]):
нашел тут одну фишку - инвертирует мышь с помощью перехвата драйверов. но она только под 9х
FakerNeo
19 May 2008, 10:10
Описание:
function SetDoubleClickTime(Count: Word);
Добавлено ([mergetime]1211181044[/mergetime]):
или
Изменяй значение в HKEY_CURRENT_USER\Control Panel\Mouse\DoubleClickSpeed значение.
gamecreator
19 May 2008, 17:10
Цитата(FakerNeo @ 19 May 2008, 11:10)
Описание:
function SetDoubleClickTime(Count: Word);
ты снова не в теме. мне нужно установить нижнюю границу, а не верхнюю.
Что-то типа коррекции дребезга? То есть когда одно нажатие воспринимается системой как несколько последовательных.
Для клавиатуры есть подобная настройка в Accessibility (FilterKeys), для мыши не видно.
Как делаешь, через SetWindowsHook?
gamecreator
20 May 2008, 15:13
типа того. но вроде проблема в мыши, а не в системе
ага, но он не может отловить одиночные щелчки до преобразования
gamecreator
06 Nov 2008, 15:43
как перехватить запись в файл?
Guevara-chan
06 Nov 2008, 16:34
Shaidar Haran
06 Nov 2008, 18:22
Чтобы перехватить запись в файл, надо написать драйвер для файловой системы, позволяющий это сделать. Например, потырь где-нибудь исходники filemon и посмотри, как это сделано там. Обычными хуками WinAPI конкретно момент записи в файл не перехватить.
gamecreator
06 Nov 2008, 18:36
я вот думаю: если подменить функцию дос, то это сработает?
Цитата
Обычными хуками WinAPI конкретно момент записи в файл не перехватить.
Обычно это осуществляется много проще inject-ом своей dll во все загруженные процессы и перехватом функции WriteFile.
Используя функции ToolHelp32 перебираются хэндлы всем процессов и в адресное пространство каждого загружается своя dll через CreateRemoteThread, которая затем и сделает перехват нужных функций. Можно ещё перехватить и все CreateProcess, WinExec, чтобы не было такого, что программа успеет что-нибудь записать ДО внедрения DLL.
У меня есть пример на Делфи с перехватом все MessageBox-ов.
поделись, lizachaikinaсобакаgmail.com
К сожалению, нужный файл мой антивирус удалил как шпионское ПО, но вот остальные 4 архива остались. Там демонстрации всех перехватов. Ну а написать на основе сорцов программу, работающую со всеми процессами, а не с одним, специалисту труда не составит.
Скачать 80 КБ
Как работать с MaskBlt имея картинку и место, куда оно должно быть нарисовано? Необходимо, чтобы черные пиксели исходной картинки отображались как прозрачные.
gamecreator
25 May 2010, 00:53
Не ту функцию ты выбрал. Используй TransparentBlt
Как имея изображение HBITMAP, грамотно его скопировать в памяти, сделав еще один HBITMAP ?
Etoprostoya
08 Jun 2010, 17:46
А причём тут WinAPI?
gamecreator
08 Jun 2010, 18:37
при всем. WnAPI и GDI достаточно близки
ChASnock
19 Aug 2010, 15:55
Цитата(FakerNeo @ 19 May 2008, 13:10)
Изменяй значение в HKEY_CURRENT_USER\Control Panel\Mouse\DoubleClickSpeed значение.
Information: если изменять ключ, то изменения будут применены к процессам, запущенным после этого, а если setdoubleclicktime, то все процессы обновятся.
Предположим, хочу обмениваться командами/данными между двумя запущенными приложениями с помощью SendMessage, могу ли я в качестве параметра передать указатель на блок данных? Всмысле, сможет ли другая программа по этому указателю что-нибудь прочитать, и если нет, то как организовать обмен данными?
Ну, во-первых, есть для этого пайпы. Во-вторых, сможет, если имеется описание структуры которую ты передаешь.
Оу, не, что-то не получается по "чужим" указателям читать...
Сделал через ReadProcessMemory, не знаю насколько это оптимально...
Передавать некоторые данные от нескольких приложений одному "центральному", так, чтобы оно их обработало синхронно (в одном потоке).
Berserker
15 Sep 2010, 20:26
Не оптимально. Удобнее через CreateFileMapping (-1, ...), MapViewOfFile для создания общей области памяти между процессами.
SerAlexandr
01 Oct 2010, 16:50
Даже не знаю, где спросить, спрошу здесь, создам работу модерам )
Кто-нибудь может порекомендовать учебник по проектированию пользовательских интерфейсов?
Etoprostoya
01 Oct 2010, 16:55
Ищи в гугле что-то вроде "GUI для чайников" или опиши более подробно, что тебе нужно.
SerAlexandr
01 Oct 2010, 17:12
чтоб я таки знал что мне нужно
Подозреваю, что мне в основном нужна книга с советами - не пиши зеденым по зеленому, а пиши черным по Серому белому и т.п. прикрутить их к 28 требованиям препода - тоже интересная задача
Berserker
01 Oct 2010, 21:39
Раскин. "Интерфейс"
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.