Globalny Hook dlaczego DLL?

0

Witam!
znalazłem kilka artów na temat globalnych hooków, wkazdym jest napisane ze globalne hooki musza być w pliku DLL ale w zadnym nie ma wyjasnienia dlaczego , po prostu musi hmmm, moze ktos mi wytlumaczyc dlaczego ? dla przykladu powiem ze mam hooka globalnego na klawiature ale zrobilem go w 1 exe i hook działa normalnie nie uzywalem w ogóle DLL , dlaczego to jest złe rozwiązanie ?
pozdrawiam

0

Po prostu - w aplikacji mozesz zalozyc tylko lokalnego hooka. Aby był on globalny - musi być w dll.
Czytaj więcej o globalnym hooku

//dopisane:
Przeczytaj w/w wątek

0

thx za info

ale ja juz zrobilem Globalnego Hooka w jednym EXE bez zadnego DLL i to działa dobrze tylko obawiam sie ze np moga jakies bledy wyskakiwac dlatego sie chcialem dowiedziec czy tak mozna

hooka zakładam tak

procedure startlogger;
begin
  hinstDLL := GetModuleHandle(nil);
 hhookSysMsg := SetWindowsHookEx(13, @KeyboardHookProcedure, hinstDLL, 0);
  end;
end;

i to działa bez DLL czy moge tak to zostawic czy konecznie przepisac na DLL ?

0

To nie jest kolego globalny Hook, tak mi sie wydaje, ponieważ sam sie nad tym zastanawiałem i straciłem kupe czasu nad odpowiedzią i kupa, nic. prawdopodobnie twoj globalny hook dziala tylko wtedy jesli twoja aplikacja jest aktywna a jak zleci do paska jako nieaktywna to nie będzie ci zapisywać oczekiwanych danych, mogę sie mylić ale chyba tak będzie. Masz rację nikt na tym forum nie wie dalczego musi byc w dll-u i ja też nie wiem ale jak zrobiłem globala w ddl-u to nareszcie działą jak należy i się nie wiesza jak te w programie exe wiec chyba tak musi być. :) pozdrawiam

0
Ryhvan napisał(a)

[...] Masz rację nikt na tym forum nie wie dalczego musi byc w dll-u [...]

jak to nie wie!?
przeciez Ci nav dal linka:

The reason is that global hooks are called in the context of
the hooked task. One task calling into the code of another
task is generally not permitted. If you try to set a global
hook for a hook proc within an application, the call should
fail. Windows will check the current instance (DS) of the
application making the call, and fails the hook if the instance
is not from a DLL.

naucz sie lepiej angielskiego :P

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