Форум по Delphi программированию



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.02.2012, 21:32
nikkilla nikkilla вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: 10
Восклицание Глобальный контроль мышки

Здраствуйте ув. Форумчяне) У меня такая проблема. Для моей программы нужна проверка на глобальное нажатие левой кнопки мыши. Именно глобальная, так как программа должна работать даже свернутой.
Ответить с цитированием
  #2  
Старый 27.02.2012, 21:54
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Смотри в сторону хуков:
Код:
function MouseHook(Code, wParam, lParam: Integer): Integer; export; stdcall;
begin
  Result := 0;

  Msg := PMouseHookStruct(lParam);
  if (Code >= 0) and ... then
  begin
    // что-то делаем
  end
  else
    Result := CallNextHookEx(hMouseHook, Code, wParam, lParam);
end;
...
  SetWindowsHookEx(WH_MOUSE, MouseHook, 0, GetCurrentThreadID);
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 27.02.2012, 23:47
nikkilla nikkilla вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: 10
По умолчанию

Возможно я дно, но я не особо понял что к чему, да и код не работает(

Не мог бы ты обяснить что делают эти комманды:

Цитата:
SetWindowsHookEx(WH_MOUSE, MouseHook, 0, GetCurrentThreadID);

Result := CallNextHookEx(hMouseHook, Code, wParam, lParam);

и что такое Code, hMouseHook, lParam.
Ответить с цитированием
  #4  
Старый 28.02.2012, 00:20
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Конечно не работает , это только направление куда смотреть, а не полный код.
Код:
hMouseHook := SetWindowsHookEx(WH_MOUSE, MouseHook, 0, GetCurrentThreadID);
устанавливает хук на мышь с указанием функции MouseHook, которая будет заниматься обработкой
Код:
Result := CallNextHookEx(hMouseHook, Code, wParam, lParam);
вызвать обработчик по-умолчанию, если программа не обработала нажатия мыши.
Code и lParam - передаются в функцию системой.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 28.02.2012 в 00:24.
Ответить с цитированием
  #5  
Старый 28.02.2012, 06:29
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

PHP код:
function isDown(vKeyInteger) : Boolean;
begin
  Result 
:= GetAsyncKeyState(vKey) <> 0;
end
1 - левая кнопка
делать надо по таймеру; хуки надёжнее
Вложения
Тип файла: zip keyzstate.zip (1.9 Кбайт, 13 просмотров)
Ответить с цитированием
  #6  
Старый 28.02.2012, 17:04
nikkilla nikkilla вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: 10
По умолчанию

спс пойду пробовать
Ответить с цитированием
  #7  
Старый 28.02.2012, 19:09
nikkilla nikkilla вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: 10
По умолчанию

У меня при выполнении программы всё зависает. Дайте если не сложно рабочий кусок кода с хуком на ЛМБ.

Цитата:
function MouseHook(Code, wParam, lParam: Integer): Integer; export; stdcall;
begin




end;



procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowsHookEx(WH_MOUSE, MouseHook, 0, GetCurrentThreadID);
end;
Ответить с цитированием
  #8  
Старый 28.02.2012, 21:13
nikkilla nikkilla вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: 10
По умолчанию

Всё, всем большое спасибо. Уже разобрался
Ответить с цитированием
  #9  
Старый 28.02.2012, 21:28
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Смотри аттач. Давай готовый пример смысла нет, вставишь в программу и забудешь, а так узнаешь много нового.
использование хуков
Опоздал.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:39.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2021

ВКонтакте   Facebook   Twitter   Ссылка на Telegram