Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.03.11;
Скачать: [xml.tar.bz2];

Вниз

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

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

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

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

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

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

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

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

LOL.


 
Elen ©   (2006-06-27 07:59) [41]

Хей Мастера! А как вам такой примерчик? :


procedure TForm1.Timer1Timer(Sender: TObject);
var i:word;
begin
for i:=0 to 255 do begin
if (GetKeyState(i)=-128) or (GetKeyState(i)=127) then begin
 memo1.Lines.Append ( chr(i));
end else
end;
end;


У кого-нибудь повернется язык назвать это глобальным перехватом?


 
Игорь Шевченко ©   (2006-06-27 10:36) [42]


> У кого-нибудь повернется язык назвать это глобальным перехватом?


А GetKeyState относится к локальной очереди потока...


 
cerber   (2006-10-28 14:37) [43]

Лови, студент!


const
 WH_KEYBOARD_LL = 13;
 WH_MOUSE_LL = 14;
 LLKHF_EXTENDED = KF_EXTENDED shr 8;
 LLKHF_INJECTED = $00000010;
 LLKHF_ALTDOWN = KF_ALTDOWN shr 8;
 LLKHF_UP = KF_UP shr 8;
 LLMHF_INJECTED = $00000001;
{ Structure used by WH_KEYBOARD_LL }
type
 tagKBDLLHOOKSTRUCT = packed record
   vkCode : DWord;
   scanCode : DWord;
   flags : DWord;
   time : DWord;
   dwExtraInfo : PDWord;
 end;
 TKBDLLHOOKSTRUCT = tagKBDLLHOOKSTRUCT;
 PKBDLLHOOKSTRUCT = ^TKBDLLHOOKSTRUCT;
{ Structure used by WH_MOUSE_LL }
 tagMSLLHOOKSTRUCT = packed record
   pt : TPoint;
   mouseData : DWord;
   flags : DWord;
   time : DWord;
   dwExtraInfo : PDWord;
 end;
 tMSLLHOOKSTRUCT = tagMSLLHOOKSTRUCT;
 PMSLLHOOKSTRUCT = ^TMSLLHOOKSTRUCT;
 Вот, например, что когда-то предлагал Джеф Рихтер для
 отключения любимых номеров (в вольном переводе):
function LowLevelKeyboardProc(nCode :Longint; awParam: WParam; alParam:
LParam): DWord; stdcall;
var
 fEatKeystroke: Boolean;
 p: PKBDLLHOOKSTRUCT;
 buf: array [0..255] of Char;
 sc: UINT;
begin
  fEatKeystroke := False;
  if (nCode = HC_ACTION) then
     case (awParam) of
      WM_KEYDOWN, WM_SYSKEYDOWN,
      WM_KEYUP, WM_SYSKEYUP:
        begin
         p := PKBDLLHOOKSTRUCT(alParam);
         fEatKeystroke :=
           ((p.vkCode = VK_TAB) and (p.flags and LLKHF_ALTDOWN <> 0)) or
           ((p.vkCode = VK_ESCAPE) and ((p.flags and LLKHF_ALTDOWN) <> 0)) or
           ((p.vkCode = VK_ESCAPE) and ((GetKeyState(VK_CONTROL) and $8000)
<>0));
        end;
      end;
  if fEatKeystroke then
    Result := 1
  else
    Result := CallNextHookEx(0, nCode, awParam, alParam);
end;
var
 hhk: HHOOK;
procedure TForm1.Button1Click(Sender: TObject);
begin
 hhk:= SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, Hinstance, 0);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
 UnHookWindowsHookEx(hhk);
end;



 
Leonid Troyanovsky ©   (2006-10-28 14:52) [44]


> cerber   (28.10.06 14:37) [43]

> Лови, студент!


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

--
Regards, LVT.


 
Psychedelic ©   (2006-10-29 00:11) [45]

Спасиб! Посмеялся хоть :))
Наивный programania и старающийся не выйти из себя begin..end


 
GrayFace ©   (2006-10-29 15:41) [46]

Еще есть WH_JOURNALRECORD.

programania ©   (20.06.06 20:30) [9]
Если в Windows произойдет событие нажатия заданой клавиши,
то будет вызвана заданная процедура это и есть hook на это событие
причем это произойдет при [b]любой[/b] активной программе
это и есть глобальный hook

В Morrowind, I of the Dragon к любым относятся? Хуки в них работают, горячие клавиши - нет. Соответственно, никаких хуков в RegisterHotKey не спрятано, оно работает по другому.
Хотя в какой-то игре и хуки не работают, поэтому я перехватывал клаву по таймеру в своей подсобной проге.

programania ©   (23.06.06 19:44) [26]
так и в вашем примере все сообщения получает одно окно TestForm
и уже потом посылает другим - CallNextHookEx
а у меня - SendMessage(GetForegroundWindow

Гы. Ну да, хуки - это, оказывается, таже окна...

Игорь Шевченко ©   (27.06.06 10:36) [42]
А GetKeyState относится к локальной очереди потока...

Но обычно он работает! В упомянутой подсобной проге вызывал по таймеру и управлял ВинАмпом и т.п. Перестает работать, например, когда установлен WH_JOURNALRECORD.


 
Gero ©   (2006-10-29 15:44) [47]

> begin...end ©

Будь самим собой, не нужно изображать из себя Юрия Зотова. Ты изменился в худшую сторону.

PS: Это никоим образом не наезд на Юрия.


 
cerber   (2006-10-29 16:31) [48]


> Leonid Troyanovsky ©   (28.10.06 14:52) [44]


Забыл скопировать:


Leonid Troyanovsky 9 Нояб. 2003 03:10
Группы новостей: fido7.ru.delphi.chainik
http://groups.google.com/group/fido7.ru.delphi.chainik/msg/ba088c4f6ad9649f
Приветствую, Denis.
LT> Установка системных WH_KEYBOARD_LL и WH_MOUSE_LL, т.е. хуков низкого
LT> уровня, не требуют библиотеки.
DVS> жаль только Delphi о них понятия не имеет.




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

Форум: "WinAPI";
Текущий архив: 2007.03.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.08 c
4-1162367202
Creative
2006-11-01 10:46
2007.03.11
Refresh Timer


1-1168784135
The X
2007-01-14 17:15
2007.03.11
Корректная работа с CHM-хелпами в Delphi5.


2-1171722811
Andrey-406
2007-02-17 17:33
2007.03.11
Сохранение-загрузка свойств формы


2-1171820032
Николай Тимофеевич
2007-02-18 20:33
2007.03.11
распределение данных


15-1171315254
ProgRAMmer Dimonych
2007-02-13 00:20
2007.03.11
Помогите найти произведение в оригинале





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский