Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.11;
Скачать: CL | DM;

Вниз

Глобальный хук на клавиатуру без dll.   Найти похожие ветки 

 
Cerberus ©   (2006-06-20 15:12) [0]

сабж


 
Сергей М. ©   (2006-06-20 15:13) [1]

Не проблема.
О том вещает MSDN.


 
Cerberus ©   (2006-06-20 15:18) [2]

> [1] Сергей М. ©   (20.06.06 15:13)

А можно поконкретней если не сложно.


 
TUser ©   (2006-06-20 15:26) [3]

exe тоже может экспортировать функции - пишется также в файле проекта


 
Сергей М. ©   (2006-06-20 15:42) [4]


> Cerberus ©   (20.06.06 15:18) [2]
> можно поконкретней


Нет ничего конкретней инф-ции в MSDN.
Есть проблемы ? Излагай ..


 
Leonid Troyanovsky ©   (2006-06-20 18:24) [5]


> Cerberus ©   (20.06.06 15:18) [2]

> А можно поконкретней если не сложно.


http://msdn.microsoft.com

--
Regards, LVT.


 
begin...end ©   (2006-06-20 18:32) [6]

В Windows NT 4.0 SP3 и выше -- WH_KEYBOARD_LL.


 
programania ©   (2006-06-20 19:00) [7]


PROCEDURE reg(nKey:string); // например reg("alt+shift+Z");
var i:integer;
begin
if rKey then begin
//удаление регистрации горячей клавиши
 unRegisterHotKey(form2.handle,32);
 rKey:=false;
end
else
begin
//регистрация горячей клавиши
 if pos("alt"  ,nKey)>0 then i:=MOD_ALT else i:=0;
 if pos("shift",nKey)>0 then i:=i+MOD_SHIFT;
 if pos("ctrl" ,nKey)>0 then i:=i+MOD_CONTROL;
 if i>0 then begin
   RegisterHotKey(form2.handle,32,i,ord(nKey[length(nKey)]));
   rKey:=true;
 end;
end;
end;

//обработка
procedure TForm2.WMHotkey(var a:TWMHotkey);
begin
if a.hotkey=32 then begin

end;
end;


работает в
http://programania.com/en_source.zip  12кб


 
begin...end ©   (2006-06-20 19:02) [8]

> programania ©   (20.06.06 19:00) [7]

Какое отношение это имеет к хукам? Тем более, к глобальным?


 
programania ©   (2006-06-20 20:30) [9]

Если в Windows произойдет событие нажатия заданой клавиши,
то будет вызвана заданная процедура это и есть hook на это событие
причем это произойдет при любой активной программе
это и есть глобальный hook


 
begin...end ©   (2006-06-20 21:53) [10]

> programania ©   (20.06.06 20:30) [9]

Разумеется, Вы можете называть карандаш ластиком, а ластик -- карандашом. Правда, от этого карандаш не начнёт стирать, а ластик не начнёт писать, но это, по-видимому, Вас не очень беспокоит.

Я же при описании чего-либо предпочитаю пользоваться  либо терминологией того, кто это "что-либо" создал, либо общепринятой терминологией. В данном случае -- терминологией Microsoft, которая, во-первых, введена "создателем" ОС, в которой эти самые хуки и устанавливаются, а во-вторых, является практически общепринятой. В MSDN написано следующее: "A hook is a point in the system message-handling mechanism where an application can install a subroutine to monitor the message traffic in the system and process certain types of messages before they reach the target window procedure."

Допустим, я хочу отслеживать сообщения WM_KEYDOWN (monitor the message traffic in the system) и, если нужно, изменять параметры этих сообщений до того, как они будут попадать в соответствующие оконные процедуры (process certain types of messages before they reach the target window procedure). Причём хочу отслеживать сообщения, отправляемые любому из потоков в системе. То есть, хочу установить глобальный хук на клавиатуру (по терминологии Microsoft).

Так вот -- если Вас не затруднит, приведите, пожалуйста, рабочее решение этой задачи с помощью глобального хука, но уже по Вашей терминологии, т.е. с помощью функции RegisterHotKey. Желаю успеха, и с нетерпением жду Вашего ответа.


 
Elen ©   (2006-06-21 11:54) [11]


> Cerberus
Глобальный хук на клавиатуру без dll.

А чем DLL мешает?


 
Rouse_ ©   (2006-06-21 13:22) [12]


> Если в Windows произойдет событие нажатия заданой клавиши,
>  
> то будет вызвана заданная процедура это и есть hook на это
> событие

Поразительно, вот уж не знал что это тоже называется хуком.
Рихтер нервно курит в сторонке :)


 
programania ©   (2006-06-21 19:36) [13]

>begin...end ©   (20.06.06 21:53) [10]

К сожалению мне пока не требовалось решать такие задачи
да я и не понял что вам еще конкретно нужно
возможно вы не знаете как передать перехваченное
нажатие активному окну, так это можно сделать примерно так
SendMessage(GetForegroundWindow,WM_CHAR,wparam,0);
однако мне кажется что вы и сами прекрасно разберетесь


 
Yanis ©   (2006-06-21 19:45) [14]


> возможно вы не знаете как передать перехваченное
> нажатие активному окну

:D


 
begin...end ©   (2006-06-21 22:35) [15]

> programania ©   (21.06.06 19:36) [13]

> К сожалению мне пока не требовалось решать такие задачи

К сожалению, это типичная задача, для которой используются ловушки. Непонятно, почему Вы считаете возможным давать советы, не имея опыта решения даже типичных задач по теме вопроса.

> да я и не понял что вам еще конкретно нужно

Странно. По-моему, в [10] задание сформулировано достаточно чётко: перехватывать WM_KEYDOWN до того, как оно попадёт в оконную процедуру.

> возможно вы не знаете как передать перехваченное
> нажатие активному окну, так это можно сделать примерно так
> SendMessage(GetForegroundWindow,WM_CHAR,wparam,0);

Спасибо, но с тем, как послать сообщение окну, я, слава Аллаху, знаком. Правда, непонятно, зачем перехваченное нажатие куда-то посылать -- при использовании хука оно само дойдёт туда, куда надо (после того, как на него посмотрят внутри функций цепочки ловушек).

> однако мне кажется что вы и сами прекрасно разберетесь

К сожалению, Вы ошибаетесь. Без Вас разобраться в том, как можно функцией RegisterHotKey установить глобальный хук на клавиатуру, мне вряд ли удастся. Поэтому всё же хотелось бы увидеть решение задачи -- думаю, оно будет интересно не только мне.

Впрочем, решение можно и не приводить, а вместо этого согласиться с тем, что RegisterHotKey к установке глобальных клавиатурных хуков отношения не имеет. И извиниться перед автором вопроса за то, что Вы ввели его в заблуждение. После этого тема будет исчерпана.

Жду ответа.


 
ors_archangel ©   (2006-06-22 16:24) [16]

Надо AttachThreadInput попробовать, чёрт, у меня щас delphi нет под рукой!!!


 
begin...end ©   (2006-06-22 18:43) [17]

> ors_archangel ©   (22.06.06 16:24) [16]

Надеюсь, Вас тоже не затруднит привести рабочий пример установки ГЛОБАЛЬНОГО хука с помощью AttachThreadInput.


 
programania ©   (2006-06-22 19:26) [18]

>begin...end ©   (21.06.06 22:35) [15]
>К сожалению, это типичная задача, для которой используются ловушки.

Совершенно верно,
я думаю что создав SetWindowsHookEX ее создатели ужаснулись
делу рук своих и решили что американский человек никогда этого не поймет и
поэтому для самого типового использования ловушек и создали RegisterHotKey
спрятав все хуки внутрь что вас и смутило

>перехватывать WM_KEYDOWN до того, как оно попадёт в оконную процедуру.

при использовании RegisterHotKey, WM_KEYDOWN вообще не попадает
в процедуру активного окна, а только в процедуру окна указаного при регистрации
поэтому я и решил что вам нужно все-таки передать в активное окно

>Правда, непонятно, зачем перехваченное нажатие куда-то посылать
>-- при использовании хука оно само дойдёт туда, куда надо

Так вы же просили: "т.е. с помощью функции RegisterHotKey." [10]

>а вместо этого согласиться с тем, что RegisterHotKey к установке
>глобальных клавиатурных хуков отношения не имеет

Тут я могу согласиться что RegisterHotKey не так универсальна как SetWindowsHookEX
и можете называть ее как хотите, но она решает ту же задачу для клавиатуры проще
и не требует dll что и нужно для решения вопроса темы

>ors_archangel ©   (22.06.06 16:24) [16]
Надо AttachThreadInput попробовать, чёрт, у меня щас delphi нет под рукой!!!

После AttachThreadInput программа конечно будет получать все нажатия
но только потому что получит фокус, а для клавиатурного шпиона это недопустимо


 
begin...end ©   (2006-06-22 20:05) [19]

> programania ©   (22.06.06 19:26) [18]

> RegisterHotKey не так универсальна как SetWindowsHookEX
> и можете называть ее как хотите, но она решает ту же задачу
> для клавиатуры проще

Какую "ту же задачу"? Я в [10] попросил Вас решить задачу, а в [15] повторил просьбу. Могу повторить условие ещё раз: перехватывать ВСЕ сообщения WM_KEYDOWN до того, как они попадут в целевые оконные процедуры.

Вы только что (в [18]) согласились с тем, что эта задача -- типичная для использования хуков. Ранее (в [7] и [9]) Вы утверждали, что установить глобальный хук можно функцией RegisterHotKey.

Получается, что задачу, о которой я говорю, можно решить за счёт этой функции. Так Вы можете решить её, или нет? Жду ответа.


 
programania ©   (2006-06-22 21:39) [20]

>begin...end ©   (22.06.06 20:05) [19]
>Так Вы можете решить её, или нет?

Могу,
причем именно до того, как они попадут в целевые оконные процедуры
и хотя не уверен насчет всех сообщений,
но те что получает FormKeyDown доходят, а другие вряд ли кому нужны
и имеено глобально: например я это это использовал для регулировки
громкости своего плеера и захвата экрана во время Direct3D и OpenGL игр
а если нужно обработать и передать дальше так вы и сами знаете как
и можете не считать это глобальным хуком, но это работает
и пора бы и вам предложить свое решение без dll


 
begin...end ©   (2006-06-22 22:23) [21]

> programania ©   (22.06.06 21:39) [20]

> Могу

Тогда приведите его, пожалуйста. Причём именно такое решение, в котором ловушка устанавливается функцией RegisterHotKey. И решение именно задачи, поставленной в [19], а не какой-либо другой.

> и хотя не уверен насчет всех сообщений,
> но те что получает FormKeyDown доходят

Это плохо. Если Ваша "ловушка" заведомо будет получать НЕ ВСЕ сообщения, а только те, которые посылаются одному-единственному окну, то это уже будет совсем НЕ ГЛОБАЛЬНАЯ ловушка.

> и пора бы и вам предложить свое решение без dll

Что ж, пожалуй, действительно, пора. Собственно, направление для поиска я дал ещё в [6]. А конкретный код может быть таким:

type
 TTestForm = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   Hook: HHOOK;
 end;

var
 TestForm: TTestForm;

function HookProc(nCode, wParam, lParam: Integer): LRESULT; stdcall;
type
 PKBDLLHookStruct = ^TKBDLLHookStruct;
 TKBDLLHookStruct = packed record
   vkCode, scanCode, flags, time: Cardinal;
   dwExtraInfo: PCardinal;
 end;
const
 MsgNames: array [0..4] of string =
   ("UNKNOWN", "WM_KEYDOWN", "WM_KEYUP", "WM_SYSKEYDOWN", "WM_SYSKEYUP");
var
 I: Integer;
begin
 if nCode = HC_ACTION then
 begin
   case WParam of
     WM_KEYDOWN:     I := 1;
     WM_KEYUP:       I := 2;
     WM_SYSKEYDOWN:  I := 3;
     WM_SYSKEYUP:    I := 4;
   else
     I := 0
   end;
   with PKBDLLHookStruct(lParam)^ do
     TestForm.Caption := Format("Message: %s  Virtual code: %d  Scan code: %d", [MsgNames[I], vkCode, scanCode])
 end;
 Result := CallNextHookEx(0, nCode, wParam, lParam)
end;

procedure TTestForm.FormCreate(Sender: TObject);
const
 WH_KEYBOARD_LL = 13;
begin
 Hook := SetWindowsHookEx(WH_KEYBOARD_LL, @HookProc, HInstance, 0)
end;

procedure TTestForm.FormDestroy(Sender: TObject);
begin
 UnhookWindowsHookEx(Hook)
end;


P.S. Всё же не теряю надежды на то, что увижу Ваше решение.


 
Leonid Troyanovsky ©   (2006-06-22 22:32) [22]


> programania ©   (22.06.06 21:39) [20]

> и можете не считать это глобальным хуком, но это работает


А можно мы будем звать оное по-старинке, т.е. aka hot key?
Заранее благодарны.


> и пора бы и вам предложить свое решение без dll


И почему, собс-но, пора?
Хотя, все уже украдено до нас: http://www.msdn.microsoft.com

--
Regards, LVT.


 
ANB ©   (2006-06-23 09:26) [23]

Глобальные низкоуровневые хуки на клавиатуру и мышу можно ставить прямо из своего экзешника. Пример есть MSDN, а подробности можно почитать в Рихтере (хорошо, что он есть на русском).


 
Игорь Шевченко ©   (2006-06-23 09:53) [24]


> я думаю что создав SetWindowsHookEX ее создатели ужаснулись
> делу рук своих и решили что американский человек никогда
> этого не поймет и
> поэтому для самого типового использования ловушек и создали
> RegisterHotKey
> спрятав все хуки внутрь что вас и смутило


Дорогой друг, убедительная просьба рассказывать подобные сказки в другой аудитории. Совет такой добрый.


 
Rouse_ ©   (2006-06-23 13:37) [25]

Нет, вы погодите, я все-же хочу увидеть это чудо:

> Могу,
> причем именно до того, как они попадут в целевые оконные
> процедуры
> и хотя не уверен насчет всех сообщений,

Дерзай programania :)


 
programania ©   (2006-06-23 19:44) [26]

> begin...end ©   (22.06.06 22:23) [21]

Спасибо за пример
Лучше бы его привести сразу в [6] раз это так просто
ведь не все понимают ваши намеки
тем более что WH_KEYBOARD_LL у меня в D5 нет и
видно вы описали ее только чтоб оправдать свой намек

>Тогда приведите его, пожалуйста

так я уже привел все что мог и обьяснил что
это вполне подходит для типовых случаев

>Если Ваша "ловушка" заведомо будет получать НЕ ВСЕ сообщения,
>а только те, которые посылаются одному-единственному окну,
>то это уже будет совсем НЕ ГЛОБАЛЬНАЯ ловушка.

так и в вашем примере все сообщения получает одно окно TestForm
и уже потом посылает другим - CallNextHookEx
а у меня - SendMessage(GetForegroundWindow

>Игорь Шевченко ©   (23.06.06 09:53) [24]
>Дорогой друг, убедительная просьба рассказывать подобные сказки в другой аудитории.

Спасибо за совет Дорогой друг, я думал это форум для всех
И как же в вашей аудитории обьясняют наличие функции RegisterHotKey,
дублирующей SetWindowsHookEX,  наверно так: "пути господни неисповедимы"

>Rouse_ ©   (23.06.06 13:37) [25]

Похоже кроме меня никто не использовал RegisterHotKey
так повторяю: назначенные клавиши вообще никогда не попадут
в целевые оконные процедуры активного окна ни до ни после
кто не верит может испытать программу по ссылке в [7]
и нет тут никакого чуда
просто все сделано для удобства решения типовой задачи


 
Rouse_ ©   (2006-06-23 19:52) [27]


> Похоже кроме меня никто не использовал RegisterHotKey
> так повторяю: назначенные клавиши вообще никогда не попадут
> в целевые оконные процедуры активного окна ни до ни после
> кто не верит может испытать программу по ссылке в [7]
> и нет тут никакого чуда
> просто все сделано для удобства решения типовой задачи

Молодой человек, вы не поторопились?
Давайте я переопределю задачу, поставленную begin...end чтобы вы четко поняли сам механизм.
Задача звучит так: При запуске нашей програмы предотвратить ввод данных в окно любого приложения до тех пор, пока не будет набранна комбинация "qwe" без кавычек в этом окне.

Вперед любезный...

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


 
Leonid Troyanovsky ©   (2006-06-23 19:53) [28]


> programania ©   (23.06.06 19:44) [26]

> тем более что WH_KEYBOARD_LL у меня в D5 нет и


Дык, оно есть в NT4SP3+, о чем уж, вроде, говорилось.
Дельфи тут вовсе ни причем.

--
Regards, LVT.


 
Игорь Шевченко ©   (2006-06-23 19:57) [29]


> И как же в вашей аудитории обьясняют наличие функции RegisterHotKey,
>
> дублирующей SetWindowsHookEX,  наверно так: "пути господни
> неисповедимы"


функция registerhotkey никоим образом не дублирует SetWindowsHookEx. Давайте так договоримся, вы немножко матчасть подучите, а потом мы с вами с удовольствием подискутируем. Просто в дискуссии хотелось бы рассчитывать на определенный уровень грамотности собеседника...

С наилучшими,


 
begin...end ©   (2006-06-23 20:45) [30]

> programania ©   (23.06.06 19:44) [26]

> Спасибо за пример
> Лучше бы его привести сразу в [6] раз это так просто
> ведь не все понимают ваши намеки

За пример -- пожалуйста. Однако право решать, когда МНЕ приводить СВОИ примеры (которых я никому не обещал), оставьте, пожалуйста, за МНОЙ. И мой "намёк" в [6] был вполне конкретен: поиск в MSDN по указанному ключевому слову даёт хорошие результаты, в которых остаётся лишь вдумчиво разобраться.

> тем более что WH_KEYBOARD_LL у меня в D5 нет

Вы будете смеяться, но у меня в D7 его тоже нет. Что, однако, не помешало мне написать рабочий пример. Ибо дело, как уже замечено в [28], совсем не в Delphi.

> видно вы описали ее только чтоб оправдать свой намек

Я описал эту константу для того, чтобы написать рабочий пример в виде нормально читаемого кода. Если Вы считаете, что я, приводя пример, перед кем-то оправдывался, то это Ваши проблемы.

> так и в вашем примере все сообщения получает одно окно TestForm

В моём примере ВСЕ сообщения WM_KEYDOWN (предназначенные ЛЮБОМУ из потоков в системе) получает функция ловушки HookProc (на то она, ловушка, и ГЛОБАЛЬНАЯ). Потом эти  сообщения уходят туда, куда они изначально направлялись -- в данном случае функция хука этому не мешает. А форма TestForm в примере используется лишь для демонстрации результата, и её можно было вообще выкинуть из кода -- сама ловушка от этого не стала бы работать хуже.

> так я уже привел все что мог и обьяснил что
> это вполне подходит для типовых случаев

Э... нет, уважаемый, так дело не пойдёт. Я в [19] сформулировал КОНКРЕТНУЮ задачу? Сформулировал. Вы в [20] сказали, что МОЖЕТЕ решить эту КОНКРЕТНУЮ задачу функцией RegisterHotKey? Сказали.

Однако пока что Вашего решения я не увидел. В чём же дело?

Поскольку у нас в форуме за свои слова принято отвечать (см. правила), повторю свою просьбу в N-й раз: приведите, пожалуйста, решение этой конкретной задачи (которая представляет собой установку глобального хука) своим способом, тем самым подтвердив своё заявление о том, что функцию RegisterHotKey можно использовать для установки этого самого глобального хука. Или, если у Вас нет решения и Вы не можете его написать, извинитесь перед автором темы.

> и уже потом посылает другим - CallNextHookEx

Функция CallNextHookEx никаким окнам (в том числе и "другим") никаких сообщений не посылает. Похоже, следует прислушаться к [29].

Жду ответа. Желательно в виде рабочего кода (причём по теме), а не слов (причём не по теме).


 
programania ©   (2006-06-24 02:43) [31]

>Rouse_ ©   (23.06.06 19:52) [27]
>Вперед любезный...
>begin...end ©   (23.06.06 20:45) [30]
>Жду ответа. Желательно в виде рабочего кода (причём по теме).

Я могу только повторить что уже писал [18]
RegisterHotKey не так универсальна как SetWindowsHookEX
и конечно можно придумать разные каверзные случаи
неподходящие для нее однако для типового применения
она вполне заменит SetWindowsHookEX для чего и предназначена
что я и предложил поскольку ничего лучше тогда еще никто не предложил
хотя и мог как оказалось и только благодаря моему упорству
удалось получить информацию полезную многим
в доступном всем виде и это главная цель форума
а все остальное никто и читать не будет


 
begin...end ©   (2006-06-24 08:25) [32]

> programania ©   (24.06.06 02:43) [31]

> Я могу только повторить что уже писал [18]

А я могу повторить то, что Вы писали в [20]: "Могу". Вы утверждали, что можете решить [19]. Так можете, или нет? Если да, приведите решение. Если нет, извинитесь. Кажется, это я уже говорил...

> конечно можно придумать разные каверзные случаи
> неподходящие для нее

В задаче [19] нет ничего каверзного. Эта задача -- типичная для применения хуков. И Вы сами с этим согласились в [18]. А если RegisterHotKey не решает даже типичных задач из этой области -- вероятно, она предназначена для чего-то другого, не правда ли?

> однако для типового применения
> она вполне заменит SetWindowsHookEX

См. выше -- [19] представляет собой типовую задачу. Однако код, решающий её с помощью SetWindowsHookEx, уже есть (см. [21]), а кода, решаающего её функцией RegisterHotKey (которая, по Вашим словам, для типовых задач вполне заменяет SetWindowsHookEx), Вы пока почему-то не привели. Так за чем же дело стало?

> что я и предложил поскольку ничего лучше тогда еще никто
> не предложил

Вы невнимательно читаете. [6] было предложено ещё до того, как Вы появились в этой ветке.

> хотя и мог как оказалось и только благодаря моему упорству
> удалось получить информацию полезную многим

LOL.

> и это главная цель форума
> а все остальное никто и читать не будет

Давайте, всё-таки, поменьше слов и побольше дела. Либо код, либо извинения.


 
programania ©   (2006-06-24 19:28) [33]

begin...end ©   (24.06.06 08:25) [32]
>Rouse_ ©   (23.06.06 19:52) [27]
> При запуске нашей програмы предотвратить ввод данных в окно любого приложения
> до тех пор, пока не будет набранна комбинация "qwe" без кавычек в этом окне.

Извините все, но при помощи RegisterHotKey эту задачу решить не могу
да и не обещал решать любые задачи
однако может намекнете как при помощи SetWindowsHookEX
предотвратить ввод ctrl+alt+del в любом окне
после чего нашу программу можно снять мышью


 
begin...end ©   (2006-06-24 19:32) [34]

> programania ©   (24.06.06 19:28) [33]

> Извините все, но при помощи RegisterHotKey эту задачу решить
> не могу

Наконец-то. Непонятно, правда, зачем в [20] нужно было говорить обратное, ну да ладно.

> однако может намекнете...

Нет, не намекну.


 
Юрий Зотов ©   (2006-06-25 12:02) [35]

> begin...end

Наслаждался...
:о)


 
programania ©   (2006-06-25 19:03) [36]

>begin...end ©   (20.06.06 21:53) [34]
>Непонятно, правда, зачем в [20] нужно было говорить обратное

в [20] я как раз и намекал на этот случай
"и хотя не уверен насчет всех сообщений,"
так оно и случилось, RegisterHotKey не устанавливается на ctrl+alt+del

>Нет, не намекну

Непонятно, правда, зачем в [10] нужно было говорить обратное, ну да ладно.

"если нужно, изменять параметры этих сообщений до того,
как они будут попадать в соответствующие оконные процедуры ...
Причём хочу отслеживать сообщения, отправляемые любому из потоков в системе."


 
Игорь Шевченко ©   (2006-06-26 10:46) [37]


> так оно и случилось, RegisterHotKey не устанавливается на
> ctrl+alt+del


Устанавливается. Только не всеми...


 
begin...end ©   (2006-06-26 13:13) [38]

> Юрий Зотов ©   (25.06.06 12:02) [35]

Чем?

> programania ©   (25.06.06 19:03) [36]

> Непонятно, правда, зачем в [10] нужно было говорить обратное,
> ну да ладно.

В [10] я не говорил обратного. А именно, я не обещал намекнуть Вам, как заблокировать CAD. Поэтому рекомендую Вам забрать свои слова обратно, пока не пришлось извиняться снова.


 
programania ©   (2006-06-26 19:33) [39]

>begin...end ©   (26.06.06 13:13) [38]
>я не обещал намекнуть Вам, как заблокировать CAD.

так я нигде и не говорил что обещали,
я имел в виду любые сообщения от клавиатуры о которых Вы сказали достаточно
если CAD не то же самое, то извините

кстати, Ваш пример в W98 вообще ничего не ловит
а мой работает нормально

>Юрий Зотов ©   (25.06.06 12:02) [35]
>Наслаждался...

Вот специально обучил своего бота отвечать на вопросы
о delphi, программах и т.п. как тут это принято
спрашивайте и наслаждайтесь
http://programania.com/pi
жду новых забавных ответов, подходящих к любому вопросу


 
begin...end ©   (2006-06-26 20:13) [40]

> programania ©   (26.06.06 19:33) [39]

Мой пример ничего не блокирует, а только показывает, как можно посмотреть на интересующие сообщения до того, как они попадут в оконные процедуры. В том числе, и на сообщения от клавиш Ctrl, Alt и Del (даже нажатых вместе).

> кстати, Ваш пример в W98 вообще ничего не ловит

Совершенно верно -- мой пример не работает в Win98. Надеюсь, что ни для кого из читающих ветку, кроме Вас, это новостью не является, ведь я сам сказал об этом ещё в [6].

> а мой работает нормально

Совершенно верно -- Ваш пример работает в Win98. Правда, к теме ветки он не имеет ни малейшего отношения.

LOL.



Страницы: 1 2 вся ветка

Текущий архив: 2007.03.11;
Скачать: CL | DM;

Наверх




Память: 0.61 MB
Время: 0.038 c
1-1168961072
AFKer
2007-01-16 18:24
2007.03.11
Вопрос по работе с TWebModule


15-1171429447
vajo
2007-02-14 08:04
2007.03.11
ICQ


4-1162469151
toboom
2006-11-02 15:05
2007.03.11
Проблема использования таймера из MMSystem


6-1159880537
Scar89
2006-10-03 17:02
2007.03.11
411 Length Required


15-1171255415
Slider007
2007-02-12 07:43
2007.03.11
С днем рождения ! 11 февраля