@@ -12,7 +12,7 @@ use std::char::from_u32;
12
12
use windows:: {
13
13
core:: { BOOL , PCSTR } ,
14
14
Win32 :: {
15
- Foundation :: { CloseHandle , GetLastError , HWND , LPARAM , LRESULT , WPARAM } ,
15
+ Foundation :: { GetLastError , HWND , LPARAM , LRESULT , WPARAM } ,
16
16
Graphics :: {
17
17
Gdi :: HDC ,
18
18
OpenGL :: { glGetIntegerv, GL_VIEWPORT } ,
@@ -39,21 +39,15 @@ use super::graphics::{
39
39
} ;
40
40
use crate :: shared:: {
41
41
memory:: { MemoryManager , MEMORY_MANAGER } ,
42
- windows:: { unload_self_dll, WI_CONSOLE , WI_DETACH , WI_MODIFIERS , WI_REMAP } ,
42
+ sync:: event_listener,
43
+ windows:: { WI_CONSOLE , WI_DETACH , WI_MODIFIERS } ,
43
44
} ;
44
45
45
46
lazy_static ! {
46
47
static ref KEYBOARD_MODIFIERS : Mutex <( bool , bool , bool ) > = Mutex :: new( ( false , false , false ) ) ;
47
48
static ref LAST_CHAR : Mutex <i32 > = Mutex :: new( 0 ) ;
48
49
}
49
50
50
- pub unsafe extern "system" fn start_thread ( lparam : * mut c_void ) -> u32 {
51
- open_client_console ( ) ;
52
- hook_wndproc ( lparam as u64 ) ;
53
- hook_wgl_swap_buffers ( ) ;
54
- 0
55
- }
56
-
57
51
pub unsafe fn open_client_console ( ) {
58
52
let hwnd = GetConsoleWindow ( ) ;
59
53
if hwnd. 0 != null_mut ( ) {
@@ -149,15 +143,6 @@ unsafe extern "system" fn hooked_wndproc(
149
143
open_client_console ( ) ;
150
144
return LRESULT ( 0 ) ;
151
145
}
152
- WI_REMAP => {
153
- println ! ( "Restarting map.\r \n " ) ;
154
- let mut mem_manager = MEMORY_MANAGER . lock ( ) . unwrap ( ) ;
155
- if mem_manager. is_mapped ( ) {
156
- mem_manager. close_map ( ) ;
157
- }
158
- * mem_manager = MemoryManager :: open_map ( ) ;
159
- return LRESULT ( 0 ) ;
160
- }
161
146
WI_MODIFIERS => {
162
147
let mut modifiers = KEYBOARD_MODIFIERS . lock ( ) . unwrap ( ) ;
163
148
let ( shift, ctrl, alt) = & mut * modifiers;
@@ -194,15 +179,9 @@ unsafe extern "system" fn hooked_wndproc(
194
179
return LRESULT ( 0 ) ;
195
180
}
196
181
WI_DETACH => {
197
- let mut mem_manager = MEMORY_MANAGER . lock ( ) . unwrap ( ) ;
198
- unsafe {
199
- unhook_wgl_swap_buffers ( ) ;
200
- if mem_manager. is_mapped ( ) {
201
- mem_manager. close_map ( ) ;
202
- }
203
- unhook_wndproc ( ) ;
204
- } ;
205
- //unload_self_dll();
182
+ unhook_wgl_swap_buffers ( ) ;
183
+ unhook_wndproc ( ) ;
184
+
206
185
return LRESULT ( 0 ) ;
207
186
}
208
187
WM_KEYDOWN => {
@@ -245,7 +224,11 @@ unsafe extern "system" fn hooked_wndproc(
245
224
let x = ( lparam. 0 & 0xFFFF ) as u16 as i32 ;
246
225
let y = ( ( lparam. 0 >> 16 ) & 0xFFFF ) as u16 as i32 ;
247
226
248
- let mem_manager = MEMORY_MANAGER . lock ( ) . unwrap ( ) ;
227
+ let mem_manager = MEMORY_MANAGER
228
+ . get ( )
229
+ . expect ( "[WaspInput]: Memory manager is not initialized!\r \n " )
230
+ . lock ( )
231
+ . unwrap ( ) ;
249
232
mem_manager. set_mouse_position ( x, y) ;
250
233
251
234
WM_MOUSEMOVE
@@ -273,9 +256,11 @@ unsafe fn hook_wndproc(hwnd: u64) {
273
256
. enable ( )
274
257
. expect ( "[WaspInput]: Failed to enable WndProc hook.\r \n " ) ;
275
258
276
- ORIGINAL_WNDPROC
277
- . set ( detour)
278
- . expect ( "[WaspInput]: Failed to save original WndProc function.\r \n " ) ;
259
+ if ORIGINAL_WNDPROC . get ( ) . is_none ( ) {
260
+ ORIGINAL_WNDPROC
261
+ . set ( detour)
262
+ . expect ( "[WaspInput]: Failed to save original WndProc function.\r \n " ) ;
263
+ }
279
264
280
265
println ! ( "[WaspInput]: WndProc successfully hooked.\r \n " ) ;
281
266
}
@@ -297,7 +282,11 @@ static ORIGINAL_WGL_SWAPBUFFERS: OnceLock<GenericDetour<unsafe extern "system" f
297
282
OnceLock :: new ( ) ;
298
283
299
284
unsafe extern "system" fn hooked_wgl_swap_buffers ( hdc : HDC ) -> BOOL {
300
- let mem_manager = MEMORY_MANAGER . lock ( ) . unwrap ( ) ;
285
+ let mem_manager = MEMORY_MANAGER
286
+ . get ( )
287
+ . expect ( "[WaspInput]: Memory manager is not initialized!\r \n " )
288
+ . lock ( )
289
+ . unwrap ( ) ;
301
290
let mut viewport = [ 0 , 0 , 0 , 0 ] ;
302
291
let mouse = mem_manager. get_mouse_position ( ) ;
303
292
@@ -350,10 +339,19 @@ unsafe fn hook_wgl_swap_buffers() {
350
339
ORIGINAL_WGL_SWAPBUFFERS
351
340
. set ( detour)
352
341
. expect ( "[WaspInput]: Failed to save original wglSwapBuffers function.\r \n " ) ;
342
+
353
343
println ! ( "[WaspInput]: wglSwapBuffers successfully hooked.\r \n " ) ;
354
344
}
355
345
356
346
pub unsafe fn unhook_wgl_swap_buffers ( ) {
347
+ let mem_manager = MEMORY_MANAGER
348
+ . get ( )
349
+ . expect ( "[WaspInput]: Memory manager is not initialized!\r \n " )
350
+ . lock ( )
351
+ . unwrap ( ) ;
352
+
353
+ mem_manager. clear_overlay ( ) ;
354
+
357
355
let detour = ORIGINAL_WGL_SWAPBUFFERS
358
356
. get ( )
359
357
. expect ( "[WaspInput]: wglSwapBuffers hook not found\r \n " ) ;
@@ -364,3 +362,31 @@ pub unsafe fn unhook_wgl_swap_buffers() {
364
362
365
363
println ! ( "[WaspInput]: wglSwapBuffers successfully unhooked.\r \n " ) ;
366
364
}
365
+
366
+ //enable...
367
+ pub unsafe fn reenable_hooks ( ) {
368
+ let wgl_swapbuffers_detour = ORIGINAL_WGL_SWAPBUFFERS
369
+ . get ( )
370
+ . expect ( "[WaspInput]: wglSwapBuffers hook not found\r \n " ) ;
371
+
372
+ wgl_swapbuffers_detour
373
+ . enable ( )
374
+ . expect ( "[WaspInput]: Failed to enable wglSwapBuffers hook.\r \n " ) ;
375
+
376
+ let wndproc_detour = ORIGINAL_WNDPROC
377
+ . get ( )
378
+ . expect ( "[WaspInput]: WndProc hook not found\r \n " ) ;
379
+
380
+ wndproc_detour
381
+ . enable ( )
382
+ . expect ( "[WaspInput]: Failed to enable WndProc hook.\r \n " ) ;
383
+ }
384
+ pub unsafe extern "system" fn start ( lparam : * mut c_void ) -> u32 {
385
+ let _ = MEMORY_MANAGER . set ( Mutex :: new ( MemoryManager :: create_map ( ) ) ) ;
386
+
387
+ hook_wndproc ( lparam as u64 ) ;
388
+ hook_wgl_swap_buffers ( ) ;
389
+
390
+ event_listener ( lparam as u64 ) ;
391
+ 0
392
+ }
0 commit comments