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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2013, 21:43   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
Вопрос Клавиатурные хуки. Каждая буква с новой строки. Чем вылечить?

Всем добра!

Собственно проблема:
Из одного приложения в другое, прилетают буквы(да, да именно прилетают ).

Собственно вместо:
Привет

Получается:
п
р
и
в
е
т

hook dll:
Код:
function KBHookProc(Code: Integer; WParam: WParam; LParam: LParam)
  : LRESULT; stdcall;
var
  ScanCode: Integer;
begin
  if Code = HC_ACTION then
  begin
    if ((LParam or (1 shl 30)) = LParam) then
    begin
      ScanCode := (LParam shr 16) and $FF;
      if (mWND = 0) then
        SendMsg('Запрос описателя главного окна.');
      if mWND <> 0 then
        PostMessage(mWND, PKBM_MESSAGE, WParam, GetCurrentThreadId);
    end;
  end;
  Result := CallNextHookEx(hKBHook, Code, WParam, LParam);
end;
Обработчик в приложении:
Код:
var
  VK: Integer;
  SC: Integer;
  buf: Char;
  KS: TKeyboardState;
  MyHKL: HKL;
begin
  if (Msg.Msg = PKBM_MESSAGE) then
  begin
    VK := Msg.WPARAM;
    MyHKL := GetKeyboardLayout(Msg.LParam);
    SC := MapVirtualKeyEx(VK, MAPVK_VK_TO_VSC, MyHKL);
    GetKeyboardState(KS);
    ToUnicodeEx(VK, SC, KS, @buf, sizeof(buf), 0, MyHKL);
    if Assigned(ts) then
      ts.Text := ts.Text + buf;
    MyHKL := 0;
  end;
  inherited;
end;
Почему так?
Человек_Борща вне форума Ответить с цитированием
Старый 17.03.2013, 21:57   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Человек_Борща, ну ёжкин-же кот! Но формат-то нужно соблюдать...
Не ожидал. Радуешь...
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 17.03.2013, 22:19   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Smitt&Wesson, намек не понят =( Пните в нужное русло..

added
Помогите кто-нибудь. О каком форматировании идет речь?

Последний раз редактировалось Человек_Борща; 18.03.2013 в 00:29.
Человек_Борща вне форума Ответить с цитированием
Старый 18.03.2013, 14:45   #4
Daemvil
Пользователь
 
Регистрация: 23.12.2009
Сообщений: 56
По умолчанию

каков смысл функции MAPVK_VK_TO_VSC (или переменной?) ?
Nostra Sunt
Daemvil вне форума Ответить с цитированием
Старый 18.03.2013, 17:00   #5
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Я что-то не пойму, у вас после каждой буквы идёт #10(перевод строки))?
Если да,то что мешает убрать это?
UPD: Код проверил, всё нормально передаётся.

Последний раз редактировалось Kix.IV; 18.03.2013 в 17:03.
Kix.IV вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести слово на экран вертикально (каждая буква в отдельной строке) на языке С! alyona021 Помощь студентам 1 19.12.2012 11:12
Каждая буква имеет свой цвет BigDa Общие вопросы Delphi 3 01.04.2012 12:45
Не обновляются данные в базу данных при добавлении новой строки! в чем ошибка?!!!! Elly-lll Помощь студентам 2 17.05.2011 22:57
Хуки (тестовый пример). В чем моя ошибка? Tihon Win Api 2 31.12.2008 11:59
как вывести строку поочередно сначала первая буква первой строки потом первая буква второй строки и т.д. vitalik007 Помощь студентам 1 25.09.2007 20:45