diff --git a/docs/articles/overview-of-wrapper-and-api.md b/docs/articles/overview-of-wrapper-and-api.md
index f549530..a7b30c1 100644
--- a/docs/articles/overview-of-wrapper-and-api.md
+++ b/docs/articles/overview-of-wrapper-and-api.md
@@ -91,6 +91,7 @@ IMaaDisposable Derived:
| MaaDbgController.ctor() | `MaaDbgControllerCreate`
`MaaControllerAddSink` |
| MaaPlayCoverController.ctor() | `MaaPlayCoverControllerCreate`
`MaaControllerAddSink` |
| MaaGamepadController.ctor() | `MaaGamepadControllerCreate`
`MaaControllerAddSink` |
+| MaaWlRootsController.ctor() | `MaaWlRootsControllerCreate`
`MaaControllerAddSink` |
| IDisposable.Dispose() | `MaaControllerDestroy` |
| IMaaOption.SetOption() | `MaaControllerSetOption` |
| IMaaController.LinkStart() | `MaaControllerPostConnection` |
@@ -105,6 +106,7 @@ IMaaDisposable Derived:
| IMaaController.TouchUp() | `MaaControllerPostTouchUp` |
| IMaaController.Screencap() | `MaaControllerPostScreencap` |
| IMaaController.Scroll() | `MaaControllerPostScroll` |
+| IMaaController.Inactive() | `MaaControllerPostInactive` |
| IMaaController.Shell() | `MaaControllerPostShell` |
| IMaaController.GetShellOutput() | `MaaControllerGetShellOutput` |
| IMaaPost.GetStatus() | `MaaControllerStatus` |
@@ -113,6 +115,7 @@ IMaaDisposable Derived:
| IMaaController.GetCachedImage() | `MaaControllerCachedImage` |
| IMaaController.Uuid | `MaaControllerGetUuid` |
| IMaaController.GetResolution() | `MaaControllerGetResolution` |
+| IMaaController.Info | `MaaControllerGetInfo` |
| IMaaDisposableHandle.Handle | *The MaaControllerHandle.* |
## MaaTasker : IMaaTasker
diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props
index 06c12fa..7a57581 100644
--- a/src/Directory.Packages.props
+++ b/src/Directory.Packages.props
@@ -5,7 +5,7 @@
-
+
diff --git a/src/MaaFramework.Binding.Extensions/Notification/NotificationDetail.cs b/src/MaaFramework.Binding.Extensions/Notification/NotificationDetail.cs
index 5304dea..eee2e60 100644
--- a/src/MaaFramework.Binding.Extensions/Notification/NotificationDetail.cs
+++ b/src/MaaFramework.Binding.Extensions/Notification/NotificationDetail.cs
@@ -16,7 +16,8 @@ public record ControllerActionDetail(
[property: JsonPropertyName("ctrl_id")] int ControllerId,
[property: JsonPropertyName("uuid")] string Uuid,
[property: JsonPropertyName("action")] string Action,
- [property: JsonPropertyName("param")] JsonElement Param
+ [property: JsonPropertyName("param")] JsonElement Param,
+ [property: JsonPropertyName("info")] JsonElement Info
);
///
diff --git a/src/MaaFramework.Binding.Native/Interop/Framework/Instance/MaaController.cs b/src/MaaFramework.Binding.Native/Interop/Framework/Instance/MaaController.cs
index 6e0acd5..e128ac7 100644
--- a/src/MaaFramework.Binding.Native/Interop/Framework/Instance/MaaController.cs
+++ b/src/MaaFramework.Binding.Native/Interop/Framework/Instance/MaaController.cs
@@ -99,6 +99,9 @@ public static partial class MaaController
[LibraryImport("MaaFramework", StringMarshalling = StringMarshalling.Utf8)]
public static partial MaaCtrlId MaaControllerPostScroll(MaaControllerHandle ctrl, int dx, int dy);
+ [LibraryImport("MaaFramework", StringMarshalling = StringMarshalling.Utf8)]
+ public static partial MaaCtrlId MaaControllerPostInactive(MaaControllerHandle ctrl);
+
[LibraryImport("MaaFramework", StringMarshalling = StringMarshalling.Utf8)]
public static partial MaaCtrlId MaaControllerPostShell(MaaControllerHandle ctrl, string cmd, long timeout);
@@ -109,6 +112,9 @@ public static partial class MaaController
[LibraryImport("MaaFramework", StringMarshalling = StringMarshalling.Utf8)]
public static partial MaaControllerHandle MaaPlayCoverControllerCreate(string address, string uuid);
+ [LibraryImport("MaaFramework", StringMarshalling = StringMarshalling.Utf8)]
+ public static partial MaaControllerHandle MaaWlRootsControllerCreate(string wlr_socket_path);
+
///
/// Create a virtual gamepad controller for Windows.
///
@@ -154,6 +160,10 @@ public static partial class MaaController
[return: MarshalAs(UnmanagedType.U1)]
public static partial bool MaaControllerGetResolution(MaaControllerHandle ctrl, out int width, out int height);
+ [LibraryImport("MaaFramework", StringMarshalling = StringMarshalling.Utf8)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ public static partial bool MaaControllerGetInfo(MaaControllerHandle ctrl, MaaStringBufferHandle buffer);
+
[Obsolete]
[LibraryImport("MaaFramework", StringMarshalling = StringMarshalling.Utf8)]
public static partial MaaCtrlId MaaControllerPostPressKey(MaaControllerHandle ctrl, int keycode);
diff --git a/src/MaaFramework.Binding.Native/Interop/Framework/Instance/MaaCustomController.cs b/src/MaaFramework.Binding.Native/Interop/Framework/Instance/MaaCustomController.cs
index 2e6b535..db9981e 100644
--- a/src/MaaFramework.Binding.Native/Interop/Framework/Instance/MaaCustomController.cs
+++ b/src/MaaFramework.Binding.Native/Interop/Framework/Instance/MaaCustomController.cs
@@ -110,6 +110,8 @@ private sealed class Delegates(IMaaCustomController managed)
public KeyDownDelegate KeyDown = (int keycode, nint transArg) => managed.KeyDown(keycode);
public KeyUpDelegate KeyUp = (int keycode, nint transArg) => managed.KeyUp(keycode);
public ScrollDelegate Scroll = (int dx, int dy, nint transArg) => managed.Scroll(dx, dy);
+ public InactiveDelegate Inactive = (nint transArg) => managed.Inactive();
+ public GetInfoDelegate GetInfo = (nint transArg, MaaStringBufferHandle buffer) => managed.GetInfo(new MaaStringBuffer(buffer));
};
///
@@ -139,6 +141,8 @@ private sealed class Unmanaged(Delegates delegates)
public nint KeyDown = Marshal.GetFunctionPointerForDelegate(delegates.KeyDown);
public nint KeyUp = Marshal.GetFunctionPointerForDelegate(delegates.KeyUp);
public nint Scroll = Marshal.GetFunctionPointerForDelegate(delegates.Scroll);
+ public nint Inactive = Marshal.GetFunctionPointerForDelegate(delegates.Inactive);
+ public nint GetInfo = Marshal.GetFunctionPointerForDelegate(delegates.GetInfo);
}
[return: MarshalAs(UnmanagedType.U1)]
@@ -213,4 +217,12 @@ private sealed class Unmanaged(Delegates delegates)
[return: MarshalAs(UnmanagedType.U1)]
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate bool ScrollDelegate(int dx, int dy, nint transArg);
+
+ [return: MarshalAs(UnmanagedType.U1)]
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate bool InactiveDelegate(nint transArg);
+
+ [return: MarshalAs(UnmanagedType.U1)]
+ [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+ public delegate bool GetInfoDelegate(nint transArg, MaaStringBufferHandle buffer);
}
diff --git a/src/MaaFramework.Binding.Native/MaaController.cs b/src/MaaFramework.Binding.Native/MaaController.cs
index b4a693c..47766e2 100644
--- a/src/MaaFramework.Binding.Native/MaaController.cs
+++ b/src/MaaFramework.Binding.Native/MaaController.cs
@@ -196,6 +196,13 @@ public MaaJob Screencap()
public MaaJob Scroll(int dx, int dy)
=> CreateJob(MaaControllerPostScroll(Handle, dx, dy));
+ ///
+ ///
+ /// Wrapper of .
+ ///
+ public MaaJob Inactive()
+ => CreateJob(MaaControllerPostInactive(Handle));
+
///
///
/// Wrapper of .
@@ -287,4 +294,17 @@ public string? Uuid
///
public bool GetResolution(out int width, out int height)
=> MaaControllerGetResolution(Handle, out width, out height);
+
+ ///
+ ///
+ /// Wrapper of .
+ ///
+ public string? Info
+ {
+ get
+ {
+ _ = MaaStringBuffer.TryGetValue(out var info, h => MaaControllerGetInfo(Handle, h));
+ return info;
+ }
+ }
}
diff --git a/src/MaaFramework.Binding.Native/MaaController/MaaWlRootsController.cs b/src/MaaFramework.Binding.Native/MaaController/MaaWlRootsController.cs
new file mode 100644
index 0000000..881234b
--- /dev/null
+++ b/src/MaaFramework.Binding.Native/MaaController/MaaWlRootsController.cs
@@ -0,0 +1,48 @@
+using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
+using static MaaFramework.Binding.Interop.Native.MaaController;
+
+namespace MaaFramework.Binding;
+
+///
+/// A wrapper class providing a reference implementation for .
+///
+[DebuggerDisplay("{DebuggerDisplay,nq}")]
+public class MaaWlRootsController : MaaController
+{
+#pragma warning disable IDE0032 // 使用自动属性
+ private readonly string _debugWlrSocketPath;
+#pragma warning restore IDE0032 // 使用自动属性
+
+ [ExcludeFromCodeCoverage(Justification = "Debugger display.")]
+ [DebuggerBrowsable(DebuggerBrowsableState.Never)]
+ private string DebuggerDisplay => IsInvalid
+ ? $"Invalid {GetType().Name}"
+ : $"{GetType().Name} {{ WlrSocketPath = {_debugWlrSocketPath} }}";
+
+ ///
+ /// Creates a instance.
+ ///
+ /// The wayland socket path (e.g., "/run/user/1000/wayland-0").
+ /// Executes if ; otherwise, not link.
+ /// Checks LinkStart().Wait() status if ; otherwise, not check.
+ ///
+ /// Wrapper of .
+ /// This controller is designed for wlroots on Linux.
+ ///
+ ///
+ ///
+ public MaaWlRootsController(string wlrSocketPath, LinkOption link = LinkOption.Start, CheckStatusOption check = CheckStatusOption.ThrowIfNotSucceeded)
+ {
+ ArgumentException.ThrowIfNullOrEmpty(wlrSocketPath);
+
+ var handle = MaaWlRootsControllerCreate(wlrSocketPath);
+ _ = MaaControllerAddSink(handle, MaaEventCallback, (nint)MaaHandleType.Controller);
+ SetHandle(handle, needReleased: true);
+
+ _debugWlrSocketPath = wlrSocketPath;
+
+ if (link == LinkOption.Start)
+ LinkStartOnConstructed(check, wlrSocketPath);
+ }
+}
diff --git a/src/MaaFramework.Binding.UnitTests/SampleResource/model/ocr/README.md b/src/MaaFramework.Binding.UnitTests/SampleResource/a_bundle/model/ocr/README.md
similarity index 100%
rename from src/MaaFramework.Binding.UnitTests/SampleResource/model/ocr/README.md
rename to src/MaaFramework.Binding.UnitTests/SampleResource/a_bundle/model/ocr/README.md
diff --git a/src/MaaFramework.Binding.UnitTests/SampleResource/model/ocr/det.onnx b/src/MaaFramework.Binding.UnitTests/SampleResource/a_bundle/model/ocr/det.onnx
similarity index 100%
rename from src/MaaFramework.Binding.UnitTests/SampleResource/model/ocr/det.onnx
rename to src/MaaFramework.Binding.UnitTests/SampleResource/a_bundle/model/ocr/det.onnx
diff --git a/src/MaaFramework.Binding.UnitTests/SampleResource/model/ocr/keys.txt b/src/MaaFramework.Binding.UnitTests/SampleResource/a_bundle/model/ocr/keys.txt
similarity index 100%
rename from src/MaaFramework.Binding.UnitTests/SampleResource/model/ocr/keys.txt
rename to src/MaaFramework.Binding.UnitTests/SampleResource/a_bundle/model/ocr/keys.txt
diff --git a/src/MaaFramework.Binding.UnitTests/SampleResource/model/ocr/rec.onnx b/src/MaaFramework.Binding.UnitTests/SampleResource/a_bundle/model/ocr/rec.onnx
similarity index 100%
rename from src/MaaFramework.Binding.UnitTests/SampleResource/model/ocr/rec.onnx
rename to src/MaaFramework.Binding.UnitTests/SampleResource/a_bundle/model/ocr/rec.onnx
diff --git a/src/MaaFramework.Binding.UnitTests/SampleResource/pipeline/sample.json b/src/MaaFramework.Binding.UnitTests/SampleResource/a_bundle/pipeline/sample.json
similarity index 100%
rename from src/MaaFramework.Binding.UnitTests/SampleResource/pipeline/sample.json
rename to src/MaaFramework.Binding.UnitTests/SampleResource/a_bundle/pipeline/sample.json
diff --git a/src/MaaFramework.Binding.UnitTests/SampleResource/properties.json b/src/MaaFramework.Binding.UnitTests/SampleResource/properties.json
deleted file mode 100644
index bfbfe52..0000000
--- a/src/MaaFramework.Binding.UnitTests/SampleResource/properties.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "is_base": true
-}
diff --git a/src/MaaFramework.Binding.UnitTests/Test_Buffers.cs b/src/MaaFramework.Binding.UnitTests/Test_Buffers.cs
index 5a55864..c48a305 100644
--- a/src/MaaFramework.Binding.UnitTests/Test_Buffers.cs
+++ b/src/MaaFramework.Binding.UnitTests/Test_Buffers.cs
@@ -281,8 +281,8 @@ public void Test_IMaaImageBuffer(MaaTypes type, IMaaImageBuffer buffer)
CollectionAssert.AreEqual(
encodedDataArray, funcArray);
- Assert.IsTrue(img.Buffer.TryGetEncodedData(out encodedDataStream)
- && img.Buffer.TryGetEncodedData(out encodedDataSpan));
+ Assert.IsTrue(buffer.TryGetEncodedData(out encodedDataStream)
+ && buffer.TryGetEncodedData(out encodedDataSpan));
Assert.IsTrue(
MaaImageBuffer.TrySetEncodedData(encodedDataStream, handle
=> MaaImageBuffer.TryGetEncodedData(handle, out funcArray)));
diff --git a/src/MaaFramework.Binding.UnitTests/Test_Common.cs b/src/MaaFramework.Binding.UnitTests/Test_Common.cs
index 00360dc..d0cbbd2 100644
--- a/src/MaaFramework.Binding.UnitTests/Test_Common.cs
+++ b/src/MaaFramework.Binding.UnitTests/Test_Common.cs
@@ -17,10 +17,10 @@ static Common()
internal static string Address { get; set; } = string.Empty;
internal static string DebugPath { get; set; } = Path.GetFullPath("./debug");
- internal static string BundlePath { get; set; } = Path.GetFullPath("./SampleResource");
+ internal static string BundlePath { get; set; } = Path.GetFullPath("./SampleResource/a_bundle");
internal static string AgentPath { get; set; } = Path.GetFullPath($"./MaaAgentBinary");
- internal static string AdbConfig { get; set; } = File.ReadAllText(Path.GetFullPath($"{BundlePath}/controller_config.json"));
- internal static string ImagePath { get; set; } = Path.Join(BundlePath, "empty_1920x1080.png");
+ internal static string AdbConfig { get; set; } = File.ReadAllText(Path.GetFullPath($"./SampleResource/controller_config.json"));
+ internal static string ImagePath { get; set; } = Path.GetFullPath("./SampleResource/empty_1920x1080.png");
private static void InitializeInfo(TestContext testContext)
{
diff --git a/src/MaaFramework.Binding.UnitTests/Test_Custom.cs b/src/MaaFramework.Binding.UnitTests/Test_Custom.cs
index 59d40a3..fa9569e 100644
--- a/src/MaaFramework.Binding.UnitTests/Test_Custom.cs
+++ b/src/MaaFramework.Binding.UnitTests/Test_Custom.cs
@@ -1,6 +1,7 @@
using MaaFramework.Binding.Abstractions;
using MaaFramework.Binding.Buffers;
using MaaFramework.Binding.Custom;
+using System.Text.Json;
namespace MaaFramework.Binding.UnitTests;
@@ -45,11 +46,41 @@ public bool Analyze(T context, in AnalyzeArgs args, in AnalyzeResults results
Assert.AreEqual(RecognitionParam, args.RecognitionParam);
var cloneContext = (context as ICloneable).Clone() as IMaaContext;
- cloneContext = cloneContext?.Clone();
+ cloneContext = cloneContext!.Clone();
#if MAA_NATIVE
- cloneContext = (cloneContext as MaaContext)?.Clone();
+ cloneContext = (cloneContext as MaaContext)!.Clone();
#endif
Assert.IsNotNull(cloneContext);
+
+ Assert.IsFalse(
+ context.IsCancellationRequested);
+ Assert.IsTrue(
+ context.WaitFreezes(TimeSpan.FromSeconds(1)));
+
+ Assert.IsFalse(
+ context.GetAnchor(DefaultAnchorName, out var nodeName));
+ Assert.IsNull(
+ nodeName);
+ Assert.IsTrue(
+ context.SetAnchor(DefaultAnchorName, DefaultAnchorNodeName));
+ Assert.IsTrue(
+ context.GetAnchor(DefaultAnchorName, out nodeName));
+ Assert.AreEqual(
+ DefaultAnchorNodeName, nodeName);
+
+ Assert.IsNotNull(
+ context.RunTask(DefaultAnchorNodeName));
+ Assert.IsTrue(
+ context.GetHitCount(DefaultAnchorNodeName, out var hitCount));
+ Assert.AreNotEqual(
+ 0, hitCount);
+ Assert.IsTrue(
+ context.ClearHitCount(DefaultAnchorNodeName));
+ Assert.IsTrue(
+ context.GetHitCount(DefaultAnchorNodeName, out hitCount));
+ Assert.AreEqual(
+ 0, hitCount);
+
Assert.IsNull(
cloneContext.RunRecognition(DiffEntry, args.Image));
if (!context.Tasker.IsStateless)
@@ -73,6 +104,11 @@ public bool Analyze(T context, in AnalyzeArgs args, in AnalyzeResults results
recognitionDetail?.HitBox);
+ using var recoDirectDetail =
+ context.RunRecognitionDirect(RecoDirectType, RecoDirectParam, args.Image);
+ Assert.IsNotNull(
+ recoDirectDetail?.HitBox);
+
Assert.IsTrue(
cloneContext.OverridePipeline(DiffParam));
Assert.AreEqual(
@@ -90,8 +126,21 @@ public bool Analyze(T context, in AnalyzeArgs args, in AnalyzeResults results
Assert.IsTrue(
cloneContext.GetNodeData(DiffEntry, out data));
Assert.IsNotNull(data);
- Assert.IsTrue(
- data.Contains($"\"next\":[\"{DiffEntry}\"]"));
+
+ using var document = JsonDocument.Parse(data);
+ var root = document.RootElement;
+ Assert.IsTrue(root.TryGetProperty("next", out var nextElement),
+ "Expected JSON to contain a 'next' property.");
+ Assert.AreEqual(JsonValueKind.Array, nextElement.ValueKind,
+ "Expected 'next' to be a JSON array.");
+ var containsDiffEntry = nextElement
+ .EnumerateArray()
+ .Any(element =>
+ element.ValueKind == JsonValueKind.Object &&
+ element.TryGetProperty("name", out var nameProperty) &&
+ nameProperty.GetString() == DiffEntry);
+ Assert.IsTrue(containsDiffEntry,
+ $"Expected 'next' array to contain an element with name '{DiffEntry}'.");
Assert.IsTrue(
@@ -100,7 +149,7 @@ public bool Analyze(T context, in AnalyzeArgs args, in AnalyzeResults results
results.Detail.TrySetValue(recognitionDetail.Detail));
// return ret;
- // Using in assert
+ // Assert in other testings
Detail = recognitionDetail.Detail;
Box = $"{results.Box.X}{results.Box.Y}{results.Box.Width}{results.Box.Height}";
@@ -120,6 +169,21 @@ public bool Analyze(T context, in AnalyzeArgs args, in AnalyzeResults results
}
""";
+ internal const string RecoDirectType = "ColorMatch";
+ internal const string RecoDirectParam = """
+ {
+ "recognition": "ColorMatch",
+ "lower": [100, 100, 100],
+ "upper": [255, 255, 255]
+ }
+ """;
+
+ internal const string ActionDirectType = "Click";
+ internal const string ActionDirectParam = "{}";
+
+ internal const string DefaultAnchorName = "DefaultAnchorName";
+ internal const string DefaultAnchorNodeName = "EmptyNode";
+
internal sealed class TestAction : IMaaCustomAction
{
public string Name { get; set; } = nameof(TestAction);
@@ -136,6 +200,11 @@ public bool Run(T context, in RunArgs args, in RunResults results) where T :
context.RunAction(DiffEntry, args.RecognitionBox, args.RecognitionDetail.Detail, DiffParam);
Assert.IsNotNull(
actionDetail);
+
+ using var actionDirectDetail =
+ context.RunActionDirect(ActionDirectType, ActionDirectParam, args.RecognitionBox, args.RecognitionDetail.Detail);
+ Assert.IsNotNull(
+ actionDirectDetail);
return true;
}
}
@@ -232,6 +301,13 @@ public bool KeyUp(int keycode)
=> c.KeyUp(keycode).Wait().IsSucceeded();
public bool Scroll(int dx, int dy)
=> c.Scroll(dx, dy).Wait().IsSucceeded();
+ public bool Inactive()
+ => c.Inactive().Wait().IsSucceeded();
+ public bool GetInfo(IMaaStringBuffer buffer)
+ {
+ var info = c.Info;
+ return info is not null && buffer.TrySetValue(info);
+ }
}
internal sealed class TestInvalidResource : IMaaCustom
diff --git a/src/MaaFramework.Binding.UnitTests/Test_IMaaController.cs b/src/MaaFramework.Binding.UnitTests/Test_IMaaController.cs
index d30be76..32171cd 100644
--- a/src/MaaFramework.Binding.UnitTests/Test_IMaaController.cs
+++ b/src/MaaFramework.Binding.UnitTests/Test_IMaaController.cs
@@ -364,20 +364,33 @@ public void Interface_Uuid(MaaTypes type, IMaaController maaController)
}
[TestMethod]
- [MaaData(MaaTypes.All, nameof(Data), true, "echo hello", 20000)]
- public void Interface_Shell_ShellOutput(MaaTypes type, IMaaController maaController, bool assertSuccess, string cmd, long timeout)
+ [MaaData(MaaTypes.All, nameof(Data), "echo hello", 20000)]
+ public void Interface_Shell_ShellOutput(MaaTypes type, IMaaController maaController, string cmd, long timeout)
{
Assert.IsNotNull(maaController);
var job = maaController.Shell(cmd, timeout);
- Interface_IMaaPost(assertSuccess, job);
+ if (maaController is MaaAdbController)
+ {
+ Interface_IMaaPost_Success(job);
- Assert.IsTrue(
- maaController.GetShellOutput(out var output));
- Assert.IsNotNull(
- output);
- Assert.Contains(
- "hello", output);
+ Assert.IsTrue(
+ maaController.GetShellOutput(out var output));
+ Assert.IsNotNull(
+ output);
+ Assert.Contains(
+ "hello", output);
+ }
+ else
+ {
+ Interface_IMaaPost_Failed(job);
+ Assert.IsTrue(
+ maaController.GetShellOutput(out var output));
+ Assert.IsNotNull(
+ output);
+ Assert.AreEqual(
+ string.Empty, output);
+ }
}
#region Invalid data tests
diff --git a/src/MaaFramework.Binding.UnitTests/Test_IMaaResource.cs b/src/MaaFramework.Binding.UnitTests/Test_IMaaResource.cs
index aefe178..6b19edb 100644
--- a/src/MaaFramework.Binding.UnitTests/Test_IMaaResource.cs
+++ b/src/MaaFramework.Binding.UnitTests/Test_IMaaResource.cs
@@ -1,6 +1,7 @@
using MaaFramework.Binding.Abstractions;
using MaaFramework.Binding.Buffers;
using MaaFramework.Binding.Notification;
+using System.Text.Json;
namespace MaaFramework.Binding.UnitTests;
@@ -126,11 +127,22 @@ public void Interface_OverridePipeline_OverrideNext_GetNodeData(MaaTypes type, I
maaResource.OverrideNext(DiffEntry, [DiffEntry]));
Assert.IsTrue(
maaResource.GetNodeData(DiffEntry, out var data));
-
- Assert.IsNotNull(
- data);
- Assert.IsTrue(
- data.Contains($"\"next\":[\"{DiffEntry}\"]"));
+ Assert.IsNotNull(data);
+
+ using var document = JsonDocument.Parse(data);
+ var root = document.RootElement;
+ Assert.IsTrue(root.TryGetProperty("next", out var nextElement),
+ "Expected JSON to contain a 'next' property.");
+ Assert.AreEqual(JsonValueKind.Array, nextElement.ValueKind,
+ "Expected 'next' to be a JSON array.");
+ var containsDiffEntry = nextElement
+ .EnumerateArray()
+ .Any(element =>
+ element.ValueKind == JsonValueKind.Object &&
+ element.TryGetProperty("name", out var nameProperty) &&
+ nameProperty.GetString() == DiffEntry);
+ Assert.IsTrue(containsDiffEntry,
+ $"Expected 'next' array to contain an element with name '{DiffEntry}'.");
}
[TestMethod]
diff --git a/src/MaaFramework.Binding.UnitTests/packages.lock.json b/src/MaaFramework.Binding.UnitTests/packages.lock.json
index 6544ab4..dc3e3a7 100644
--- a/src/MaaFramework.Binding.UnitTests/packages.lock.json
+++ b/src/MaaFramework.Binding.UnitTests/packages.lock.json
@@ -45,33 +45,33 @@
},
"Maa.Framework.Runtime.linux-arm64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "WkHvm/NwCPXNu79049RC67aYTfyyQ7NejJWCKac7Tv8OB28DAbGbAovqOKHPxKP2GM8f37EJyE4Sur32DMB8ZA=="
+ "resolved": "5.8.1",
+ "contentHash": "ZmGWlMnxFLQ3IQPRJ2ivgPu09ufFp4x3hRD4gQmB7SShNHa5RXDCDp+Iih6W+5v1SY+1sq3xLbD0yiMAzsAcZg=="
},
"Maa.Framework.Runtime.linux-x64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "5C761AldXHPliilRMMmXA3c9ojxYhtIvFZ21RYBuT9E3tVQUO51WIVfHpDpyArvoaSMKfe/qXZNG4toeE9K/Qw=="
+ "resolved": "5.8.1",
+ "contentHash": "5OfYvM3DKUqO567Rbsw1vXSdeVHykG4c8kGH37i2etbNBCRkBrsgYCtAFldHQryZGMcC8WKwnCg7wE4RbZCRGg=="
},
"Maa.Framework.Runtime.osx-arm64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "tMr6B3uNlD/dbjfC8Ac9VQWE2xJfTHQyqAIyD5HWxam6qiFjcsa1JVj53gMhf9d8+HXjx1iSmCIVIP57Mvxw4w=="
+ "resolved": "5.8.1",
+ "contentHash": "bA0TqJuJFkg7qIRyGMYpE8u1SSDOYmXgAEiF01ORP+3jgMLaUD6DtpoQoPkGrLs5AE5JDZg0soImznTJOJUZkQ=="
},
"Maa.Framework.Runtime.osx-x64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "DJFamv6Xd3DgGQg/Oig6iBLLwFVpK38Dp50CnKR7WdppnC08tq57wQuykqQOapUm/oGmLRgO8O2mlOSGcUSWkg=="
+ "resolved": "5.8.1",
+ "contentHash": "JTcAfsmGUE2FVhR3oFZe1t66W/yKQZMHkQbSA8I2FLU/irjHm6dl5LMgPEevDu9aNwpqvpZ1Mj3VxtMaTUW6PA=="
},
"Maa.Framework.Runtime.win-arm64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "vkANhfQVJJohKjgHWrFa32WDlL6OrahmvZaFquH+kvuSxihfNDS5E578iEPp012eH5DAtZYnE/KegPwcY7zuQw=="
+ "resolved": "5.8.1",
+ "contentHash": "JJm0C0bLgNCk4RMm+vytHuw9LAjhi9VXJKHYXUkSfwb06CVFyOCOBQ9IJ0y3TncoBDdMceqj4LASTVGASBzIVg=="
},
"Maa.Framework.Runtime.win-x64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "kF8895AF7im/WjsHXFUORhWub7kW4YxfS6yQ782O+YcKnTW4kYhWW2ZT4WtDI4M3SH8bcyTI5gyrZZUk7fTN2g=="
+ "resolved": "5.8.1",
+ "contentHash": "4gXP+p7xyeW2m8Og89TNJ57SaEFe1TTQ6gku/ytezhbYXxuHkb4caVcW1+uY8l7t39rwq1r0vfCAXqy8aK3pig=="
},
"Microsoft.ApplicationInsights": {
"type": "Transitive",
@@ -174,7 +174,7 @@
"type": "Project",
"dependencies": {
"Maa.Framework.Native": "[1.0.0-dev, )",
- "Maa.Framework.Runtimes": "[5.6.0, )"
+ "Maa.Framework.Runtimes": "[5.8.1, )"
}
},
"Maa.Framework.Binding": {
@@ -207,16 +207,16 @@
},
"Maa.Framework.Runtimes": {
"type": "CentralTransitive",
- "requested": "[5.6.0, )",
- "resolved": "5.6.0",
- "contentHash": "tudf2vMWH5KRGLVn+j9T6eaK1cRhjtANGnzGOaIu/v7BzDAeyaoqxJPd8DMd7FtdZNfT/6Q13j250CbuoArdag==",
+ "requested": "[5.8.1, )",
+ "resolved": "5.8.1",
+ "contentHash": "D5FxCNgUEfdKLrrSdP/cQ8AAiXwcBJsskODDTWKnZNR+QE8je5jicSRbviodE5XCmx28x4nlOK6yMayCPGen0Q==",
"dependencies": {
- "Maa.Framework.Runtime.linux-arm64": "5.6.0",
- "Maa.Framework.Runtime.linux-x64": "5.6.0",
- "Maa.Framework.Runtime.osx-arm64": "5.6.0",
- "Maa.Framework.Runtime.osx-x64": "5.6.0",
- "Maa.Framework.Runtime.win-arm64": "5.6.0",
- "Maa.Framework.Runtime.win-x64": "5.6.0"
+ "Maa.Framework.Runtime.linux-arm64": "5.8.1",
+ "Maa.Framework.Runtime.linux-x64": "5.8.1",
+ "Maa.Framework.Runtime.osx-arm64": "5.8.1",
+ "Maa.Framework.Runtime.osx-x64": "5.8.1",
+ "Maa.Framework.Runtime.win-arm64": "5.8.1",
+ "Maa.Framework.Runtime.win-x64": "5.8.1"
}
}
},
@@ -264,33 +264,33 @@
},
"Maa.Framework.Runtime.linux-arm64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "WkHvm/NwCPXNu79049RC67aYTfyyQ7NejJWCKac7Tv8OB28DAbGbAovqOKHPxKP2GM8f37EJyE4Sur32DMB8ZA=="
+ "resolved": "5.8.1",
+ "contentHash": "ZmGWlMnxFLQ3IQPRJ2ivgPu09ufFp4x3hRD4gQmB7SShNHa5RXDCDp+Iih6W+5v1SY+1sq3xLbD0yiMAzsAcZg=="
},
"Maa.Framework.Runtime.linux-x64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "5C761AldXHPliilRMMmXA3c9ojxYhtIvFZ21RYBuT9E3tVQUO51WIVfHpDpyArvoaSMKfe/qXZNG4toeE9K/Qw=="
+ "resolved": "5.8.1",
+ "contentHash": "5OfYvM3DKUqO567Rbsw1vXSdeVHykG4c8kGH37i2etbNBCRkBrsgYCtAFldHQryZGMcC8WKwnCg7wE4RbZCRGg=="
},
"Maa.Framework.Runtime.osx-arm64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "tMr6B3uNlD/dbjfC8Ac9VQWE2xJfTHQyqAIyD5HWxam6qiFjcsa1JVj53gMhf9d8+HXjx1iSmCIVIP57Mvxw4w=="
+ "resolved": "5.8.1",
+ "contentHash": "bA0TqJuJFkg7qIRyGMYpE8u1SSDOYmXgAEiF01ORP+3jgMLaUD6DtpoQoPkGrLs5AE5JDZg0soImznTJOJUZkQ=="
},
"Maa.Framework.Runtime.osx-x64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "DJFamv6Xd3DgGQg/Oig6iBLLwFVpK38Dp50CnKR7WdppnC08tq57wQuykqQOapUm/oGmLRgO8O2mlOSGcUSWkg=="
+ "resolved": "5.8.1",
+ "contentHash": "JTcAfsmGUE2FVhR3oFZe1t66W/yKQZMHkQbSA8I2FLU/irjHm6dl5LMgPEevDu9aNwpqvpZ1Mj3VxtMaTUW6PA=="
},
"Maa.Framework.Runtime.win-arm64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "vkANhfQVJJohKjgHWrFa32WDlL6OrahmvZaFquH+kvuSxihfNDS5E578iEPp012eH5DAtZYnE/KegPwcY7zuQw=="
+ "resolved": "5.8.1",
+ "contentHash": "JJm0C0bLgNCk4RMm+vytHuw9LAjhi9VXJKHYXUkSfwb06CVFyOCOBQ9IJ0y3TncoBDdMceqj4LASTVGASBzIVg=="
},
"Maa.Framework.Runtime.win-x64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "kF8895AF7im/WjsHXFUORhWub7kW4YxfS6yQ782O+YcKnTW4kYhWW2ZT4WtDI4M3SH8bcyTI5gyrZZUk7fTN2g=="
+ "resolved": "5.8.1",
+ "contentHash": "4gXP+p7xyeW2m8Og89TNJ57SaEFe1TTQ6gku/ytezhbYXxuHkb4caVcW1+uY8l7t39rwq1r0vfCAXqy8aK3pig=="
},
"Microsoft.ApplicationInsights": {
"type": "Transitive",
@@ -401,7 +401,7 @@
"type": "Project",
"dependencies": {
"Maa.Framework.Native": "[1.0.0-dev, )",
- "Maa.Framework.Runtimes": "[5.6.0, )"
+ "Maa.Framework.Runtimes": "[5.8.1, )"
}
},
"Maa.Framework.Binding": {
@@ -434,16 +434,16 @@
},
"Maa.Framework.Runtimes": {
"type": "CentralTransitive",
- "requested": "[5.6.0, )",
- "resolved": "5.6.0",
- "contentHash": "tudf2vMWH5KRGLVn+j9T6eaK1cRhjtANGnzGOaIu/v7BzDAeyaoqxJPd8DMd7FtdZNfT/6Q13j250CbuoArdag==",
+ "requested": "[5.8.1, )",
+ "resolved": "5.8.1",
+ "contentHash": "D5FxCNgUEfdKLrrSdP/cQ8AAiXwcBJsskODDTWKnZNR+QE8je5jicSRbviodE5XCmx28x4nlOK6yMayCPGen0Q==",
"dependencies": {
- "Maa.Framework.Runtime.linux-arm64": "5.6.0",
- "Maa.Framework.Runtime.linux-x64": "5.6.0",
- "Maa.Framework.Runtime.osx-arm64": "5.6.0",
- "Maa.Framework.Runtime.osx-x64": "5.6.0",
- "Maa.Framework.Runtime.win-arm64": "5.6.0",
- "Maa.Framework.Runtime.win-x64": "5.6.0"
+ "Maa.Framework.Runtime.linux-arm64": "5.8.1",
+ "Maa.Framework.Runtime.linux-x64": "5.8.1",
+ "Maa.Framework.Runtime.osx-arm64": "5.8.1",
+ "Maa.Framework.Runtime.osx-x64": "5.8.1",
+ "Maa.Framework.Runtime.win-arm64": "5.8.1",
+ "Maa.Framework.Runtime.win-x64": "5.8.1"
}
}
}
diff --git a/src/MaaFramework.Binding/Custom/IMaaCustomController.cs b/src/MaaFramework.Binding/Custom/IMaaCustomController.cs
index 2387f80..1948fee 100644
--- a/src/MaaFramework.Binding/Custom/IMaaCustomController.cs
+++ b/src/MaaFramework.Binding/Custom/IMaaCustomController.cs
@@ -35,4 +35,10 @@ public interface IMaaCustomController : IMaaCustom, IDisposable
bool KeyDown(int keycode);
bool KeyUp(int keycode);
bool Scroll(int dx, int dy);
+ bool Inactive();
+
+ ///
+ /// Optional, Write result (JSON string) to buffer.
+ ///
+ bool GetInfo(IMaaStringBuffer buffer);
}
diff --git a/src/MaaFramework.Binding/Enums/Controllers/Win32InputMethod.cs b/src/MaaFramework.Binding/Enums/Controllers/Win32InputMethod.cs
index 1190406..33cbfb5 100644
--- a/src/MaaFramework.Binding/Enums/Controllers/Win32InputMethod.cs
+++ b/src/MaaFramework.Binding/Enums/Controllers/Win32InputMethod.cs
@@ -17,20 +17,24 @@ namespace MaaFramework.Binding;
/// No bitwise OR, select ONE method only.
/// No default value. Client should choose one as default.
/// Different applications process input differently, there is no universal solution.
-/// | Method | Compatibility | Require Admin | Seize Mouse | Background Support | Notes |
-/// |--------------------------|---------------|---------------|--------------|--------------------|------------------------------------|
-/// | Seize | High | No | Yes | No | |
-/// | SendMessage | Medium | Maybe | No | Yes | |
-/// | PostMessage | Medium | Maybe | No | Yes | |
-/// | LegacyEvent | Low | No | Yes | No | |
-/// | PostThreadMessage | Low | Maybe | No | Yes | |
-/// | SendMessageWithCursorPos | Medium | Maybe | Briefly | Yes | Designed for apps that check real cursor position |
-/// | PostMessageWithCursorPos | Medium | Maybe | Briefly | Yes | Designed for apps that check real cursor position |
+/// | Method | Compatibility | Require Admin | Seize Mouse | Background Support | Notes |
+/// |--------------------------|---------------|---------------|--------------|--------------------|------------------------------------------|
+/// | Seize | High | No | Yes | No | |
+/// | SendMessage | Medium | Maybe | No | Yes | |
+/// | PostMessage | Medium | Maybe | No | Yes | |
+/// | LegacyEvent | Low | No | Yes | No | |
+/// | PostThreadMessage | Low | Maybe | No | Yes | |
+/// | SendMessageWithCursorPos | Medium | Maybe | Briefly | Yes | Moves cursor to target position, then restores |
+/// | PostMessageWithCursorPos | Medium | Maybe | Briefly | Yes | Moves cursor to target position, then restores |
+/// | SendMessageWithWindowPos | Medium | Maybe | No | Yes | Moves window to align target with cursor, then restores |
+/// | PostMessageWithWindowPos | Medium | Maybe | No | Yes | Moves window to align target with cursor, then restores |
/// Note:
/// - Admin rights mainly depend on the target application's privilege level.
/// If the target runs as admin, MaaFramework should also run as admin for compatibility.
/// - "WithCursorPos" methods briefly move the cursor to target position, send message,
/// then restore cursor position. This "briefly" seizes the mouse but won't block user operations.
+/// - "WithWindowPos" methods briefly move the window so the target aligns with the current cursor
+/// position, send message, then restore the window position. The cursor is not moved.
///
public enum Win32InputMethod : System.UInt64
{
@@ -42,5 +46,7 @@ public enum Win32InputMethod : System.UInt64
PostThreadMessage = (1 << 4),
SendMessageWithCursorPos = (1 << 5),
PostMessageWithCursorPos = (1 << 6),
+ SendMessageWithWindowPos = (1 << 7),
+ PostMessageWithWindowPos = (1 << 8),
}
diff --git a/src/MaaFramework.Binding/Enums/Controllers/Win32ScreencapMethod.cs b/src/MaaFramework.Binding/Enums/Controllers/Win32ScreencapMethod.cs
index 63a9bfe..0995c18 100644
--- a/src/MaaFramework.Binding/Enums/Controllers/Win32ScreencapMethod.cs
+++ b/src/MaaFramework.Binding/Enums/Controllers/Win32ScreencapMethod.cs
@@ -25,7 +25,10 @@ namespace MaaFramework.Binding;
/// | DXGI_DesktopDup_Window | Very Fast | Low | No | No | Desktop duplication then crop |
/// | PrintWindow | Medium | Medium | No | Yes | |
/// | ScreenDC | Fast | High | No | No | |
-/// Note: When a window is minimized on Windows, all screencap methods will fail. Avoid minimizing the target window.
+/// Note: FramePool and PrintWindow support pseudo-minimize — when the target window
+/// is minimized, they make it transparent and click-through, then restore it without
+/// activation, allowing screencap to continue without disturbing the user.
+/// Other screencap methods will fail when the target window is minimized.
///
public enum Win32ScreencapMethod : System.UInt64
{
diff --git a/src/MaaFramework.Binding/IMaaController.cs b/src/MaaFramework.Binding/IMaaController.cs
index 2a5a776..0f11c6b 100644
--- a/src/MaaFramework.Binding/IMaaController.cs
+++ b/src/MaaFramework.Binding/IMaaController.cs
@@ -154,6 +154,17 @@ public interface IMaaController : IMaaCommon, IMaaOption, IMaa
///
MaaJob Scroll(int dx, int dy);
+ ///
+ /// Appends a job for inactive action.
+ ///
+ /// An inactive action .
+ ///
+ /// For Win32 controllers, this restores window position (removes topmost) and unblocks user input.
+ /// For other controllers, this is a no-op that always succeeds.
+ ///
+ ///
+ MaaJob Inactive();
+
///
/// Appends a job for shell command action.
///
@@ -193,9 +204,9 @@ public interface IMaaController : IMaaCommon, IMaaOption, IMaa
bool GetCachedImage(IMaaImageBuffer image);
///
- /// Gets the uuid string of the .
+ /// Gets the uuid of the .
///
- /// A if the hash was successfully got; otherwise, .
+ /// A if the uuid was successfully got; otherwise, .
string? Uuid { get; }
///
@@ -210,4 +221,10 @@ public interface IMaaController : IMaaCommon, IMaaOption, IMaa
/// so its dimensions may differ from this raw resolution.
///
bool GetResolution(out int width, out int height);
+
+ ///
+ /// Gets the information of the .
+ ///
+ /// A if the information was successfully got; otherwise, .
+ string? Info { get; }
}
diff --git a/src/MaaFramework.Binding/MaaMsg.cs b/src/MaaFramework.Binding/MaaMsg.cs
index d120395..d1af735 100644
--- a/src/MaaFramework.Binding/MaaMsg.cs
+++ b/src/MaaFramework.Binding/MaaMsg.cs
@@ -12,7 +12,7 @@
namespace MaaFramework.Binding.Notification;
-// MaaApiDocument _version: (main) v5.6.0
+// MaaApiDocument _version: (main) v5.8.1
///
/// A callback consists of a message and a payload.
/// The message is a string that indicates the type of the message.
@@ -66,7 +66,7 @@ public static class Action
/// Message for the controller actions.
///
///
- /// details_json: { ctrl_id: number, uuid: string, action: string, param: object, }
+ /// details_json: { ctrl_id: number, uuid: string, action: string, param: object, info: object, }
///
public const string Starting = "Controller.Action.Starting";
@@ -74,7 +74,7 @@ public static class Action
/// Message for the controller actions.
///
///
- /// details_json: { ctrl_id: number, uuid: string, action: string, param: object, }
+ /// details_json: { ctrl_id: number, uuid: string, action: string, param: object, info: object, }
///
public const string Prefix = "Controller.Action";
@@ -82,7 +82,7 @@ public static class Action
/// Message for the controller actions.
///
///
- /// details_json: { ctrl_id: number, uuid: string, action: string, param: object, }
+ /// details_json: { ctrl_id: number, uuid: string, action: string, param: object, info: object, }
///
public const string Succeeded = "Controller.Action.Succeeded";
@@ -90,7 +90,7 @@ public static class Action
/// Message for the controller actions.
///
///
- /// details_json: { ctrl_id: number, uuid: string, action: string, param: object, }
+ /// details_json: { ctrl_id: number, uuid: string, action: string, param: object, info: object, }
///
public const string Failed = "Controller.Action.Failed";
diff --git a/src/MaaFramework/packages.lock.json b/src/MaaFramework/packages.lock.json
index 799cd4d..33e8ad8 100644
--- a/src/MaaFramework/packages.lock.json
+++ b/src/MaaFramework/packages.lock.json
@@ -4,16 +4,16 @@
"net7.0": {
"Maa.Framework.Runtimes": {
"type": "Direct",
- "requested": "[5.6.0, )",
- "resolved": "5.6.0",
- "contentHash": "tudf2vMWH5KRGLVn+j9T6eaK1cRhjtANGnzGOaIu/v7BzDAeyaoqxJPd8DMd7FtdZNfT/6Q13j250CbuoArdag==",
+ "requested": "[5.8.1, )",
+ "resolved": "5.8.1",
+ "contentHash": "D5FxCNgUEfdKLrrSdP/cQ8AAiXwcBJsskODDTWKnZNR+QE8je5jicSRbviodE5XCmx28x4nlOK6yMayCPGen0Q==",
"dependencies": {
- "Maa.Framework.Runtime.linux-arm64": "5.6.0",
- "Maa.Framework.Runtime.linux-x64": "5.6.0",
- "Maa.Framework.Runtime.osx-arm64": "5.6.0",
- "Maa.Framework.Runtime.osx-x64": "5.6.0",
- "Maa.Framework.Runtime.win-arm64": "5.6.0",
- "Maa.Framework.Runtime.win-x64": "5.6.0"
+ "Maa.Framework.Runtime.linux-arm64": "5.8.1",
+ "Maa.Framework.Runtime.linux-x64": "5.8.1",
+ "Maa.Framework.Runtime.osx-arm64": "5.8.1",
+ "Maa.Framework.Runtime.osx-x64": "5.8.1",
+ "Maa.Framework.Runtime.win-arm64": "5.8.1",
+ "Maa.Framework.Runtime.win-x64": "5.8.1"
}
},
"SonarAnalyzer.CSharp": {
@@ -24,33 +24,33 @@
},
"Maa.Framework.Runtime.linux-arm64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "WkHvm/NwCPXNu79049RC67aYTfyyQ7NejJWCKac7Tv8OB28DAbGbAovqOKHPxKP2GM8f37EJyE4Sur32DMB8ZA=="
+ "resolved": "5.8.1",
+ "contentHash": "ZmGWlMnxFLQ3IQPRJ2ivgPu09ufFp4x3hRD4gQmB7SShNHa5RXDCDp+Iih6W+5v1SY+1sq3xLbD0yiMAzsAcZg=="
},
"Maa.Framework.Runtime.linux-x64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "5C761AldXHPliilRMMmXA3c9ojxYhtIvFZ21RYBuT9E3tVQUO51WIVfHpDpyArvoaSMKfe/qXZNG4toeE9K/Qw=="
+ "resolved": "5.8.1",
+ "contentHash": "5OfYvM3DKUqO567Rbsw1vXSdeVHykG4c8kGH37i2etbNBCRkBrsgYCtAFldHQryZGMcC8WKwnCg7wE4RbZCRGg=="
},
"Maa.Framework.Runtime.osx-arm64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "tMr6B3uNlD/dbjfC8Ac9VQWE2xJfTHQyqAIyD5HWxam6qiFjcsa1JVj53gMhf9d8+HXjx1iSmCIVIP57Mvxw4w=="
+ "resolved": "5.8.1",
+ "contentHash": "bA0TqJuJFkg7qIRyGMYpE8u1SSDOYmXgAEiF01ORP+3jgMLaUD6DtpoQoPkGrLs5AE5JDZg0soImznTJOJUZkQ=="
},
"Maa.Framework.Runtime.osx-x64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "DJFamv6Xd3DgGQg/Oig6iBLLwFVpK38Dp50CnKR7WdppnC08tq57wQuykqQOapUm/oGmLRgO8O2mlOSGcUSWkg=="
+ "resolved": "5.8.1",
+ "contentHash": "JTcAfsmGUE2FVhR3oFZe1t66W/yKQZMHkQbSA8I2FLU/irjHm6dl5LMgPEevDu9aNwpqvpZ1Mj3VxtMaTUW6PA=="
},
"Maa.Framework.Runtime.win-arm64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "vkANhfQVJJohKjgHWrFa32WDlL6OrahmvZaFquH+kvuSxihfNDS5E578iEPp012eH5DAtZYnE/KegPwcY7zuQw=="
+ "resolved": "5.8.1",
+ "contentHash": "JJm0C0bLgNCk4RMm+vytHuw9LAjhi9VXJKHYXUkSfwb06CVFyOCOBQ9IJ0y3TncoBDdMceqj4LASTVGASBzIVg=="
},
"Maa.Framework.Runtime.win-x64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "kF8895AF7im/WjsHXFUORhWub7kW4YxfS6yQ782O+YcKnTW4kYhWW2ZT4WtDI4M3SH8bcyTI5gyrZZUk7fTN2g=="
+ "resolved": "5.8.1",
+ "contentHash": "4gXP+p7xyeW2m8Og89TNJ57SaEFe1TTQ6gku/ytezhbYXxuHkb4caVcW1+uY8l7t39rwq1r0vfCAXqy8aK3pig=="
},
"Maa.Framework.Binding": {
"type": "Project"
@@ -78,16 +78,16 @@
"net9.0": {
"Maa.Framework.Runtimes": {
"type": "Direct",
- "requested": "[5.6.0, )",
- "resolved": "5.6.0",
- "contentHash": "tudf2vMWH5KRGLVn+j9T6eaK1cRhjtANGnzGOaIu/v7BzDAeyaoqxJPd8DMd7FtdZNfT/6Q13j250CbuoArdag==",
+ "requested": "[5.8.1, )",
+ "resolved": "5.8.1",
+ "contentHash": "D5FxCNgUEfdKLrrSdP/cQ8AAiXwcBJsskODDTWKnZNR+QE8je5jicSRbviodE5XCmx28x4nlOK6yMayCPGen0Q==",
"dependencies": {
- "Maa.Framework.Runtime.linux-arm64": "5.6.0",
- "Maa.Framework.Runtime.linux-x64": "5.6.0",
- "Maa.Framework.Runtime.osx-arm64": "5.6.0",
- "Maa.Framework.Runtime.osx-x64": "5.6.0",
- "Maa.Framework.Runtime.win-arm64": "5.6.0",
- "Maa.Framework.Runtime.win-x64": "5.6.0"
+ "Maa.Framework.Runtime.linux-arm64": "5.8.1",
+ "Maa.Framework.Runtime.linux-x64": "5.8.1",
+ "Maa.Framework.Runtime.osx-arm64": "5.8.1",
+ "Maa.Framework.Runtime.osx-x64": "5.8.1",
+ "Maa.Framework.Runtime.win-arm64": "5.8.1",
+ "Maa.Framework.Runtime.win-x64": "5.8.1"
}
},
"SonarAnalyzer.CSharp": {
@@ -98,33 +98,33 @@
},
"Maa.Framework.Runtime.linux-arm64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "WkHvm/NwCPXNu79049RC67aYTfyyQ7NejJWCKac7Tv8OB28DAbGbAovqOKHPxKP2GM8f37EJyE4Sur32DMB8ZA=="
+ "resolved": "5.8.1",
+ "contentHash": "ZmGWlMnxFLQ3IQPRJ2ivgPu09ufFp4x3hRD4gQmB7SShNHa5RXDCDp+Iih6W+5v1SY+1sq3xLbD0yiMAzsAcZg=="
},
"Maa.Framework.Runtime.linux-x64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "5C761AldXHPliilRMMmXA3c9ojxYhtIvFZ21RYBuT9E3tVQUO51WIVfHpDpyArvoaSMKfe/qXZNG4toeE9K/Qw=="
+ "resolved": "5.8.1",
+ "contentHash": "5OfYvM3DKUqO567Rbsw1vXSdeVHykG4c8kGH37i2etbNBCRkBrsgYCtAFldHQryZGMcC8WKwnCg7wE4RbZCRGg=="
},
"Maa.Framework.Runtime.osx-arm64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "tMr6B3uNlD/dbjfC8Ac9VQWE2xJfTHQyqAIyD5HWxam6qiFjcsa1JVj53gMhf9d8+HXjx1iSmCIVIP57Mvxw4w=="
+ "resolved": "5.8.1",
+ "contentHash": "bA0TqJuJFkg7qIRyGMYpE8u1SSDOYmXgAEiF01ORP+3jgMLaUD6DtpoQoPkGrLs5AE5JDZg0soImznTJOJUZkQ=="
},
"Maa.Framework.Runtime.osx-x64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "DJFamv6Xd3DgGQg/Oig6iBLLwFVpK38Dp50CnKR7WdppnC08tq57wQuykqQOapUm/oGmLRgO8O2mlOSGcUSWkg=="
+ "resolved": "5.8.1",
+ "contentHash": "JTcAfsmGUE2FVhR3oFZe1t66W/yKQZMHkQbSA8I2FLU/irjHm6dl5LMgPEevDu9aNwpqvpZ1Mj3VxtMaTUW6PA=="
},
"Maa.Framework.Runtime.win-arm64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "vkANhfQVJJohKjgHWrFa32WDlL6OrahmvZaFquH+kvuSxihfNDS5E578iEPp012eH5DAtZYnE/KegPwcY7zuQw=="
+ "resolved": "5.8.1",
+ "contentHash": "JJm0C0bLgNCk4RMm+vytHuw9LAjhi9VXJKHYXUkSfwb06CVFyOCOBQ9IJ0y3TncoBDdMceqj4LASTVGASBzIVg=="
},
"Maa.Framework.Runtime.win-x64": {
"type": "Transitive",
- "resolved": "5.6.0",
- "contentHash": "kF8895AF7im/WjsHXFUORhWub7kW4YxfS6yQ782O+YcKnTW4kYhWW2ZT4WtDI4M3SH8bcyTI5gyrZZUk7fTN2g=="
+ "resolved": "5.8.1",
+ "contentHash": "4gXP+p7xyeW2m8Og89TNJ57SaEFe1TTQ6gku/ytezhbYXxuHkb4caVcW1+uY8l7t39rwq1r0vfCAXqy8aK3pig=="
},
"Maa.Framework.Binding": {
"type": "Project"