![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| DriveSoftware |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 17.3.2003 Репутация: нет Всего: 4 |
Как можно отловить двойной клик мышью на рабочем столе без хука с DLL ???
Состояние мыши можно проверить так GetAsyncKeyState(VK_LBUTTON) но как это реализовать, не соображу ) Может есть другой способ? главное чтоб без DLL |
|||
|
||||
| Bes |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 806 Регистрация: 8.12.2004 Репутация: 5 Всего: 7 |
Дак, я думаю, что проблема еще в том, что таким образом ты сможешь отлавливать двойной щелчек в принципе, а где будет этот двойной щелчек?.... Хотя вроде есть способ узнать окно фокуса и по-моему даже где-то здесь обсуждалось.
Кроме того если бы я пользовался такой функцией, то вычислял бы время м/у двумя щелчками, а т.к. скорость двойного щелчка настраивается в виндовс, то нужно еще откуда-то выдернуть эту константу.... Короче, надо искать способ по-проще... :-) правда не уверен, что он есть. Щас сделал таймер с одной миллисекундой и в мемо результат твойе функции заносил - двойной клик выглядит так 0 0 0 0 0 -32767 -32768 -32768 -32768 0 0 0 0 0 0 -32767 -32768 -32768 0 0 0 т.е. 0-отпущена видимо само нажатие -32767, а -32768 - это нажатое состояние. - период м/у щелчками получился примерно 6 мс. Ща еще че-нить попробую. Это сообщение отредактировал(а) Bes - 30.12.2004, 11:30 |
|||
|
||||
| Bes |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 806 Регистрация: 8.12.2004 Репутация: 5 Всего: 7 |
Вот еще один примерчик - не мой может поможет решить вторую часть задачи. - там все написано. взято из кулибы.
Работа с другим приложением без Hook и DLL на примере GetFocus Своим опытом делится SottNick: На стандартной форме (Form1): Form1.FormStyle=fsStayOnTop - форма поверх остальных окон Объекты: ТАЙМЕР (Timer1) с периодом 1000 или меньше, 3 метки (Label1, Label2, Label3). назначение их см. в тексте процедуры У таймера событие OnTimer. а вот для нее обработчик: -------------------------------------------------------------------------------- procedure TForm1.Timer1Timer(Sender: TObject); var dwTargetOwner :DWORD;//указатель на подключаемый процесс dwThreadID :DWORD;//указатель на текущий процесс Result:longbool; begin {В первой метке отображается Handle активного окна} Label1.Caption:=IntToStr(GetForegroundWindow);//указатель на подключаемое приложение // Подключение потока другого окна dwTargetOwner := GetWindowThreadProcessId(GetForegroundWindow,nil);//указатель на подключаемый процесс dwThreadID := GetCurrentThreadId();//указатель на текущий процесс if (dwTargetOwner <>dwThreadID) then // если не один и тот же процесс Result := AttachThreadInput(dwThreadID, dwTargetOwner, TRUE);//подключение {Во второй метке отображается Handle объекта 'в фокусе' в активном окне} Label2.Caption:=IntToStr(GetFocus);//фокус в другом приложении if (Result) then AttachThreadInput(dwThreadID, dwTargetOwner, FALSE);//отключение {В третей метке отображается Handle объекта 'в фокусе' в активном окне, но если это окно другого приложения, то Handle будет равен нулю, т.к. попытка получения Handle происходит после отключения потока} Label3.Caption:=inttostr(GetFocus);//проверка после отключения {Эффект можно посмотреть, если запустить полученное приложение и сделать активным другое приложение} {Ясно, что полученный Handle объекта можно использовать по своему разумению. Например, считать из объекта текст и т.п.} // © SottNick 2000 end; |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Почему только вот хук не устраивает?
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| DriveSoftware |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 17.3.2003 Репутация: нет Всего: 4 |
Bes
Спасибо, вроде решил проблему, не знаю на скока это рационально, закрутить в таймере GetAsyncKeyState(VK_LBUTTON) но работает, исходник: Timer.Interval:=50;
|
|||
|
||||
| Bes |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 806 Регистрация: 8.12.2004 Репутация: 5 Всего: 7 |
Да согласен, на счет рациональности - тут большой вопрос, но как говриться на безрыбьи и рыбу... Хотя я бы тоже хотел увидеть какое-нить красивое решение.
|
|||
|
||||
| DriveSoftware |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 17.3.2003 Репутация: нет Всего: 4 |
А время дабл клика можно выяснить с помощью GetSystemMetrics
либо в реестре: HKEY_CURRINT_USER\Control Panel\Mouse - DoubleClickSpeed у меня там 500, т.е. для этого кода нужно будет присвоить переменной MS=500 и еще, забыл упомянуть про глобальные перменные:
Добавлено @ 11:51 <Spawn> Честно, просто не хочеться вазиться с DLL я пишу шароварный проект, и просто нуу не хочеться да и слышал я где то, что хуки с DLL напригают систему и в MSDK их использоваться не рекомендуется. |
|||
|
||||
| Bes |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 806 Регистрация: 8.12.2004 Репутация: 5 Всего: 7 |
2DriveSoftware: во, тоже спасибо - буду знать. :-)
|
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Я не думаю, что таймер с периодом в 50 мс, будет меньше нагружать систему -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| DriveSoftware |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 17.3.2003 Репутация: нет Всего: 4 |
<Spawn>
памерю патом каким нить монитором на загрузку процессора |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |