-
Похожий контент
-
- 7 ответов
- 3 358 просмотров
-
- 5 ответов
- 3 734 просмотра
-
- 1 ответ
- 1 868 просмотров
-
- 2 ответа
- 3 326 просмотров
-
- 4 ответа
- 6 562 просмотра
-
- 5 ответов
- 2 224 просмотра
-
- 1 ответ
- 1 996 просмотров
-
- 9 ответов
- 4 266 просмотров
-
- 14 ответов
- 4 551 просмотр
-
-
Последние посетители 0 пользователей онлайн
- Ни одного зарегистрированного пользователя не просматривает данную страницу
Вопрос
neo
Ребята здарова!
выручайте) весь уже измучился =( не получается =(
Тема такая, работаю с хуком, использую WH_KEYBOARD_LL
тк нужно работать и с 32 битной и 64 битной разрядностью.
и вообще мне нравится с ним работать всё очень просто и удобно но появилось одно НО =(
WH_KEYBOARD_LL работает до добавления сообщения в очередь в контексте потока.
и это действительно так =(
дело в том что я через хук ловлю введённую информацию и потом обрабатываю это через
idHTTP (ищу в интернете ответ)... если сигнал хороший то всё круть... а когда связь не очень..
и происходят небольшие задержки..
как я понимаю в WH_KEYBOARD_LL складируются результаты которые он не может передать
и затем хук выбивается... тоесть чтобы всё вновь заработало нужно сделать так
KeyboardHandle:=SetWindowsHookEx(WH_KEYBOARD_LL, @KeyboardHook, HInstance, 0);
и хук по прежнему работает до тех пор пока не вылетит вновь.
Чтобы решить эту проблему как я понял нужно использовать PeekMessage или GetMessage
и удалять излишки... Но в сети очень мало информации о том как ими пользоваться я не понимаю
куда и как их вставлять.
Я делал вот так... писал в ДЛЛке
function KeyboardHook(code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
msg:TMsg;
begin
if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then exit;
if code>=0 then
begin
if (wParam=WM_KEYDOWN) then
begin
SendMessage(FindWindow('TForm1', 'Form1'), KeyboardEvent, 0,PBDLLHOOKSTRUCT(lParam).vkCode);
end;
end;
Result:=CallNextHookEx(KeyboardHandle, code, wParam, lParam)
end;
// if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then exit;
// типа если есть излишки выходи
так же вставлял там это:
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
но не помогает =(
Может это где-то в ЕХЕшнике нужно вставлять? я не понимаю как с ним работать =(
Может кто на форуме знает? помогите пожалуйста ответом
Ссылка на комментарий
3 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.