[C++/WinAPI] HOOK bez dll

0

Witam. Od paru dni probuje zrobic globalnego hook'a w WinApi. W koncu udalo mi sie tego dokonac, jednak zeby dzialal on globalnie, to procedura przechwytujaca klawisze musi byc umieszczona w dll. Pamietam ze kiedys zrobilem hook'a w delphi bez dll, wobec tego wydaje mi sie, ze jest mozliwe ominiecie potrzeby dll.

W miedzyczasie wymyslilem zupelnie inny mechanizm dzialania. Mianowicie moj program lapal by uchwyt danego okna i wychwytywal wszystkie klawisze, ktore zostaly wcisniete na tej samej zasadzie jak mozna wykryc wcisniecie przycisku w innej aplikacji.

Pytania:

  1. Czy da sie zrobic tradycyjnego Hook'a (SetWindowsHookEx) w WinApi bez dll ?
  2. Czy moja druga koncepcja ma szanse powodzenia ?
0
  1. nie widze przeciwskazan.. setwindowhookex potrzebuje po prostu adresu funkcji, moze ona siedziec w Twoim glownym programie, nie musi w dll

  2. a czym sie rozni "wychwytywanie wszystkich klawiszy" od "wykrywania wcisniecia przycisku" ?

0
quetzalcoatl napisał(a)
  1. nie widze przeciwskazan.. setwindowhookex potrzebuje po prostu adresu funkcji, moze ona siedziec w Twoim glownym programie, nie musi w dll?

Wlasnie chodzi o to, ze sa przeciwskazania: Chodzi o to, ze jezeli funkcji ShowWindowHookEx nie umieszcze w dll (ktora pozniej "pojdzie" do user32.dll) to Hook bedzie dzialal wylacznie jezeli moj program bedzie aktywny.

quetzalcoatl napisał(a)
  1. a czym sie rozni "wychwytywanie wszystkich klawiszy" od "wykrywania wcisniecia przycisku" ?

"Wychwytywanie wszystkich klawiszy" od "wykrywania wcisniecia przycisku" rozni sie tym, ze (zle wczesniej to sformulowalem) "piszac przycisk" mialem na mysli "button". Roznica polega na tym, ze do wychwycenia klawiszy sluzy ShowWindowHookEx, natomiast do wychwycenia button'a sluzy GetMessage. w moim drugim pytaniu chodzilo mi o to, czy da sie wychwycic wcisniecie klawisza za pomoca innej funkcji niz ShowWindowHookEx (np przez GetMessage).

0
  1. nie widze przeciwskazan.. setwindowhookex potrzebuje po prostu adresu funkcji, moze ona siedziec w Twoim glownym programie, nie musi w dll
MSDN napisał(a)

The system hooks are a shared resource, and installing one affects all applications. All system hook functions must be in libraries.

Czyli: hook systemowy (gloabalny) musi byc w dll, chyba ze ma sie odnosic tylko twojego programu - bylo na forum juz setki razy.

Jezeli zalezy ci na tym, zeby program byl w jednym pliku, jedyna rzecza ktora mozesz zrobic to umieszczenie biblioteki z hookiem jako zasobu w twoim programie, wypakowywanie jej przy uruchamianiu jako pliku tymczasowego i ładowanie dynamiczne (też na forum o tym było).

0

Do przechwytywania klawiatury z mozliwoscia zmiany (WH_KEYBOARD) tylko poprzez biblioteke. Jezeli natomiast chcesz tylko przechwycic wcisniete klawisze globalnie to nie trzeba - WH_JOURNALRECORD.

0

Widzałem keylogger napisanego w assemblerze bez DLLa więc jest to możliwe. Ja sobie przypomne gdzie to znalazłem to wrzuce kod.

0

Jezeli zalezy ci na tym, zeby program byl w jednym pliku, jedyna rzecza ktora mozesz zrobic to umieszczenie biblioteki z hookiem jako zasobu w twoim programie, wypakowywanie jej przy uruchamianiu jako pliku tymczasowego i ładowanie dynamiczne (też na forum o tym było).

Nie tyle zalezy mi na tym, zeby program byl w jednym kawalku, co na tym, zeby dll'ka nie dolaczala sie do user32.dll (a tak wlasnie sie dzieje w momencie umieszczenia procedury w dll'ce).

Zamienilem WH_KEYBOARD na WH_JOURNALRECORD i wszystko dziala znakomicie (jakos wieczorem wrzuce zrodlo). Mam wprawdzie jeszcze jeden problem, ale o niego zapytam dopiero za jakis czas, jak sobie nie poradze :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1