source: trunk/src/user32/HOOK.CPP@ 46

Last change on this file since 46 was 46, checked in by sandervl, 26 years ago

* empty log message *

File size: 6.1 KB
Line 
1/*
2 * Win32 hook API functions for OS/2
3 *
4 * Copyright 1998 Sander van Leeuwen
5 *
6 *
7 * Project Odin Software License can be found in LICENSE.TXT
8 *
9 */
10#include <os2win.h>
11#include <stdarg.h>
12#include "misc.h"
13#include "hooks.h"
14
15//******************************************************************************
16//******************************************************************************
17HHOOK WIN32API SetWindowsHookExA(int idHook, HOOKPROC hkprc, HINSTANCE hmod, DWORD dwThreadId)
18{
19 HHOOK rc;
20 HOOKPROC_O32 os2hkprc;
21
22 switch(idHook) {
23 case WH_CALLWNDPROC:
24 os2hkprc = HkWindow::GetOS2Hook();
25 break;
26 case WH_CBT:
27 {
28 HkCBT *hkhook = new HkCBT(0, hkprc, hmod, dwThreadId);;
29#ifdef DEBUG
30 WriteLog("OS2SetWindowsHookExA WH_CBT %X, %X, %X, %X\n", idHook, hkprc, hmod, dwThreadId);
31#endif
32 return((HHOOK)hkhook);
33 }
34 case WH_DEBUG:
35 os2hkprc = HkDebug::GetOS2Hook();
36 break;
37 case WH_JOURNALPLAYBACK:
38 os2hkprc = HkJrnlPlayback::GetOS2Hook();
39 break;
40 case WH_JOURNALRECORD:
41 os2hkprc = HkJrnlRecord::GetOS2Hook();
42 break;
43 case WH_GETMESSAGE:
44 os2hkprc = HkGetMessage::GetOS2Hook();
45 break;
46 case WH_MOUSE:
47 os2hkprc = HkMouse::GetOS2Hook();
48 break;
49 case WH_KEYBOARD:
50 os2hkprc = HkKeyboard::GetOS2Hook();
51 break;
52 case WH_SHELL:
53 os2hkprc = HkShell::GetOS2Hook();
54 break;
55 case WH_SYSMSGFILTER:
56 os2hkprc = HkSysMsgFilter::GetOS2Hook();
57 break;
58 case WH_MSGFILTER:
59 os2hkprc = HkMsgFilter::GetOS2Hook();
60 break;
61 }
62
63 rc = O32_SetWindowsHookEx(idHook, os2hkprc, hmod, dwThreadId);
64
65 if(rc) {
66 switch(idHook) {
67 case WH_CALLWNDPROC:
68 new HkWindow(rc, hkprc, hmod, dwThreadId);
69 break;
70 case WH_CBT:
71 break;
72 case WH_DEBUG:
73 new HkDebug(rc, hkprc, hmod, dwThreadId);;
74 break;
75 case WH_JOURNALPLAYBACK:
76 new HkJrnlPlayback(rc, hkprc, hmod, dwThreadId);;
77 break;
78 case WH_JOURNALRECORD:
79 new HkJrnlRecord(rc, hkprc, hmod, dwThreadId);;
80 break;
81 case WH_GETMESSAGE:
82 new HkGetMessage(rc, hkprc, hmod, dwThreadId);;
83 break;
84 case WH_MOUSE:
85 new HkMouse(rc, hkprc, hmod, dwThreadId);;
86 break;
87 case WH_KEYBOARD:
88 new HkKeyboard(rc, hkprc, hmod, dwThreadId);;
89 break;
90 case WH_SHELL:
91 new HkShell(rc, hkprc, hmod, dwThreadId);;
92 break;
93 case WH_SYSMSGFILTER:
94 new HkSysMsgFilter(rc, hkprc, hmod, dwThreadId);;
95 break;
96 case WH_MSGFILTER:
97 new HkMsgFilter(rc, hkprc, hmod, dwThreadId);;
98 break;
99 }
100 }
101#ifdef DEBUG
102 WriteLog("OS2SetWindowsHookExA %X, %X, %X, %X, returned %X\n", idHook, hkprc, hmod, dwThreadId, rc);
103#endif
104 return(rc);
105}
106//******************************************************************************
107//******************************************************************************
108HHOOK WIN32API SetWindowsHookA(int idHook, HOOKPROC hkprc)
109{
110 HHOOK rc;
111
112 rc = SetWindowsHookExA(idHook, hkprc, NULL, 0);
113#ifdef DEBUG
114 WriteLog("OS2SetWindowsHookA %X, %X, returned %X\n", idHook, hkprc, rc);
115#endif
116 return(rc);
117}
118//******************************************************************************
119//******************************************************************************
120HHOOK WIN32API SetWindowsHookExW(int idHook, HOOKPROC hkprc, HINSTANCE hmod, DWORD dwThreadId)
121{
122#ifdef DEBUG
123 WriteLog("OS2SetWindowsHookExW\n");
124#endif
125 return(SetWindowsHookExA(idHook, hkprc, hmod, dwThreadId));
126}
127//******************************************************************************
128//******************************************************************************
129BOOL WIN32API UnhookWindowsHookEx(HHOOK hook)
130{
131#ifdef DEBUG
132 WriteLog("OS2UnhookWindowsHookEx\n");
133#endif
134
135 if(HkWindow::UnHookWindowsHook(hook) == FALSE)
136 if(HkCBT::UnHookWindowsHook(hook) == TRUE) {
137 return(TRUE);
138 }
139 else
140 if(HkGetMessage::UnHookWindowsHook(hook) == FALSE)
141 if(HkMsgFilter::UnHookWindowsHook(hook) == FALSE)
142 if(HkSysMsgFilter::UnHookWindowsHook(hook) == FALSE)
143 if(HkMouse::UnHookWindowsHook(hook) == FALSE)
144 if(HkKeyboard::UnHookWindowsHook(hook) == FALSE)
145 if(HkShell::UnHookWindowsHook(hook) == FALSE)
146 if(HkDebug::UnHookWindowsHook(hook) == FALSE)
147 if(HkJrnlPlayback::UnHookWindowsHook(hook) == FALSE)
148 if(HkJrnlRecord::UnHookWindowsHook(hook) == FALSE) {
149 dprintf(("Hook %X not found!\n", hook));
150 }
151 return O32_UnhookWindowsHookEx(hook);
152}
153//******************************************************************************
154//******************************************************************************
155BOOL WIN32API UnhookWindowsHook(int nCode, HOOKPROC hkproc)
156{
157 HHOOK hook = 0;
158
159 switch(nCode) {
160 case WH_CALLWNDPROC:
161 hook = HkWindow::FindHookProc(hkproc);
162 break;
163 case WH_CBT:
164 hook = HkCBT::FindHookProc(hkproc);
165 break;
166 case WH_DEBUG:
167 hook = HkDebug::FindHookProc(hkproc);
168 break;
169 case WH_JOURNALPLAYBACK:
170 hook = HkJrnlPlayback::FindHookProc(hkproc);
171 break;
172 case WH_JOURNALRECORD:
173 hook = HkJrnlRecord::FindHookProc(hkproc);
174 break;
175 case WH_GETMESSAGE:
176 hook = HkGetMessage::FindHookProc(hkproc);
177 break;
178 case WH_MOUSE:
179 hook = HkMouse::FindHookProc(hkproc);
180 break;
181 case WH_KEYBOARD:
182 hook = HkKeyboard::FindHookProc(hkproc);
183 break;
184 case WH_SHELL:
185 hook = HkShell::FindHookProc(hkproc);
186 break;
187 case WH_SYSMSGFILTER:
188 hook = HkSysMsgFilter::FindHookProc(hkproc);
189 break;
190 case WH_MSGFILTER:
191 hook = HkMsgFilter::FindHookProc(hkproc);
192 break;
193 }
194#ifdef DEBUG
195 WriteLog("OS2UnhookWindowsHook %X\n", hook);
196#endif
197 if(hook == 0)
198 return(FALSE);
199
200 return O32_UnhookWindowsHookEx(hook);
201}
202//******************************************************************************
203//******************************************************************************
204LRESULT WIN32API CallNextHookEx(HHOOK arg1, int arg2, WPARAM arg3, LPARAM arg4)
205{
206 HkCBT *hook;
207
208#ifdef DEBUG
209 WriteLog("OS2CallNextHookEx\n");
210#endif
211 if((hook = HkCBT::FindHook(arg1)) != NULL) {
212 return hook->CallNextHook(arg1, arg2, arg3, arg4);
213 }
214 else return O32_CallNextHookEx(arg1, arg2, arg3, arg4);
215}
216//******************************************************************************
217//******************************************************************************
Note: See TracBrowser for help on using the repository browser.