Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

блокирока мыши и клавы в чужом приложении не трогая своё [D6]


Страницы:   1 2

Novichek ©   (2002-10-10 02:19:00) 

можно ли блокировать мышь и клаву в чужом приложении но не трогая свою(мои горячие клавиши, простой ввод(hook) и т.д.)?


Novichek   (2002-10-14 00:20:00) [1]

Song> все равно не работает


Vit@ly   (2002-10-13 23:43:00) [2]

Опуститесь на землю. Мышь и клавиатура не принадлежат ни программе, ни процессу - это собственность "операциоки". И ИМХО можно закочить дискуссию. Хотя не "авторитет" в последней инстанции.


Song   (2002-10-13 22:26:00) [3]

L это LParam


Novichek   (2002-10-13 16:29:00) [4]

а мышь все равно не блокируется ни в моем ни в чужом! можно ли тогда заблокировать мышь полностью(с возможностью разблокировки) и в моем и в чужом приложении, но нетрогая клавиатуру?


Novichek   (2002-10-13 16:12:00) [5]

Diamond Cat >
if TMOUSEHOOKSTRUCT(Pointer( L)^).hwnd=ShareInf^.AppWndHandle then

а что эта за переменная Lи что с ней делать?


Diamond Cat   (2002-10-11 23:10:00) [6]

2 Rouseкруто, опознование своего окна через проверку его положения по оси z..... дельный совет

2 Novichekконечно не работает с мышью, ведь ловушка установлена только на клаву. придется сделать и на мышь, исходя из приведенного кода что-то типа

Function MouseHook(Code: Integer; ParamW: WPARAM; ParamL: LPARAM): LRESULT;stdcall;
Begin
If Code IN [HC_ACTION, HC_NOREMOVE] Then
Begin
if TMOUSEHOOKSTRUCT(Pointer(L)^).hwnd=ShareInf^.AppWndHandle then
SendMessage(ShareInf^.AppWndHandle, WM_USER, ParamW, Code)
else exit;
End;
Result := CallNextHookEx(ShareInf^.mouseHookHandle, Code, ParamW, ParamL)
End;




Function SetmousedHook(Wnd: HWND): BOOL; stdcall;
Begin
If ShareInf<>Nil Then
Begin
ShareInf^.AppWndHandle:=Wnd;
ShareInf^.mousehookhandle:=SetWindowsHookEx(WH_mouse, @mouseHook, HInstance, 0);
Result:=ShareInf^.mouseHookHandle<>0;
End
Else Result:=False
End;

надо только добавить к существующей TShareInf еще один параметр типа HHook; т.е.
TShareInf= Record
AppWndHandle: HWND;
mousehookhandle,OldHookHandle: HHOOK;
hm:THandle;
End;
ну и не зыбыть выгрузить ловушку
код не проверял но вроде должен работать

удачи


Novichek   (2002-10-11 18:46:00) [7]

Rouse_ © >> спасибо, только мышь то все равно активная...


Song   (2002-10-11 09:12:00) [8]

Надо было просто запретить мыше ездить за пределы своих форм, а клаву забить хуком.


Rouse_   (2002-10-11 07:01:00) [9]

Мда, поспал хорошо, и сразуже увидел всю сумбурность своих вчерашних высказываний ;) Не пинайте меня просто долгое сиденье за отладкой кода притупляет мозги

Вот решение
Изменить функцию в библиотеке

Function KeyboardHook(Code: Integer; ParamW: WPARAM; ParamL: LPARAM): LRESULT;stdcall;
var tmp: THandle;
Begin
If Code IN [HC_ACTION, HC_NOREMOVE] Then
Begin
tmp := GetForegroundWindow; //Вот здесь проверка
SendMessage(ShareInf^.AppWndHandle, WM_USER, ParamL, Code);
if tmp <> ShareInf^.AppWndHandle then Exit; //Блокируем все сообщения не нашей программе
End;
Result := CallNextHookEx(ShareInf^.OldHookHandle, Code, ParamW, ParamL);
End;


Как результат смотрим какое приложение активно, и если не наше, то просло не пересылаем сообщение о нажатой клавише дальше по цепочке хуков

Желаю успехов

ЗЫ: Продублирую мылом


Rouse_   (2002-10-10 08:32:00) [10]


> vidiv (10.10.02 08:16)

Я же говорил что могу ошибаться, спасибо что поправили ;)


Novichek   (2002-10-10 08:25:00) [11]

попробуй, мой е-майл: sanek@sed.lg.uaтолько ж ты понял какая задача? блок клавы и мыши вовсех приложениях кроме моего, а в моем отображение набора клавы после блока приложений (моя прога, после блокировки клавиатуры и мыши, в граф режиме отображает на мониторе символы приходящие с клавы и плюс анализирует их) помоги пожалуйста, если можешь.


Rouse_   (2002-10-10 08:16:00) [12]

Давай так, я сегодня просто всю ночь просидел, голова уже просто не соображает, я как только прийду в себя сяду и сделаю с нуля все что тебе нужно, а потом тебе почтой отошлю ок? Я вчера так тоже двоим сделал, просто сейчас я действительно уже начинаю похуже вникать. А за это время мож кто-то еще что посоветует

Желаю успехов


vidiv   (2002-10-10 08:16:00) [13]

Rouse_ >> Code - это не код нажатой клавиши, последний в Param-ах где-то.
Вот из helpa:
LRESULT CALLBACK KeyboardProc(

int code, // hook code - но не как ни код нажатой клавиши
WPARAM wParam, // virtual-key code - вот он код
LPARAM lParam // keystroke-message information
);

>>
А к стати Novichek, а без Dll слабо сделать


vidiv   (2002-10-10 08:14:00) [14]

Rouse_ >> Code - это не код нажатой клавиши, последний в Param-ах где-то.

>>
А к стати Novichek, а без Dll слабо сделать


Novichek   (2002-10-10 08:04:00) [15]

один хрен, не работает :(((((( ну хоть плач...


Rouse_   (2002-10-10 07:55:00) [16]

Не-не CODE = код нажатой клавиши а handle либо в ParamW либо в ParamL, я вот и говорю, что не помню точно

Желаю успехов


Novichek   (2002-10-10 07:44:00) [17]

дурацкий вопрос, но всё же => CODE и handle моей проги одно и тоже? если нет, то где вставить проверку?


Rouse_   (2002-10-10 07:35:00) [18]

Просто пропускаешь все сообщения адресованные твоей программе, а для остальных CODE заменяешь на ноль (как будто ничего не нажималось)

BlockInput соответственно снять

Желаю успехов


Novichek   (2002-10-10 07:25:00) [19]

да, но я то блокирую все приложения (BlockInput"ом)! (соответственно и своё) а как заблокировать все кроме моего?


Rouse_   (2002-10-10 07:02:00) [20]

Там как раз передаются параметры какая клавиша нажата и какому приложению адресовано сообщение (вот точно что где не помню а проверять лениво я просто через час выхожу из инета а у нас с тобой еще запуск эксплорера не решен) посмотри тем же стартером какой хэндр у интересуещего тебя приложения и посмотри где он проходит в каком параметре, а после просто делаешь, смотришь если сообщение идет нужному приложению то просто меняешь Code на ноль

Кажется так

Желаю успехов


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо