mirror of
https://github.com/evilC/AutoHotInterception.git
synced 2024-11-16 21:25:46 +00:00
Remove keyboard code from PollThread
This commit is contained in:
parent
187f559d02
commit
50784ea295
@ -630,96 +630,7 @@ namespace AutoHotInterception
|
||||
{
|
||||
if (i < 11)
|
||||
{
|
||||
// Keyboard
|
||||
var isMonitoredKeyboard = IsMonitoredDevice(i) == 1;
|
||||
var hasSubscription = false;
|
||||
var hasContext = ContextCallbacks.ContainsKey(i);
|
||||
|
||||
// Process any waiting input for this keyboard
|
||||
var block = false;
|
||||
// If this is not a monitored keyboard, skip.
|
||||
// This check should not really be needed as the IsMonitoredDevice() predicate should only match monitored keyboards...
|
||||
// ... but in case it does, we want to ignore this bit and pass the input through
|
||||
if (isMonitoredKeyboard)
|
||||
{
|
||||
var isKeyMapping = false; // True if this is a mapping to a single key, else it would be a mapping to a whole device
|
||||
var processedState = HelperFunctions.KeyboardStrokeToKeyboardState(stroke);
|
||||
var code = processedState.Code;
|
||||
var state = processedState.State;
|
||||
MappingOptions mapping = null;
|
||||
|
||||
if (KeyboardMappings.ContainsKey(i))
|
||||
{
|
||||
mapping = KeyboardMappings[i];
|
||||
}
|
||||
else if (KeyboardKeyMappings.ContainsKey(i) && KeyboardKeyMappings[i].ContainsKey(code))
|
||||
{
|
||||
isKeyMapping = true;
|
||||
mapping = KeyboardKeyMappings[i][code];
|
||||
}
|
||||
if (mapping != null)
|
||||
{
|
||||
// Process Subscription Mode
|
||||
|
||||
#region KeyCode, State, Extended Flag translation
|
||||
|
||||
// Begin translation of incoming key code, state, extended flag etc...
|
||||
var processMappings = true;
|
||||
|
||||
#endregion
|
||||
|
||||
if (processedState.Ignore)
|
||||
{
|
||||
// Set flag to stop Context Mode from firing
|
||||
hasSubscription = true;
|
||||
// Set flag to indicate disable mapping processing
|
||||
processMappings = false;
|
||||
}
|
||||
|
||||
// Code and state now normalized, proceed with checking for subscriptions...
|
||||
if (processMappings)
|
||||
{
|
||||
hasSubscription = true;
|
||||
|
||||
if (mapping.Block) block = true;
|
||||
if (mapping.Concurrent)
|
||||
{
|
||||
if (isKeyMapping)
|
||||
{
|
||||
ThreadPool.QueueUserWorkItem(threadProc => mapping.Callback(state));
|
||||
}
|
||||
else
|
||||
{
|
||||
ThreadPool.QueueUserWorkItem(threadProc => mapping.Callback(code, state));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isKeyMapping)
|
||||
{
|
||||
WorkerThreads[i][code]?.Actions.Add(() => mapping.Callback(state));
|
||||
}
|
||||
else
|
||||
{
|
||||
DeviceWorkerThreads[i]?.Actions.Add(() => mapping.Callback(code, state));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If the key was blocked by Subscription Mode, then move on to next key...
|
||||
if (block) continue;
|
||||
|
||||
// If this key had no subscriptions, but Context Mode is set for this keyboard...
|
||||
// ... then set the Context before sending the key
|
||||
if (!hasSubscription && hasContext) ContextCallbacks[i](1);
|
||||
|
||||
// Pass the key through to the OS.
|
||||
ManagedWrapper.Send(DeviceContext, i, ref stroke, 1);
|
||||
|
||||
// If we are processing Context Mode, then Unset the context variable after sending the key
|
||||
if (!hasSubscription && hasContext) ContextCallbacks[i](0);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user