-
Сергей М. © (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 все ок
Куда дальше смотреть?