Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2014.02.09;
Скачать: [xml.tar.bz2];

Вниз

Имитация нажатия клавиш   Найти похожие ветки 

 
Сергей   (2013-04-08 11:43) [0]

Здравствуйте.
Помогите, пожалуйста, написать, маленькую программку, которая бы имитировала нажатие клавиш на клавиатуре.
Т.е. нажимаю кнопку «Старт» и программа каждую секунду имитирует нажатие клавиш «1, 2, 3», и так пока не нажата кнопка «Стоп», или пока я сам на нажал на клавиатуре заранее определенную клавишу остановки (напр. F12).
Я вот пробую использовать такой код

procedure TForm1.Button1Click(Sender: TObject);
var
 i: integer;
begin
 for i := 1 to 100 do begin
   keybd_event(Ord("1"), 0, 0, 0); //Нажатие  1.
   keybd_event(Ord("1"), 0, KEYEVENTF_KEYUP, 0); //Отпускание 1.
   Application.ProcessMessages;
   Sleep(1000);

   keybd_event(Ord("2"), 0, 0, 0); //Нажатие 2.
   keybd_event(Ord("2"), 0, KEYEVENTF_KEYUP, 0); //Отпускание 2.
   Application.ProcessMessages;
   Sleep(1000);

   keybd_event(Ord("3"), 0, 0, 0); //Нажатие 3.
   keybd_event(Ord("3"), 0, KEYEVENTF_KEYUP, 0); //Отпускание 3.
   Application.ProcessMessages;
   Sleep(1000);
 end;
end;

Имитация идет хорошо, но программа пока не отработает цикл от 1 до 100 просто подвисает и ни на что не реагирует.

Можно ли создать такой примерно цикл

Пока не нажата F12 повторять
Начало цикла
   keybd_event(Ord("1"), 0, 0, 0); //Нажатие  1.
   keybd_event(Ord("1"), 0, KEYEVENTF_KEYUP, 0); //Отпускание 1.
   Application.ProcessMessages;
   Sleep(1000);
Конец цикла.

Или

Пока не нажата кнопка «Стоп» повторять
Начало цикла
   keybd_event(Ord("1"), 0, 0, 0); //Нажатие  1.
   keybd_event(Ord("1"), 0, KEYEVENTF_KEYUP, 0); //Отпускание 1.
   Application.ProcessMessages;
   Sleep(1000);
Конец цикла.

Спасибо.


 
brother ©   (2013-04-08 11:47) [1]

> Можно ли создать такой примерно цикл

можно.


 
Дмитрий С ©   (2013-04-08 11:52) [2]


> TForm1.Button1Click

Повесь нажатия и отпускания на таймер


 
Сергей   (2013-04-08 12:35) [3]

Не могли бы выложить маленький пример кода?


 
clickmaker ©   (2013-04-08 12:47) [4]

Form1.KeyPreview = true

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 if (Key = VK_F12) then
   FF12Clicked := true;
end;

while not FF12Clicked do begin
...
end;


 
Сергей   (2013-04-09 10:15) [5]

Спасибо. Получилось что хотел. Помогли ваши советы.


 
Вова   (2013-04-10 23:22) [6]

while True do
begin

if getasynckeystate($1B) <> 0 then
 begin
   ShowMessage("Работа программы завершена пользователем");
   break;
 end;
............................
end;

ток тут эскейп


 
Германн ©   (2013-04-11 02:39) [7]


> Вова   (10.04.13 23:22) [6]

И как "это" отвечает на вопрос автора топика?


 
Вова   (2013-04-11 08:35) [8]


> И как "это" отвечает на вопрос автора топика?


Элементарно, это способ выйти по кнопке с клавы из цикла, а можно и из программы.


 
Вова   (2013-04-11 09:18) [9]

можно еще короче )

while (getasynckeystate($1B) = 0) do
..........



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2014.02.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
2-1364829737
TStas
2013-04-01 19:22
2014.02.09
КАк упаковать раром папку?


15-1377527842
Дальний Восток
2013-08-26 18:37
2014.02.09
Наводнение на Дальнем Востоке


1-1321429584
Deltas
2011-11-16 11:46
2014.02.09
OleContainer и Excel


15-1377069296
Els
2013-08-21 11:14
2014.02.09
Хороший форум по программированию


15-1377535265
robt5
2013-08-26 20:41
2014.02.09
FTP клиенты





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский