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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #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 не перехватывается)
В чем моя ошибка, как реализовать задуманное: при нажатии одной клавиши началось действие, при нажатии второй - закончилось.

Последний раз редактировалось IPhO, 16.09.2011 в 17:03.
Ответить с цитированием
  #2  
Старый 16.09.2011, 17:08
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
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);
       Application.ProcessMessages;
    end;
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 16.09.2011, 18:39
IPhO IPhO вне форума
Прохожий
 
Регистрация: 16.09.2011
Сообщения: 3
Репутация: 10
По умолчанию

Огромное спасибо, все заработало!
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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