Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 13.08.2014, 23:54   #1
 Разведчик
Аватар для list7
 
list7 никому не известный тип
Регистрация: 20.07.2010
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Делфи,ардуино,жмём на клавиши

Вообщем в чём суть проблемы,есть программа на делфи - автокликер или простейший бот для игр (например lineage)если мы хотим нажать клавишу из нашей программы что-то типа этого : PostMessage(h1,WM_keydown,vk_f10,0);
то такие варианты сейчас практически нигде не работают из-за всяких фростов и тд. Как обойти? Поискав решения в интернете пришёл к выводу,что существует два способа обхода этой проблемы:
1.Написать собственный драйвер для клавиатуры.Я так понял что вот здесь:
[Ссылки могут видеть только зарегистрированные пользователи. ] ,так и реализовано.
2.Микроконтроллер который аппаратно нажимает на клавиши.

Так как в микроконтроллерах я не силён то начал с пункта 1.Потратив кучу времени я добился того ,что мой драйвер может пищать системным динамиком на компьютере.Дальше движение шло очень туго ( тк я не программист ,я знаю только делфи и то на начальном уровне, да и времени особо нет).У этого способа есть свои минусы: под каждую операционную систему нужен свой драйвер (даже 32 и 64 бит разные драйвера).Также нужна клавиатура PS/2 (тк нужно эмулировать работу с клавиатурой и мышью на уровне железа). И вот тут мне случайно попались видеоуроки Jeremy Blum про ардуино на русском языке.Посмотрев первые четыре урока я понял что вот оно решение моей проблемы.Что такое Ардуино это плата микроконтроллера но только,что-то типа "конструктора для детей".Вообщем если вы посмотрите уроки 1,2,3,4,6 (пятый не нужен) то этого хватит чтоб разобраться(ну и конечно надо немного делфи). Допишу чуть попозже - убегаю.

Добавлено через 1 час 32 минуты
Итак продолжаем начнём с Делфи. Напишем программу работы с ком портом.Найдя в интернете похожую программу и чуть переделав её получил вот это:

implementation

{$R *.dfm}

// подсоединяемся к ком порту
procedure TForm1.Button1Click(Sender: TObject);
begin
CommPortDriver1.BaudRateValue:=9600;
CommPortDriver1.PortName:='\\.\Com5';
CommPortDriver1.DataBits:=db8BITS;
CommPortDriver1.Connect;
if CommPortDriver1.Connect=true then begin
Memo1.Lines.Add('Порт Загрёб');
end
else
Memo1.Lines.Add('Порт Недается');
end;

// отсоединяемся от ком порта
procedure TForm1.Button2Click(Sender: TObject);
begin
CommPortDriver1.Disconnect;
Memo1.Lines.Add('Отсоединились от порта');
end;
// отсылаем данные
procedure TForm1.Button3Click(Sender: TObject);
var

s:string;
begin
s:=edit1.text;
CommPortDriver1.SendString(s);

end;

// принимаем данные
procedure TForm1.CommPortDriver1ReceiveData(Sender: TObject;
DataPtr: Pointer; DataSize: Cardinal);
var i:integer;
s:string;
begin
s:='';
For i:=0 to DataSize-1 do s:=s+(PChar(DataPtr)[i]);
begin
Memo2.text:=s;
end;
end;

Вообщем простенькая программа подсоединяемся к компорту,отсылаем данные которые введём,принимаем эти данные и по окончании отсоединяемся.Приёмка данных procedureTForm1.CommPortDriver1ReceiveData) нам вообще то не нужна,но я её оставил для отладки.На этом с Делфи и закончим и перейдём к ардуино.
Какая нужна ардуина? Нам нужна леонардо:
[Ссылки могут видеть только зарегистрированные пользователи. ]
или ардуино микро:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Покупать лучше в китае (дешевле),можно клоны - не важно например:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Себе я купил микро,но лучше бы взял леонардо (уж очень микро маленькая).При покупке следует обратить внимание чтобы плата была на
микроконтроллере ATmega32u4 и питание лучше 5 вольт (микро бывает 3.3 вольта). А лучше купить наборчик и поиграться с уроками джереми,тоже интересно:
[Ссылки могут видеть только зарегистрированные пользователи. ]

После того как у нас появилась плата ардуино подсоединяем её через USB (шнур идёт в комплекте с платой) к компьютеру. После чего в диспетчере задач (у меня виндоуз 7 и установка дополнительных драйверов не потребовалось всё произошло автоматически) дополнительно у вас появится:
-HID совместимая мышь
-клавиатура HID
-COM5
Компорт может быть под другим номером(у меня 5) тогда в делфи измените : CommPortDriver1.PortName:='\\.\Com5'; на тот что у вас.
Осталось залить скетч в ардуину.Если вы посмотрели уроки джереми о которых я писал выше то вы это сделаете без труда.


// ардуино Micro Pro посылаем данные с компьютера на ком порт,обратно
// отсылаем нажатие сооьветствующей клавиши

byte val = 0;

void setup()
{
// begin the serial communication
Serial.begin(9600);
// активируем клавиатуру
Keyboard.begin();

}
void loop()
{

// check if data has been sent from the computer
if (Serial.available()) {
// read the most recent byte (which will be from 0 to 255)
val = Serial.read();
Serial.println( val); // записываем данные в ком порт,нужно только для проверки
// Keyboard.write(val); тоже работает - нажимает и отжимает клавишу
Keyboard.press(val); // нажать клавишу
delay(50);
Keyboard.releaseAll(); //отжать все клавиши
}

}


Вот такой небольшой скетч тоже объяснять тут по-моему нечего.
if (Serial.available()) - если пришли какие-то данные тогда:
val = Serial.read(); - переместить эти данные в переменную val
Serial.println( val); - отсылаем данные обратно на компорт,это лишнее,оставил только для настройки.
// Keyboard.write(val); - другой способ ,он нажимает и отжимает клавишу,но мне кажется что Keyboard.press(val); и Keyboard.releaseAll()
работает стабильнее.
Ну вот наверно и всё на этом.

Добавлено через 15 часов 45 минут
Да забыл написать для работы программы на делфи надо установить компонент comdrv32. Исходники для делфи и ардуино а также компонент comdrv32 можно найти здесь:
[Ссылки могут видеть только зарегистрированные пользователи. ]

Последний раз редактировалось list7; 14.08.2014 в 15:39. Причина: Добавлено сообщение
  Ответить с цитированием
Пользователь сказал cпасибо:
mars2107 (08.09.2014)
Старый 12.09.2014, 02:41   #2
 Разведчик
Аватар для nuмbеrОNЕ
 
nuмbеrОNЕ неизвестен в этих краяхnuмbеrОNЕ неизвестен в этих краяхnuмbеrОNЕ неизвестен в этих краяхnuмbеrОNЕ неизвестен в этих краяхnuмbеrОNЕ неизвестен в этих краяхnuмbеrОNЕ неизвестен в этих краяхnuмbеrОNЕ неизвестен в этих краяхnuмbеrОNЕ неизвестен в этих краяхnuмbеrОNЕ неизвестен в этих краяхnuмbеrОNЕ неизвестен в этих краяхnuмbеrОNЕ неизвестен в этих краях
Регистрация: 01.06.2014
Сообщений: 3
Популярность: -2186
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Отправить сообщение для nuмbеrОNЕ с помощью ICQ Отправить сообщение для nuмbеrОNЕ с помощью Skype™
 
По умолчанию Re: Делфи,ардуино,жмём на клавиши

возможно подойдет вам эмуляция нажатий клавиш , но сейчас продуктивно использовать для бота такие действие в Delphi

---
may suit you emulate keystrokes, but now productive use for the bot such action in Delphi
  Ответить с цитированием
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Горячие клавиши! Rubinin95 Грани реальности 0 14.07.2014 10:42
[Подсказка] Нажатие клавиши. Lermontov Общение разработчиков 6 31.05.2012 12:43
[Информация] Команды и клавиши shagart Статьи и описания по Lineage 2 0 20.03.2009 22:26

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 18:40.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net