This repository has been archived by the owner on Nov 20, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathKeysMgr.cs
113 lines (103 loc) · 3.17 KB
/
KeysMgr.cs
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
using System;
using System.Threading;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace GTAVCSMM.Helpers
{
class KeysMgr
{
// Keys holder
private Dictionary<int, Key> keys;
// Update thread
private Thread thread;
private int interval = 20; // ms
// Keys events
public delegate void KeyHandler(int Id, string Name);
public event KeyHandler KeyUpEvent;
public event KeyHandler KeyDownEvent;
// Key Up
protected void OnKeyUp(int Id, string Name)
{
if (KeyUpEvent != null)
{
KeyUpEvent(Id, Name);
}
}
// Key Down
protected void OnKeyDown(int Id, string Name)
{
if (KeyDownEvent != null)
{
KeyDownEvent(Id, Name);
}
}
// Init
public KeysMgr()
{
keys = new Dictionary<int, Key>();
thread = new Thread(new ParameterizedThreadStart(Update));
thread.Start();
}
// Add key
public void AddKey(int keyId, string keyName)
{
if (!keys.ContainsKey(keyId))
{
keys.Add(keyId, new Key(keyId, keyName));
}
}
// Add key
public void AddKey(System.Windows.Forms.Keys key)
{
int keyId = (int)key;
if (!keys.ContainsKey(keyId))
{
keys.Add(keyId, new Key(keyId, key.ToString()));
}
}
// Is Key Down
public bool IsKeyDown(int keyId)
{
Key value;
if (keys.TryGetValue(keyId, out value))
{
return value.IsKeyDown;
}
return false;
}
// Update Thread
private void Update(object sender)
{
while (true)
{
if (keys.Count > 0)
{
List<Key> keysData = new List<Key>(keys.Values);
if (keysData != null && keysData.Count > 0)
{
foreach (Key key in keysData)
{
if (Convert.ToBoolean(Manager.GetKeyState(key.Id) & Manager.KEY_PRESSED))
{
if (!key.IsKeyDown)
{
key.IsKeyDown = true;
OnKeyDown(key.Id, key.Name);
}
}
else
{
if (key.IsKeyDown)
{
key.IsKeyDown = false;
OnKeyUp(key.Id, key.Name);
}
}
}
}
}
Thread.Sleep(interval);
}
}
}
}