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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2015, 23:52   #1
shamsiev
 
Регистрация: 20.06.2015
Сообщений: 8
Восклицание Как переделать функцию

Есть функция как с помощью нее вывести в Memo1 текст который набирается в блокноте? Подскажите пожалуйста.
Код:
function MouseHook(code: integer; WParam: word; lParam: Longint): Longint;StdCall;
var
  Wnd: hWnd;
begin
  if (code = HC_ACTION) then
    begin
      SendMessage(Wnd, MouseEvent, wParam, lParam);
    end;
  Result:=CallNextHookEx(MouseHandle, code, WParam, lParam);
end;
shamsiev вне форума Ответить с цитированием
Старый 10.08.2015, 01:01   #2
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Похоже Вы что-то перепутали. Можете показать код, как устанавливали хук?

Но если речь идет о том, как с такой функции обратиться к Memo1, то это можно сделать через глобальную переменную Form1:
Код:
Form1.Memo1.Lines.Add('Text');
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 10.08.2015, 07:55   #3
shamsiev
 
Регистрация: 20.06.2015
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Krasiosoft Посмотреть сообщение
Похоже Вы что-то перепутали. Можете показать код, как устанавливали хук?

Но если речь идет о том, как с такой функции обратиться к Memo1, то это можно сделать через глобальную переменную Form1:
Код:
Form1.Memo1.Lines.Add('Text');
да как установить хук чтобы при наборе текста вне формы все отображалось в Memo
shamsiev вне форума Ответить с цитированием
Старый 10.08.2015, 08:22   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Как выше сказано: Пиши полный путь - Form1.Memo1.Lines...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.08.2015, 09:22   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

а причём тут MouseHook?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 10.08.2015, 14:42   #6
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
Сообщение от shamsiev Посмотреть сообщение
как установить хук чтобы при наборе текста вне формы все отображалось в Memo
Проще всего будет использовать SetWindowsHookEx с параметром WH_KEYBOARD_LL, и обрабатывать уже нажатия клавиш как Вам нужно.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).

Последний раз редактировалось Krasiosoft; 10.08.2015 в 14:44.
Krasiosoft вне форума Ответить с цитированием
Старый 10.08.2015, 20:44   #7
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Вам нужно в этом направлении копать, вот небольшой примерчик только с латиницей, поищите на просторах интернета дальнейшую обработку и модернизируйте код:
Код:
var
  Form1: TForm1;
    HookHandle: hHook;

function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
type
  PKbdDllHookStrukt = ^TKbdDllHookStrukt;
  TKbdDllHookStrukt = record
    vkCode: DWORD;
    scanCode: DWORD;
    flags: DWORD;
    time: DWORD;
    dwExtraInfo: PDWORD;
  end;

  var
  KbdDllHookStrukt: PKbdDllHookStrukt;

begin
  if Code = HC_ACTION  then
  begin
     case WParam of
        WM_KEYDOWN:
        begin
        KbdDllHookStrukt:= PKbdDllHookStrukt(LParam);
        //Показ символа в строку если Form1.Memo1.Lines.add то будет перенос
        Form1.Memo1.Lines.Text:= Form1.Memo1.Lines.Text + char(KbdDllHookStrukt.vkCode);
        end;
      end;
      end;
    result := CallNextHookEx(HookHandle, code, WParam, LParam);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
HookHandle := SetWindowsHookEx(WH_KEYBOARD_LL, @HookProc, HInstance, 0);
end;

Последний раз редактировалось Aliens_wolfs; 10.08.2015 в 22:47.
Aliens_wolfs вне форума Ответить с цитированием
Старый 11.08.2015, 01:59   #8
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Получить текущее активное окно можно с помощью GetForegroundWindow. А дальше уже с помощью GetWindowText и GetClassName можно получить текст заголовка окна и класс окна соответственно.

Но так же можно использовать и GetWindowThreadProcessId для определения ИД процесса с помощью дескриптора окна, а далее взять путь через GetPathByProcessId и сверять его с нужным.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как переделать массив в функцию? aRTes_MX Общие вопросы C/C++ 0 19.12.2012 00:50
$.ajax переделать функцию Евгений Лазаренко Помощь студентам 0 12.11.2012 20:11
Как переделать функцию замены слов в тексте? artemavd Общие вопросы Delphi 4 29.05.2012 17:37
Переделать функцию Delphi_ProGer Помощь студентам 3 24.12.2010 13:56
функцию переделать на процедуру morgan996 Помощь студентам 2 08.01.2010 13:08