Конференция "WinAPI" » Глобальный хук WH_KEYBOARD+DCOMConnection [D7, WinXP]
 
  • Suffer (16.05.13 15:24) [0]
    В Delphi программирую недавно.
    Поставленная задача - Необходимо реализовать глобальный мониторинг поведения пользователя.
    Для начала реализовал хук WH_Keyboard. Для перехвата всех сообщений от клавиатуры сделал его в DLL.
    фильтр функция:

    function KeyHook(CODE, WParam, LParam: DWORD): DWORD; stdcall;
    var
     ServerWnd: THandle;
     ScanCode:integer;
    begin
    if CODE = HC_ACTION then      
      if ((LParam or (1 shl 30))=LParam) then
       begin
        ServerWnd:=FindWindow(nil,'Monitoring <BSSF>');
        GetKeyboardState(KeybrdState);
        ScanCode:=(LParam shr 16)and $FF;

        dmMy.DCOMConnection1.AppServer.smKeyboard(a,b);

        if ToAscii(WParam,ScanCode,KeybrdState,@Symbol,0)>0 then
         PostMessage(ServerWnd, WM_KEYEVENT, ord(Symbol[0]), LParam)
                                                            else
         PostMessage(ServerWnd, WM_KEYEVENT, 0, LParam);
       end;
     Result:=CallNextHookEx(HookHandle, code, WParam, LParam);
    end;

    изначально ScanCode полученной клавиши отправлял на Основное приложение, которое осуществляет запись в файл посредством функции PostMessage и соответсвующей процедуры обработки сообщения WM_KEYEVENT в осн.приложении.

    Дабы не засорять системную очередь сообщений, мне была поставлена задача реализовать связь при помощи DCOMConnection, который проходили на парах Delphi+Interbase system.
    Добавил серверную часть приложения, в которую добавил RemoteDataModule, а также создал Интерфейс-метод(smKeyboard) в библиотеке типов(Type Library). Плюс в клиентском - DataModule, с объектом DCOMConnection1.

    При вызове интерфейс-метода
        dmMy.DCOMConnection1.AppServer.smKeyboard(a,b) в клиентском приложении вес работает. А вот вызов из Фильт-функции (KeyHook) не работает. подключение формы в которой описан DCOMConnection произвел, толку не дало.

    Не могли бы посоветовать как решить данную проблему?
  • Suffer (16.05.13 15:29) [1]
    код могу предоставить! был совет  в вызове
    dmMy.DCOMConnection1.AppServer.smKeyboard(a,b)
    заметить dmMy на Хэндл(я так понял) самого файла DMlog.pas который я подключаю в uses в DLL, после долгих поисков в интернете не наткнулся ни на чего подобного!
  • robt2 (17.05.13 22:10) [2]

    > Необходимо реализовать глобальный мониторинг поведения пользователя

    обычно это незаконно
  • Suffer (17.05.13 22:39) [3]
    Обычно - да, но не когда реализуешь программу для начальника, чтобы знать чем заняты подчиненные!!
  • brother © (18.05.13 05:21) [4]
    радмин + статистика с прокси, имхо достаточно
  • brother © (18.05.13 05:24) [5]
    > Необходимо реализовать глобальный мониторинг поведения пользователя.
    > Для начала реализовал хук WH_Keyboard

    Мало этого. Поможет установка видеокамеры.
  • robt2 (18.05.13 22:15) [6]

    > чтобы знать чем заняты подчиненные!!

    эта отмазка уже давно не катит, а ты автоматом переходишь в разряд изготовителя
    а по поводу "директор сказал" темболее, больше чем уверен что за все пиратское и "спец" ПО в организации отвечать будеш ты, а не директор, ибо внезапно обнаружится бумажка с соотв. должностными обязанностями, которую ты даже никогда не видел
  • robt2 (18.05.13 22:16) [7]
    а чтобы люди работали а не вконтактились достаточно простых ограничений со стороны админа, и все...
 
Конференция "WinAPI" » Глобальный хук WH_KEYBOARD+DCOMConnection [D7, WinXP]
Есть новые Нет новых   [119102   +93][b:0][p:0.001]