11using System ;
22using System . Runtime . InteropServices ;
3+ using System . Windows . Forms ;
34
45namespace ReClassNET . Core
56{
@@ -8,17 +9,58 @@ internal class InternalCoreFunctions : NativeCoreWrapper
89 [ return : MarshalAs ( UnmanagedType . I1 ) ]
910 private delegate bool DisassembleCodeDelegate ( IntPtr address , IntPtr length , IntPtr virtualAddress , out InstructionData instruction ) ;
1011
12+ [ return : MarshalAs ( UnmanagedType . I1 ) ]
13+ private delegate bool InitializeInputDelegate ( ) ;
14+
15+ [ return : MarshalAs ( UnmanagedType . I1 ) ]
16+ private delegate bool GetPressedKeysDelegate ( out IntPtr address , out int length ) ;
17+
18+ private delegate void ReleaseInputDelegate ( ) ;
19+
1120 private readonly DisassembleCodeDelegate disassembleCodeDelegate ;
1221
22+ private readonly InitializeInputDelegate initializeInputDelegate ;
23+ private readonly GetPressedKeysDelegate getPressedKeysDelegate ;
24+ private readonly ReleaseInputDelegate releaseInputDelegate ;
25+
1326 public InternalCoreFunctions ( IntPtr handle )
1427 : base ( handle )
1528 {
1629 disassembleCodeDelegate = GetFunctionDelegate < DisassembleCodeDelegate > ( handle , "DisassembleCode" ) ;
30+
31+ initializeInputDelegate = GetFunctionDelegate < InitializeInputDelegate > ( handle , "InitializeInput" ) ;
32+ getPressedKeysDelegate = GetFunctionDelegate < GetPressedKeysDelegate > ( handle , "GetPressedKeys" ) ;
33+ releaseInputDelegate = GetFunctionDelegate < ReleaseInputDelegate > ( handle , "ReleaseInput" ) ;
1734 }
1835
1936 public bool DisassembleCode ( IntPtr address , int length , IntPtr virtualAddress , out InstructionData instruction )
2037 {
2138 return disassembleCodeDelegate ( address , ( IntPtr ) length , virtualAddress , out instruction ) ;
2239 }
40+
41+ public bool InitializeInput ( )
42+ {
43+ return initializeInputDelegate ( ) ;
44+ }
45+
46+ private static readonly Keys [ ] empty = new Keys [ 0 ] ;
47+
48+ public Keys [ ] GetPressedKeys ( )
49+ {
50+ if ( ! getPressedKeysDelegate ( out var buffer , out var length ) || length == 0 )
51+ {
52+ return empty ;
53+ }
54+
55+ var keys = new int [ length ] ;
56+ Marshal . Copy ( buffer , keys , 0 , length ) ;
57+ return ( Keys [ ] ) ( object ) keys ; // Yes, it's legal...
58+ //return Array.ConvertAll(keys, k => (Keys)k);
59+ }
60+
61+ public void ReleaseInput ( )
62+ {
63+ releaseInputDelegate ( ) ;
64+ }
2365 }
2466}
0 commit comments