IPB

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Reply to this topicStart new topic
> Win32 API, Вопросы и ответы
gamecreator
сообщение 16 May 2008, 15:27
Сообщение #1

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




первый вопрос: двойной клик отсылается мышью или получается соединением двух одинарных?
если второе, то:
- какая функция за это отвечает?
- каким способом можно перехватить сообщения до преобразования их в двойной клик?
Go to the top of the pageAdd Nick
 
+Quote Post
Ennin
сообщение 16 May 2008, 16:30
Сообщение #2

strange thing
Сообщений: 2 586
Спасибо сказали: 94 раза




банально потыркавшись в настройках мыши, можно увидеть таймаут на даблклик


--------------------
anyway the wind blows...
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 16 May 2008, 17:18
Сообщение #3

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




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

ты лучше ответь где двойной клик образуется и как это перехватить
Go to the top of the pageAdd Nick
 
+Quote Post
Гость_FakerNeo_*
сообщение 16 May 2008, 22:51
Сообщение #4







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]):
//А если тебе нужно перехватить хендл
А если тебе нужно перехватить сообщение
Go to the top of the pageAdd Nick
 
+Quote Post
Irh
сообщение 17 May 2008, 13:17
Сообщение #5

Immortal
Сообщений: 1 137
Спасибо сказали: 269 раз




Ага, под винду на ассемблере. rolleyes.gif

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


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 17 May 2008, 13:27
Сообщение #6

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




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

А какой кусок кода в стандартных драйверах отвечает за это преобразование?
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 17 May 2008, 14:14
Сообщение #7

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




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

А что ты сделать-то хотел ?


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 17 May 2008, 14:59
Сообщение #8

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




хотел из двух последовательных одинарных кликов получить один (а точнее установить нижнюю границу для скорости двойного клика)
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 18 May 2008, 09:52
Сообщение #9

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




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

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


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 18 May 2008, 19:11
Сообщение #10

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




вообще

Добавлено ([mergetime]1211127083[/mergetime]):
нашел тут одну фишку - инвертирует мышь с помощью перехвата драйверов. но она только под 9х sad.gif
Go to the top of the pageAdd Nick
 
+Quote Post
Гость_FakerNeo_*
сообщение 19 May 2008, 10:10
Сообщение #11







Описание:
function SetDoubleClickTime(Count: Word);

Добавлено ([mergetime]1211181044[/mergetime]):
или
Изменяй значение в HKEY_CURRENT_USER\Control Panel\Mouse\DoubleClickSpeed значение.
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 19 May 2008, 17:10
Сообщение #12

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




Цитата(FakerNeo @ 19 May 2008, 11:10)
Описание:
function SetDoubleClickTime(Count: Word);

ты снова не в теме. мне нужно установить нижнюю границу, а не верхнюю.
Go to the top of the pageAdd Nick
 
+Quote Post
Irh
сообщение 20 May 2008, 11:32
Сообщение #13

Immortal
Сообщений: 1 137
Спасибо сказали: 269 раз




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

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

Как делаешь, через SetWindowsHook?


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 20 May 2008, 15:13
Сообщение #14

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




типа того. но вроде проблема в мыши, а не в системе

ага, но он не может отловить одиночные щелчки до преобразования
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 06 Nov 2008, 15:43
Сообщение #15

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




как перехватить запись в файл?
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 06 Nov 2008, 16:34 (Сообщение отредактировал Chrono Syndrome - 06 Nov 2008, 16:34)
Сообщение #16

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




http://www.apihooks.com/AH6.HTM
Глянь.


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
Shaidar Haran
сообщение 06 Nov 2008, 18:22
Сообщение #17

Оранжевый Канцлер Тьмы
Сообщений: 2 344
Спасибо сказали: 618 раз




Чтобы перехватить запись в файл, надо написать драйвер для файловой системы, позволяющий это сделать. Например, потырь где-нибудь исходники filemon и посмотри, как это сделано там. Обычными хуками WinAPI конкретно момент записи в файл не перехватить.


--------------------
I am the fury in your eyes. I am reason, I am vice.
Careful what you say
You may regret it,
Careful what you wish
You just might get it.
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 06 Nov 2008, 18:36
Сообщение #18

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




я вот думаю: если подменить функцию дос, то это сработает?
Go to the top of the pageAdd Nick
 
+Quote Post
Гость_Aнгeл_*
сообщение 06 Nov 2008, 21:20
Сообщение #19







Цитата
Обычными хуками WinAPI конкретно момент записи в файл не перехватить.

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


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Монца
сообщение 06 Nov 2008, 21:36
Сообщение #20

good news, everyone!
Сообщений: 918
Спасибо сказали: 93 раза




поделись, lizachaikinaсобакаgmail.com


--------------------
этъя опять
Go to the top of the pageAdd Nick
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 6 October 2025 - 19:06
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика