Показать сообщение отдельно
  #1  
Старый 16.09.2011, 17:00
IPhO IPhO вне форума
Прохожий
 
Регистрация: 16.09.2011
Сообщения: 3
Репутация: 10
По умолчанию Прерываение работы цикла

Доброго времени суток. Написал следующий код:

Код:
const
MyHotKey = ord('1');
MyHotKey2 = ord('2');

procedure CursorClick();
begin
    while go do
    begin
       mouse_event(MOUSEEVENTF_LEFTDOWN,xo,yo,0,0);
       mouse_event(MOUSEEVENTF_LEFTUP,xo,yo,0,0);
       sleep(200);
    end;
end;

procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
case Msg.hotkey of
  MyHotKey: CursorClick();
  MyHotKey2: go:=false;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Form1.Handle, MyHotKey, 0, MyHotKey);
RegisterHotKey(Form1.Handle, MyHotKey2, 0, MyHotKey2);
end;

Идея следующая: программа работает в фоновом режиме (т.е. окно не активно). Перехватываются нажатия клавишь (в частности 1 и 2). Хочу, чтобы при нажатии клавиши 1, начать эмитировать клики мышки с каким то интервалом, при нажатии клавиши 2 - прекратить.
Реализация следующая: нажали 1, запустилась функция CursorClick(), в которой кликанье мышки бесконечно зациклено (go = true - глобальная переменная), при нажатии 2 этой переменной go присваивается false и программа теоретически должна выйти из цикла, но так не происходит (мышка кликает и не на что не реагирует, т.е. как бы нажатие клавиши 2 не перехватывается)
В чем моя ошибка, как реализовать задуманное: при нажатии одной клавиши началось действие, при нажатии второй - закончилось.
Ответить с цитированием