Форум: "WinAPI";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];
ВнизГлобальный хук Найти похожие ветки
← →
Cosmic (2002-11-29 19:43) [0]Кто-нибудь может поделиться НОРМАЛЬНЫМ кодом, отлавливающим все клавиши, нажатые в Винде и выводящим их коды, скажем в Мемо? Заранее сенкс :::)))
← →
Song (2002-11-29 19:46) [1]WH_GETMESSAGE+WM_CHAR
Этого для программиста должно быть достаточно.
← →
Cosmic (2002-11-29 20:18) [2]Для программиста - да, а для меня - нет. Я взял стандартный пример (тот, который с beep"ом в обработчике), а вот как вместо этого beep"а вывести букву, нажатую на клавиатуре - я без понятия. Пишу ShowMessage(chr(Msg.Wparam)) (теоретически должно работать) - выводит букву "д" при нажатии на ЛЮБУЮ клавишу.
Если можно - дай примерчик, плиз :)
← →
Song (2002-11-29 20:25) [3]Примерчик в есть статье "Хуки. Аспекты реализации". Статья - в соответствующем разделе.
Как написать call-back ф-ию для WH_GETMESSAGE - в хэлпе по SetWindowsHookEx(). Т.е. делаем вывод: вам нужна статья (1), пример из неё (2) и переделать пример для WH_GETMESSAGE (3) руководствуясь хэлпом WinSDK или MSDN по SetWindowsHookEx() (4)
По-моему всё объяснил доступно.
← →
Morfein (2002-11-29 21:00) [4]Вообще модальные окошки какие-либо показывать ОЧЕНЬ нежелательно
из callback-функции... система упасть может...
← →
Cosmic (2002-11-30 13:26) [5]Ага. Я всё так и написал. И запустил. И нажал резет, т.к. всё к чертям повисло... :) Ну дайте примерчик...
← →
Cosmic (2002-11-30 21:33) [6]To Song >
Тот примерчик не компилируется под Делфи 3 - ну никак. Пишет Invalid Stream Format. Что делать? Пробовал GetAsyncKeyState в таймере, но ведь это же извращение... ХОЧУ НОРМАЛЬНУЮ ЛОВУШКУ! Смысл - хочу написать игрушку с консолью, которая будет открываться при нажатии ~. Но игрушка будет использовать несколько приложений - поэтому нужно ставить глобальную ловушку. И не могу понять, как...
← →
Morfein (2002-11-30 21:51) [7]2 Cosmic : вот те исходник... прога есть клавиатурный шпион под Win9x.
В обработчике нажатой клавиши была ещё запись в файл, но тебе она не нужна.
Работает без доп. DLL, но только под Win9x!
Если надо под NT, перетащи KeyboardHandler() в dll-ку, и поправь путь в LoadLibrary().
program Project1;
uses Windows, SysUtils;
var
P : TFnHookProc;
H : HHOOK;
Inst : THandle;
function KeyboardHandler(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT; stdcall;
begin
if code < 0 then
Result:=CallNextHookEx(WH_KEYBOARD, code, wParam, lParam);
if (lparam or KF_UP) = lparam then
exit;
// обработка нажатой клавиши
end;
exports KeyboardHandler;
begin
inst:=LoadLibrary(PCHAR(ParamStr(0)));
if Inst = 0 then
exit;
p:=TFnHookProc(GetProcAddress(Inst, "KeyboardHandler"));
h:=SetWindowsHookEx(WH_KEYBOARD, P, Inst, 0);
sleep(INFINITE);
UnhookWindowsHookEx(H);
FreeLibrary(Inst);
end.
← →
Song (2002-12-01 11:20) [8]Без дополнительной dll будет работать в любой ОС, но ловить будет только сообщения приходящие от окон текущего процесса.
Глобальный хук устанавливается только с dll.
2Morfein © (30.11.02 21:51)
Если это локальная лоовушка, тогда последний параметр в SetWindowsHookEx() не может быть 0. Если это глобальная - нужна dll, в любой ОС.
← →
TankMan (2002-12-01 22:24) [9]Он сам ехе шник и загружает как dll-ку(насколько я понял)... так что по идее должно работать...
← →
Cosmic (2002-12-01 23:04) [10]РАБОТАЕТ! Оч-ч-чень оригинальная идея, никогда бы не додумался :) Спасибо!
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c