Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2010, 20:12   #1
tirexherou
Новичок
Джуниор
 
Регистрация: 16.01.2010
Сообщений: 1
По умолчанию Проблема с горячей клавишей

Здраствуйте. Мне нужна помощь с решением такой проблемы: я делаю автокликер. Суть его в том что он выполняет клики мышкой по трем заданным точкам экрана циклически, цикл действует n-раз. N задается отдельно в SpinEdit. А проблема с горячей клавишей состоит в том, что нужна возможность остановить выполнение кликов мышкой в нужный момент, то есть прервать цикл. Горячую клавишу я написал, но она задействуетса только по окончании цикла. Вот пример текста програмы:
Код:
procedure TForm1.WM_HotKeyHandler (var Message: TMessage);
  var
    idHotKey: integer; //идентификатор, но об этом - позже
    fuModifiers: word; //модификатор MOD_XX
    uVirtKey: word; //код виртуальной клавиши VK_XX
begin
  // параметры сообщения получаем так:
  idHotkey:= Message.wParam;
  fuModifiers:= LOWORD(Message.lParam);
  uVirtKey:= HIWORD(Message.lParam);
    //теперь - небольшая проверочка:
if (fuModifiers = MOD_ALT) AND (uVirtKey = VK_F2) then
n:=0;
end;

procedure TForm1.Button4Click(Sender: TObject);
Var XY: TPoint;
    X1,Y1,X2,Y2,X3,Y3,n:integer;
begin
  n:=spinedit8.Value;
repeat
  X1:=spinEdit1.Value;
  Y1:=spinEdit2.Value;
  X2:=spinEdit3.Value;
  Y2:=spinEdit4.Value;
  X3:=spinEdit5.Value;
  Y3:=spinEdit6.Value;

  sleep(spinEdit7.Value);
  SetCursorPos(X1,Y1);
  if CheckBox1.Checked=true then
   begin
     mouse_event(MOUSEEVENTF_RIGHTDOWN,X1,Y1, 0, 0);
     mouse_event(MOUSEEVENTF_RIGHTUP,X1,Y1, 0, 0);
   end
    else begin
     mouse_event(MOUSEEVENTF_LEFTDOWN,X1,Y1, 0, 0);
     mouse_event(MOUSEEVENTF_LEFTUP,X1,Y1, 0, 0);
   end;

  sleep(spinEdit7.Value);
  SetCursorPos(X2,Y2);
  if CheckBox2.Checked=true then
   begin
     mouse_event(MOUSEEVENTF_RIGHTDOWN,X2,Y2, 0, 0);
     mouse_event(MOUSEEVENTF_RIGHTUP,X2,Y2, 0, 0);
   end
    else begin
     mouse_event(MOUSEEVENTF_LEFTDOWN,X2,Y2, 0, 0);
     mouse_event(MOUSEEVENTF_LEFTUP,X2,Y2, 0, 0);
   end;

  sleep(spinEdit7.Value);
  SetCursorPos(X3,Y3);
  if CheckBox3.Checked=true then
   begin
     mouse_event(MOUSEEVENTF_RIGHTDOWN,X3,Y3, 0, 0);
     mouse_event(MOUSEEVENTF_RIGHTUP,X3,Y3, 0, 0);
   end
    else begin
     mouse_event(MOUSEEVENTF_LEFTDOWN,X3,Y3, 0, 0);
     mouse_event(MOUSEEVENTF_LEFTUP,X3,Y3, 0, 0);
   end;

n:=n-1;
until n=0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
keyid:=GlobalAddAtom('My Hotkey');
RegisterHotKey(handle,keyid, MOD_ALT,VK_F2);
end;


У нас принято оформлять код специальным тэгом - при помощи кнопочки "#".
Только...
И не значком #.
И не РНР-кодом.
И не значком цитаты.
И не собственными "ручками".
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Модератор

И давайте договоримся сразу - у нас не любят читать безграмотный текст. У нас не "удафф", вы - человек вполне грамотный и ваши "изыски" не совсем понятны... Вы ведь не со шпаной общаться хотите ?
Тогда никто не мешает воспользоваться проверкой орфографии...
Модератор (опять же).

Последний раз редактировалось mihali4; 23.01.2010 в 20:39.
tirexherou вне форума Ответить с цитированием
Старый 23.01.2010, 20:41   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Введите в цикл
Код:
Application.ProcessMessages;
А перед ним - проверку на наличие некоего флажка останова, который вы будете устанавливать как угодно...
И если флажок - тогда
Код:
EXIT;
mihali4 вне форума Ответить с цитированием
Старый 23.01.2010, 20:42   #3
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

1- введите проверку флага нажатия горячей клавиши перед каждой точкой клика
2- цикл repeat со sleep-ами лучше заменить таймером
3- mouse_event лучше заменить sendmessage, шоб мыша не дергалась
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37
манипуляция клавишей )Игнат( Общие вопросы Delphi 40 26.04.2008 22:56
Создание системной горячей клавиши Seqular Общие вопросы Delphi 8 17.02.2007 21:12