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

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

Moved new user32 here

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