class= " lineNumbers " de
1 :
2 :
3 :
4 :
5 :
6 :
7 :
8 :
9 :
10 :
11 :
12 :
13 :
14 :
15 :
16 :
17 :
18 :
19 :
20 :
21 :
22 :
23 :
24 :
25 :
26 :
27 :
28 :
29 :
30 :
31 :
32 :
33 :
34 :
35 :
36 :
37 :
38 :
39 :
40 :
41 :
42 :
43 :
44 :
45 :
46 :
47 :
48 :
49 :
50 :
51 :
52 :
53 :
54 :
55 :
56 :
57 :
58 :
59 :
60 :
61 :
62 :
63 :
64 :
65 :
66 :
67 :
68 :
69 :
70 :
71 :
72 :
73 :
74 :
75 :
76 :
77 :
78 :
79 :
80 :
81 :
82 :
83 :
84 :
85 :
86 :
87 :
88 :
89 :
90 :
91 :
92 :
93 :
94 :
95 :
96 :
97 :
98 :
99 :
100 :
101 :
102 :
103 :
104 :
105 :
106 :
107 :
108 :
109 :
110 :
111 :
112 :
113 :
114 :
115 :
116 :
117 :
118 :
119 :
120 :
121 :
122 :
123 :
124 :
125 :
126 :
127 :
128 :
129 :
130 :
131 :
132 :
133 :
134 :
135 :
136 :
137 :
138 :
139 :
140 :
141 :
142 :
143 :
144 :
145 :
146 :
147 :
148 :
149 :
|
class= de
class= MatHook >library " notpretty " de l'id= " codeSnippet939335 " de = HC_ACTION de nCode) puis
commencer
Enfermer le nCode de
HCBT_CREATEWND :
commencer
hTemp : = HWND (wp) ;
FillChar (szClass, 256, 0) ;
GetClassName (hTemp, szClass, 256) ;
si (szClass = « bloc - notes ") puis
commencer
buf^.hMatWnd : = htemp ;
buf^.oldProc : = GetWindowLong (buf^.hMatWnd, GWL_WNDPROC) ;
SetWindowLong (buf^.hMatWnd, GWL_WNDPROC, nombre entier (@MatWndProc));
extrémité ;
extrémité ;
HCBT_DESTROYWND :
commencer
hTemp : = HWND (wp) ;
FillChar (szClass, 256, 0) ;
GetClassName (hTemp, szClass, 256) ;
si (szClass = « bloc - notes ") puis
commencer
SetWindowLong (buf^.hMatWnd, GWL_WNDPROC, buf^.OldProc) ;
extrémité ;
extrémité ;
extrémité ;
extrémité ;
Résultat : = CallNextHookEx (buf^.hMatHook, nCode, wp, lp) ;
excepté
Résultat : = 0 ;
extrémité ;
extrémité ;
// a installé le crochet
fonction SetHook : Booléen ; stdcall ; exportation ;
commencer
essai
Résultat : = faux ;
si (non assigné (buf)) puis
commencer
carte : = CreateFileMapping (DWord (- 1), zéro, PAGE_READWRITE, 0, SizeOf (THookRec), « HookRecMemBlock ") ;
buf : = MapViewOfFile (carte, FILE_MAP_ALL_ACCESS, 0, 0, 0) ;
buf^.hMatHook : = SetWindowsHookEx (WH_CBT, @MatHookProc, hInstance, 0) ;
Résultat : = rectifier ;
extrémité ;
excepté
Résultat : = faux ;
extrémité ;
extrémité ;
// enlève le crochet
fonction RemoveHook : Booléen ; stdcall ; exportation ;
commencer
Résultat : = faux ;
si (assigné (buf)) puis
commencer
// indiquent notre nouveau proc de wnd cesser de subclassing
// (doit être fait dans le contexte du processus de cible)
SendMessage (buf^.hMatWnd, wm_User + 1, 1, 0) ;
si (<> 0 de buf^.hMatHook) puis UnhookWindowsHookEx (buf^.hMatHook) ;
buf^.hMatHook : = 0 ;
UnmapViewOfFile (buf) ;
buf : = zéro ;
Résultat : = rectifier ;
extrémité ;
extrémité ;
Point d'entrée de DLL de //
procédé DllEntry (dwReason : DWord) ;
commencer
Enfermer le dwReason de
DLL_PROCESS_ATTACH :
commencer
si (non assigné (buf)) puis
commencer
carte : = OpenFileMapping (FILE_MAP_ALL_ACCESS, faux, « HookRecMemBlock ") ;
buf : = MapViewOfFile (carte, FILE_MAP_ALL_ACCESS, 0, 0, 0) ;
CloseHandle (carte) ;
carte : = 0 ;
extrémité ;
extrémité ;
DLL_PROCESS_DETACH :
commencer
UnmapViewOfFile (buf) ;
buf : = zéro ;
extrémité ;
extrémité ;
extrémité ;
exportations
SetHook,
RemoveHook ;
force de //
commencer
DisableThreadLibraryCalls (hInstance) ;
DllProc : = @DLLEntry ;
DllEntry (DLL_PROCESS_ATTACH) ;
extrémité.
|