Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват ЛКМ и потом сразу нажать ее. 
:(
    Опции темы
AWAX
Дата 2.2.2011, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 8.12.2010

Репутация: нет
Всего: нет



Доброго дня. 

Дабы не создавать пару тем опишу все в одной теме.

Задача №1.
Мне нужно перехватить в полно экранном приложении нажатие ЛКМ и сразу же нажать ее три раза.
Как это реализовать? Будет ли сильная задержка между оригинальным нажатием и виртуальным?
Выложите свои наработки или дайте ссылки. Пожалуйста.

Задача №2.
Хочу потренироваться чуть чуть. Поэтому решил написать программку которая будет сканировать 
ось Х (ось Х изменяется всегда, а ось У постоянна) экрана на наличие пикселя определенного цвета, перемещать курсор мыши на это место и нажимать ЛКМ. 
Планирую все это сделать в несколько потоков, потому что думаю что сканирование пикселя быстро не произойдет. 
И в каждом потоке изучать отдельную область экрана. 
Прежде чем писать это решил поинтересоваться как будет производительность.
Будет ли тормозить систему мое приложение при наличии потоков 20?
Как лучше получать пиксели с окна? Посоветуйте что нибудь быстрое.

Задача №3.
Нужно написать утилиту по перехвату кнопок клавы и мышки. Наподобии Mkey.
Дайте ссылок и статей по этому поводу.
Загвоздка в основном в получении кода кнопки мыши и клавы.

Всем спасибо, жду Ваших ответов.

PM MAIL Skype   Вверх
MetalFan
Дата 2.2.2011, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



Во-первых: одна тема - один вопрос.
Во-вторых:
Цитата(AWAX @  2.2.2011,  11:03 Найти цитируемый пост)
Выложите свои наработки или дайте ссылки.

В поиск по "хук" "hooks" "SetWindowHook"


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
AWAX
Дата 3.2.2011, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 8.12.2010

Репутация: нет
Всего: нет



Хуки сделать я могу. 
Вопрос как нажать потом клавишу три раза. 
Keyb_event если не ошибаюсь что то такое. Раньше игрался с ней.
Но вот сейчас подзабыл. там надо нажать и отпустить.


Сейчас такой вопрос.
На мышке есть дополнительные кнопки.
Как выполнить код по их нажатию. Я не могу их поймать.
Наверное хуки тему не до конца изучил.
PM MAIL Skype   Вверх
MetalFan
Дата 3.2.2011, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



Цитата(AWAX @  3.2.2011,  11:09 Найти цитируемый пост)
Вопрос как нажать потом клавишу три раза. 

Могу выдать предположение...
В функции-перехватчике мы должны "передавать" дальше перехваченную инфу (вызывать CallNexHookEx).
Так что, если к примеру в своей функции мы ловим нужное нажатие ЛКМ (хук WH_MOUSE_LL чтоли), а дальше вызываем (CallNextHookEx) следующий хук три раза...
Не уверен, что данный способ сработает, но можно попробовать.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
AWAX
Дата 8.2.2011, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 8.12.2010

Репутация: нет
Всего: нет



Сделал проще. Если курсор находится на определенном окне, то при нажатии ЛКМ нажимаем его еще два раза.

Читаю про хуки еще пытаюсь до конца понять все.
Не понятно следующее. Где должен быть код который выполняется по нажатию определенной клавише? В dll или ехе?

И еще в самой длл уже должны быть прописаны коды клавишь и мышки? Или можно подгружать из другого файла?

Вот самый простой на мой взгляд пример с др. сайта
Как передать ехе фалйу сообщение которое перехватили? что бы ехе файл мог выполнить определенный код.

Что дописать и куда что бы было следующим образом:
Сначала поймать нужную клавишу (мышки или клавиатуры) путем ее нажатия в программе (для получения ее кода) а потом присвоить к ней любое действие. Ограничить эту клавишу, подразумеваю следующее, что бы по этой клавише выполнялся только код который я прописал больше ничего.

Код

library lib;

uses
  windows,messages;
var
  H : THandle;

{Hook-функция}
function hook(c0de, wParam, lParam : integer): Lresult; stdcall;
{Объявления переменных}
var
  w : THandle;
  hw : hwnd;
begin
{Если c0de не меньше 0, все в порядке, продолжаем}
if c0de >= 0 then
begin
  { Если wParam = WM_RBUTTONUP, т.е. нажата правая кнопка мыши, получаем
  хендл (handle) кнопки "Пуск" и скрываем ее }
  case wParam of
WM_RBUTTONUP :
begin
  W:= FindWindow('Shell_TrayWnd', nil);
  W:= FindWindowEx(W, HWND(0),'Button', nil);
  ShowWindow(W, SW_hide);
end;
{ Если wParam = WM_LBUTTONUP, т.е. нажата левая кнопка мыши, получаем
хендл кнопки пуск и показываем ее }
WM_LBUTTONUP:
begin
  W:= FindWindow('Shell_TrayWnd', nil);
  W:= FindWindowEx(W, HWND(0),'Button', nil);
  ShowWindow(W, SW_SHOW);
end;
{ Если wParam = WM_MBUTTONUP, т.е. нажата средняя кнопка мыши, получаем
указатель на заголовок активного окна и изменяем его }
WM_MBUTTONUP:
begin
  hw:=GetForegroundWindow;
  SetWindowText(hw,'EXAMPLE OF WINDOWS HOOK (WH_MOUSE) - by Dark Lord 
<[email protected]>');
end;
end;
end else
{Если c0de меньше 0}
begin
  {Вызываем следующую ловушку в цепочке ловушек Windows и выходим из процедуры}
  result := CallNextHookEx(H, c0de, wParam, lParam);
  exit;
end;
{Вызываем следующую ловушку в цепочке ловушек Windows}
result := CallNextHookEx(H, c0de, wParam, lParam);
End;


{ Процедура установки ловушки, если не удалось
установить - выводим сообщение об ошибке }
procedure sethook;
begin
H:= SetWindowsHookEx(WH_MOUSE, @hook, hInstance, 0);
if H = 0 then
  messagebox(0,'hmmm..','ERROR',mb_iconhand);
end;

{ Процедура удаления ловушки }
procedure removehook;
begin
  UnhookWindowsHookEx(H);
end;

{ Экспорт процедур установки и удаления hook'a }
exports
sethook index 1  name 'sethook',
removehook index 2 name 'removehook';
end.



Это сообщение отредактировал(а) AWAX - 8.2.2011, 10:24
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0875 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.