mirror of
https://github.com/ayufan/steam-deck-tools.git
synced 2026-03-17 10:14:46 +01:00
Depend on GetCursorPos to detect SAS
This commit is contained in:
parent
d05cd2acd3
commit
275ce48509
|
|
@ -23,3 +23,4 @@
|
|||
- DEBUG allows to keep X360 controller always connected
|
||||
- Swap `STEAM+Menu` and `STEAM+Options`. It makes more sense to switch windows with STEAM+3 horizontal lines
|
||||
- If application is run with `-run-on-startup` it will self-set to run on system start
|
||||
- Depend on `GetCursorPos` to detect `SAS`
|
||||
|
|
|
|||
|
|
@ -41,7 +41,6 @@ namespace SteamController
|
|||
}
|
||||
|
||||
public bool RequestEnable { get; set; } = true;
|
||||
public bool KeyboardMouseValid { get; set; } = true;
|
||||
public ContextState State;
|
||||
|
||||
public event Action<Profiles.Profile> ProfileChanged;
|
||||
|
|
@ -52,6 +51,11 @@ namespace SteamController
|
|||
get { return RequestEnable; }
|
||||
}
|
||||
|
||||
public bool KeyboardMouseValid
|
||||
{
|
||||
get { return SteamController.Managers.SASManager.Valid; }
|
||||
}
|
||||
|
||||
public Profiles.Profile? CurrentProfile
|
||||
{
|
||||
get
|
||||
|
|
|
|||
|
|
@ -20,10 +20,9 @@ namespace SteamController
|
|||
items.Add("[LB]");
|
||||
if (Steam.LizardMouse)
|
||||
items.Add("[LM]");
|
||||
if (X360.Connected)
|
||||
items.Add("[X360]");
|
||||
else if (X360.Valid)
|
||||
items.Add("[no-X360]");
|
||||
|
||||
items.Add(X360.Connected ? "[X360]" : X360.Valid ? "[no-X360]" : "[inv-X360]");
|
||||
items.Add(KeyboardMouseValid ? "[KM]" : "[inv-KM]");
|
||||
|
||||
foreach (var button in Steam.AllButtons)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -86,20 +86,32 @@ namespace SteamController.Devices
|
|||
keyCodes = new Dictionary<VirtualKeyCode, DateTime>();
|
||||
}
|
||||
|
||||
private void Safe(Action action)
|
||||
{
|
||||
try
|
||||
{
|
||||
action();
|
||||
|
||||
Managers.SASManager.Valid = true;
|
||||
}
|
||||
catch (InvalidOperationException)
|
||||
{
|
||||
Managers.SASManager.Valid = false;
|
||||
}
|
||||
}
|
||||
|
||||
internal void Update()
|
||||
{
|
||||
// Key Up: it is missing now
|
||||
foreach (var keyUp in lastKeyCodes.Except(keyCodes))
|
||||
{
|
||||
try { simulator.Keyboard.KeyUp(keyUp.Key); }
|
||||
catch (InvalidOperationException) { }
|
||||
Safe(() => simulator.Keyboard.KeyUp(keyUp.Key));
|
||||
}
|
||||
|
||||
// Key Down: new keys being down
|
||||
foreach (var keyDown in keyCodes.Except(lastKeyCodes))
|
||||
{
|
||||
try { simulator.Keyboard.KeyDown(keyDown.Key); }
|
||||
catch (InvalidOperationException) { }
|
||||
Safe(() => simulator.Keyboard.KeyDown(keyDown.Key));
|
||||
}
|
||||
|
||||
// Key Repeats
|
||||
|
|
@ -109,29 +121,24 @@ namespace SteamController.Devices
|
|||
if (keyPress.Value > now)
|
||||
continue;
|
||||
|
||||
try { simulator.Keyboard.KeyPress(keyPress.Key); }
|
||||
catch (InvalidOperationException) { }
|
||||
|
||||
Safe(() => simulator.Keyboard.KeyPress(keyPress.Key));
|
||||
keyCodes[keyPress.Key] = DateTime.Now.Add(NextRepeats);
|
||||
}
|
||||
}
|
||||
|
||||
public void KeyPress(params VirtualKeyCode[] keyCodes)
|
||||
{
|
||||
try { simulator.Keyboard.KeyPress(keyCodes); }
|
||||
catch (InvalidOperationException) { }
|
||||
Safe(() => simulator.Keyboard.KeyPress(keyCodes));
|
||||
}
|
||||
|
||||
public void KeyPress(VirtualKeyCode modifierKey, params VirtualKeyCode[] keyCodes)
|
||||
{
|
||||
try { simulator.Keyboard.ModifiedKeyStroke(modifierKey, keyCodes); }
|
||||
catch (InvalidOperationException) { }
|
||||
Safe(() => simulator.Keyboard.ModifiedKeyStroke(modifierKey, keyCodes));
|
||||
}
|
||||
|
||||
public void KeyPress(IEnumerable<VirtualKeyCode> modifierKeys, params VirtualKeyCode[] keyCodes)
|
||||
{
|
||||
try { simulator.Keyboard.ModifiedKeyStroke(modifierKeys, keyCodes); }
|
||||
catch (InvalidOperationException) { }
|
||||
Safe(() => simulator.Keyboard.ModifiedKeyStroke(modifierKeys, keyCodes));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
using WindowsInput;
|
||||
using static CommonHelpers.Log;
|
||||
|
||||
namespace SteamController.Devices
|
||||
{
|
||||
|
|
@ -77,14 +76,17 @@ namespace SteamController.Devices
|
|||
{
|
||||
}
|
||||
|
||||
private void Safe(Func<bool> action)
|
||||
private void Safe(Action action)
|
||||
{
|
||||
try
|
||||
{
|
||||
action();
|
||||
|
||||
Managers.SASManager.Valid = true;
|
||||
}
|
||||
catch (InvalidOperationException)
|
||||
{
|
||||
Managers.SASManager.Valid = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -103,67 +105,55 @@ namespace SteamController.Devices
|
|||
// Mouse Up: it is missing now
|
||||
foreach (var button in lastMouseButtons.Except(mouseButtons))
|
||||
{
|
||||
Safe(() =>
|
||||
switch (button)
|
||||
{
|
||||
switch (button)
|
||||
{
|
||||
case Button.Left:
|
||||
simulator.Mouse.LeftButtonUp();
|
||||
return true;
|
||||
case Button.Left:
|
||||
Safe(() => simulator.Mouse.LeftButtonUp());
|
||||
break;
|
||||
|
||||
case Button.Right:
|
||||
simulator.Mouse.RightButtonUp();
|
||||
return true;
|
||||
case Button.Right:
|
||||
Safe(() => simulator.Mouse.RightButtonUp());
|
||||
break;
|
||||
|
||||
case Button.Middle:
|
||||
simulator.Mouse.MiddleButtonUp();
|
||||
return true;
|
||||
case Button.Middle:
|
||||
Safe(() => simulator.Mouse.MiddleButtonUp());
|
||||
break;
|
||||
|
||||
case Button.X:
|
||||
simulator.Mouse.XButtonUp(XButtonID);
|
||||
return true;
|
||||
case Button.X:
|
||||
Safe(() => simulator.Mouse.XButtonUp(XButtonID));
|
||||
break;
|
||||
|
||||
case Button.Y:
|
||||
simulator.Mouse.XButtonUp(YButtonID);
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
});
|
||||
case Button.Y:
|
||||
Safe(() => simulator.Mouse.XButtonUp(YButtonID));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Key Down: new keys being down
|
||||
foreach (var button in mouseButtons.Except(lastMouseButtons))
|
||||
{
|
||||
Safe(() =>
|
||||
switch (button)
|
||||
{
|
||||
switch (button)
|
||||
{
|
||||
case Button.Left:
|
||||
simulator.Mouse.LeftButtonDown();
|
||||
return true;
|
||||
case Button.Left:
|
||||
Safe(() => simulator.Mouse.LeftButtonDown());
|
||||
break;
|
||||
|
||||
case Button.Right:
|
||||
simulator.Mouse.RightButtonDown();
|
||||
return true;
|
||||
case Button.Right:
|
||||
Safe(() => simulator.Mouse.RightButtonDown());
|
||||
break;
|
||||
|
||||
case Button.Middle:
|
||||
simulator.Mouse.MiddleButtonDown();
|
||||
return true;
|
||||
case Button.Middle:
|
||||
Safe(() => simulator.Mouse.MiddleButtonDown());
|
||||
break;
|
||||
|
||||
case Button.X:
|
||||
simulator.Mouse.XButtonDown(XButtonID);
|
||||
return true;
|
||||
case Button.X:
|
||||
Safe(() => simulator.Mouse.XButtonDown(XButtonID));
|
||||
break;
|
||||
|
||||
case Button.Y:
|
||||
simulator.Mouse.XButtonDown(YButtonID);
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
});
|
||||
case Button.Y:
|
||||
Safe(() => simulator.Mouse.XButtonDown(YButtonID));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Move cursor
|
||||
|
|
@ -173,11 +163,7 @@ namespace SteamController.Devices
|
|||
int y = movedY.Consume();
|
||||
if (x != 0 || y != 0)
|
||||
{
|
||||
Safe(() =>
|
||||
{
|
||||
simulator.Mouse.MoveMouseBy(x, y);
|
||||
return true;
|
||||
});
|
||||
Safe(() => simulator.Mouse.MoveMouseBy(x, y));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -187,11 +173,7 @@ namespace SteamController.Devices
|
|||
int value = verticalScroll.Consume();
|
||||
if (value != 0)
|
||||
{
|
||||
Safe(() =>
|
||||
{
|
||||
simulator.Mouse.VerticalScroll(value);
|
||||
return true;
|
||||
});
|
||||
Safe(() => simulator.Mouse.VerticalScroll(value));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -200,77 +182,61 @@ namespace SteamController.Devices
|
|||
int value = horizontalScroll.Consume();
|
||||
if (value != 0)
|
||||
{
|
||||
Safe(() =>
|
||||
{
|
||||
simulator.Mouse.HorizontalScroll(value);
|
||||
return true;
|
||||
});
|
||||
Safe(() => simulator.Mouse.HorizontalScroll(value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void MouseClick(Button button)
|
||||
{
|
||||
Safe(() =>
|
||||
switch (button)
|
||||
{
|
||||
switch (button)
|
||||
{
|
||||
case Button.Left:
|
||||
simulator.Mouse.LeftButtonClick();
|
||||
return true;
|
||||
case Button.Left:
|
||||
Safe(() => simulator.Mouse.LeftButtonClick());
|
||||
break;
|
||||
|
||||
case Button.Right:
|
||||
simulator.Mouse.RightButtonClick();
|
||||
return true;
|
||||
case Button.Right:
|
||||
Safe(() => simulator.Mouse.RightButtonClick());
|
||||
break;
|
||||
|
||||
case Button.Middle:
|
||||
simulator.Mouse.MiddleButtonClick();
|
||||
return true;
|
||||
case Button.Middle:
|
||||
Safe(() => simulator.Mouse.MiddleButtonClick());
|
||||
break;
|
||||
|
||||
case Button.X:
|
||||
simulator.Mouse.XButtonClick(XButtonID);
|
||||
return true;
|
||||
case Button.X:
|
||||
Safe(() => simulator.Mouse.XButtonClick(XButtonID));
|
||||
break;
|
||||
|
||||
case Button.Y:
|
||||
simulator.Mouse.XButtonClick(YButtonID);
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
});
|
||||
case Button.Y:
|
||||
Safe(() => simulator.Mouse.XButtonClick(YButtonID));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void MouseDoubleClick(Button button)
|
||||
{
|
||||
Safe(() =>
|
||||
switch (button)
|
||||
{
|
||||
switch (button)
|
||||
{
|
||||
case Button.Left:
|
||||
simulator.Mouse.LeftButtonDoubleClick();
|
||||
return true;
|
||||
case Button.Left:
|
||||
Safe(() => simulator.Mouse.LeftButtonDoubleClick());
|
||||
break;
|
||||
|
||||
case Button.Right:
|
||||
simulator.Mouse.RightButtonDoubleClick();
|
||||
return true;
|
||||
case Button.Right:
|
||||
Safe(() => simulator.Mouse.RightButtonDoubleClick());
|
||||
break;
|
||||
|
||||
case Button.Middle:
|
||||
simulator.Mouse.MiddleButtonDoubleClick();
|
||||
return true;
|
||||
case Button.Middle:
|
||||
Safe(() => simulator.Mouse.MiddleButtonDoubleClick());
|
||||
break;
|
||||
|
||||
case Button.X:
|
||||
simulator.Mouse.XButtonDoubleClick(XButtonID);
|
||||
return true;
|
||||
case Button.X:
|
||||
Safe(() => simulator.Mouse.XButtonDoubleClick(XButtonID));
|
||||
break;
|
||||
|
||||
case Button.Y:
|
||||
simulator.Mouse.XButtonDoubleClick(YButtonID);
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
});
|
||||
case Button.Y:
|
||||
Safe(() => simulator.Mouse.XButtonDoubleClick(YButtonID));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void MoveBy(double pixelDeltaX, double pixelDeltaY)
|
||||
|
|
@ -281,11 +247,7 @@ namespace SteamController.Devices
|
|||
|
||||
public void MoveTo(double absoluteX, double absoluteY)
|
||||
{
|
||||
Safe(() =>
|
||||
{
|
||||
simulator.Mouse.MoveMouseTo(absoluteX, absoluteY);
|
||||
return true;
|
||||
});
|
||||
Safe(() => simulator.Mouse.MoveMouseTo(absoluteX, absoluteY));
|
||||
}
|
||||
|
||||
public void VerticalScroll(double scrollAmountInClicks)
|
||||
|
|
|
|||
|
|
@ -1,13 +1,25 @@
|
|||
using System.Diagnostics;
|
||||
using System.Runtime.InteropServices;
|
||||
using SteamController.Helpers;
|
||||
|
||||
namespace SteamController.Managers
|
||||
{
|
||||
public sealed class SASManager : Manager
|
||||
{
|
||||
internal static bool Valid { get; set; }
|
||||
|
||||
public override void Tick(Context context)
|
||||
{
|
||||
context.KeyboardMouseValid = ForegroundProcess.Find() is not null;
|
||||
Valid = GetCursorPos(out var _);
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct POINT
|
||||
{
|
||||
public int X, Y;
|
||||
}
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
private static extern bool GetCursorPos(out POINT lpPoint);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue