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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2010, 11:44   #1
Federal
Пользователь
 
Регистрация: 21.05.2010
Сообщений: 77
Вопрос Кликер

Сделал кликер- по принципу записываем коды нажатых клавиш и обрабатываем логи.
Но вот беда, в большинстве случаев при проигрывании записи, эмулируются не те клавиши что я нажимал почему это происходит?
Выложил исходник
Дело скорее всего в форматах переменных I и S
Цитата:
///Записываем код клавиши
S:=IntToStr(Ord(Key));
///Воспроизводим
var
I: Byte;

procedure klick;
begin
I:=StrToInt(S);
keybd_event(I, 0, 0, 0);
keybd_event(I, 0, KEYEVENTF_KEYUP, 0);
end;
Вложения
Тип файла: rar Клавиши.rar (388.0 Кб, 21 просмотров)

Последний раз редактировалось Federal; 02.08.2010 в 12:31.
Federal вне форума Ответить с цитированием
Старый 02.08.2010, 12:31   #2
ZaRDaK
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 197
По умолчанию

S:=IntToStr(Ord(UpperCase(Key)));
Проверить возможности небыло.
ZaRDaK вне форума Ответить с цитированием
Старый 02.08.2010, 12:40   #3
Federal
Пользователь
 
Регистрация: 21.05.2010
Сообщений: 77
По умолчанию

Неа не помогло
Нужно что бы I был в формате (key) я думал что это Byte оказалося не так)
ord(key)-Возврат номера
А как сделать перевозврат возврата?)))

Последний раз редактировалось Federal; 02.08.2010 в 12:46.
Federal вне форума Ответить с цитированием
Старый 02.08.2010, 12:52   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

key это char
будто не посмотреть чтоль...
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.08.2010, 13:03   #5
Federal
Пользователь
 
Регистрация: 21.05.2010
Сообщений: 77
По умолчанию

Нет все-таки I должен быть Byte
проблема в строке S:=IntToStr(Ord(Key));

просто до меня дошло что функция
keybd_event(I, 0, 0, 0);
keybd_event(I, 0, KEYEVENTF_KEYUP, 0);
не поддерживает числа от Ord(Key)

keybd_event(byte, byte, cardinal, cardinal); А Ord(Key) дает число не от формата Byte
Теперь я вообще в растерянности

Видимо сама функция Ord(Key) дает лишь порядковый номер клавиши а I должно быть кодом типа $0D

Последний раз редактировалось Federal; 02.08.2010 в 13:09.
Federal вне форума Ответить с цитированием
Старый 02.08.2010, 13:13   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

потому что в той функции используется виртуальный код клавиши а не ord-номер символа(код можно в OnKeyUp/Down взять)
хоть бы справку почитали...
(в OnKeyPress Key:Char)
Цитата:
Видимо сама функция Ord(Key) дает лишь порядковый номер клавиши а I должно быть кодом типа $0D
ord дает порядеовый номер символа, на самом деле она ничего не делает кроме мнимого приведения типов.(Char=Byte по месту(я про АНСИ))
а ваше $0D=13=#13(перевод каретки)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 02.08.2010 в 13:15.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.08.2010, 13:28   #7
Federal
Пользователь
 
Регистрация: 21.05.2010
Сообщений: 77
Хорошо

ЗАРАБОТАЛО)))
Вот исходник (кому надо) самого простого кликера...
Спасибо большое 'Пепел Феникса'- тока вот в весы пока не добавляются, ну да ладно позже добавлю.
О добавил...

Блин а как записать нажатия клавиш без фокуса программы?
Вложения
Тип файла: rar Клавиши.rar (391.6 Кб, 25 просмотров)

Последний раз редактировалось Stilet; 03.08.2010 в 08:52.
Federal вне форума Ответить с цитированием
Старый 02.08.2010, 15:47   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

через глобальный хук(в поиске есть примеры кей логгера)

блин, когда, наконец, мой ник склонять начнут
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 02.08.2010 в 15:53.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.08.2010, 15:56   #9
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
блин, когда, наконец, мой ник склонять начнут
Да легко :
Код:
Пепел Феникса
Пепла Феникса
Пеплу Феникса
Пепел Феникса
Пеплом Феникса
Пепле Феникса
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 02.08.2010, 19:56   #10
Federal
Пользователь
 
Регистрация: 21.05.2010
Сообщений: 77
Печаль

Слямзил библиотеку
Вот только одного не понял как сделать что бы в лог писался код клавиши а не 'S D F G H J'
Код:
library hook;
uses
  Windows,
  Messages,
  Sysutils;

var
  myHook: HHook = 0;

function MsgProc(Code: integer; wParam: Word; lParam: Longint): Longint; stdcall;
var 
    f: text;
    key: array [0..16] of Char;
begin
  if (Code=HC_ACTION) and (((lParam shr 16) and KF_UP)=0) then
  begin
  Assign(f,'D:\log.txt');
  if FileExists('D:\log.txt') then
  Append(f) else Rewrite(f);
  GetKeyNameText(lParam,key,SizeOf(key));
  Writeln(f,key);
  CloseFile(f);
  result:=CallNextHookEx(myHook,Code,wParam,lParam);
 end;
end;

procedure setHook(Hook: boolean) export; stdcall;
begin
  if Hook then
  begin
    if myHook=0 then
    myHook:=SetWindowsHookEx(WH_KEYBOARD,@MsgProc,HInstance,0);
  end
  else
  begin
    if myHook<>0 then
    UnHookWindowsHookEx(myHook);
    myHook:=0;
  end;
end;

exports setHook name 'SetHook';

begin
end.

Последний раз редактировалось Stilet; 03.08.2010 в 08:53.
Federal вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно написать кликер promiks Фриланс 4 30.05.2010 01:05
Кликер ссылок SoftKoc Работа с сетью в Delphi 8 04.04.2010 04:26