diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml new file mode 100644 index 0000000..52676ce --- /dev/null +++ b/.github/workflows/dotnet.yml @@ -0,0 +1,43 @@ +name: .NET +on: + release: + types: [ published ] + push: + tags: + - "*" # Push events to matching *, i.e. 1.0, 20.15.10 + +jobs: + build: + strategy: + matrix: + dotnet: [ '8.0.x' ] + os: [ windows-latest ] + + runs-on: ${{ matrix.os }} + name: ${{ matrix.os }} - ${{ matrix.dotnet }} + env: + DOTNET_NOLOGO: true + + steps: + - name: Getting code + uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v1 + with: + dotnet-version: ${{ matrix.dotnet }} + + - name: Clean + run: dotnet clean --configuration Release && dotnet nuget locals all --clear + + - name: Build + run: dotnet build --configuration Release --nologo + +# - name: Run tests +# run: dotnet test --configuration Release --nologo + + - name: Pack + run: dotnet pack + + - name: Push + run: dotnet nuget push -s https://api.nuget.org/v3/index.json -k ${{ secrets.NUGET_KEY }} artifacts\**.nupkg diff --git a/README.md b/README.md index 346ab46..9f279a5 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,10 @@ Install-Package ScreenGrab - [ScreenGrab](./src/ScreenGrab/README.md) +### Notes + +This feature is extracted from[Text-Grab](https://github.com/TheJoeFin/Text-Grab) + ### Contacts * [mail](mailto:zggsong@foxmail.com) diff --git a/ScreenGrab.sln b/ScreenGrab.sln index 2a03328..bb2de1b 100644 --- a/ScreenGrab.sln +++ b/ScreenGrab.sln @@ -19,6 +19,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution LICENSE = LICENSE README.md = README.md Directory.Packages.props = Directory.Packages.props + .github\workflows\dotnet.yml = .github\workflows\dotnet.yml EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScreenGrab.Sample", "tests\ScreenGrab.Sample\ScreenGrab.Sample.csproj", "{94390E18-11B6-413E-8571-BCE129F7B3D8}" diff --git a/src/ScreenGrab/README.md b/src/ScreenGrab/README.md index c610964..5455823 100644 --- a/src/ScreenGrab/README.md +++ b/src/ScreenGrab/README.md @@ -2,3 +2,8 @@ ## Usage +```csharp +BitmapSource bs; +ScreenGrabber.OnCaptured = bitmap => bs = bitmap.ToImageSource(); +ScreenGrabber.Capture(); +``` \ No newline at end of file diff --git a/src/ScreenGrab/ScreenGrabView.xaml.cs b/src/ScreenGrab/ScreenGrabView.xaml.cs index 2b3dd6a..9565ba4 100644 --- a/src/ScreenGrab/ScreenGrabView.xaml.cs +++ b/src/ScreenGrab/ScreenGrabView.xaml.cs @@ -12,6 +12,9 @@ namespace ScreenGrab; +/// +/// Extracted from the project +/// public partial class ScreenGrabView { #region Constructors @@ -26,6 +29,7 @@ public ScreenGrabView(Action? action) #region Properties + public Action? OnGrabClose { get; set; } private DisplayInfo? CurrentScreen { get; set; } #endregion Properties @@ -75,6 +79,7 @@ private void CloseAllFullscreenGrabs() foreach (var window in Application.Current.Windows) if (window is ScreenGrabView sgv) sgv.Close(); + OnGrabClose?.Invoke(); } private void FreezeUnfreezeAllScreenGrabs() diff --git a/src/ScreenGrab/Grab.cs b/src/ScreenGrab/ScreenGrabber.cs similarity index 73% rename from src/ScreenGrab/Grab.cs rename to src/ScreenGrab/ScreenGrabber.cs index 8929a2f..8ed2888 100644 --- a/src/ScreenGrab/Grab.cs +++ b/src/ScreenGrab/ScreenGrabber.cs @@ -5,18 +5,29 @@ namespace ScreenGrab; -public class Grab +public abstract class ScreenGrabber { - public Action? OnImageCaptured { get; set; } + private static bool _isCapturing; + public static Action? OnCaptured { get; set; } - public void Capture() + public static void Capture() { + if (_isCapturing) return; + + _isCapturing = true; + var allDisplayInfos = DisplayInfo.AllDisplayInfos; var allScreenGrab = Application.Current.Windows.OfType().ToList(); var numberOfScreenGrabWindowsToCreate = allDisplayInfos.Length - allScreenGrab.Count; for (var i = 0; i < numberOfScreenGrabWindowsToCreate; i++) - allScreenGrab.Add(new ScreenGrabView(OnImageCaptured)); + { + var view = new ScreenGrabView(OnCaptured) + { + OnGrabClose = () => _isCapturing = false + }; + allScreenGrab.Add(view); + } const double sideLength = 40; diff --git a/tests/ScreenGrab.Sample/MainWindow.xaml b/tests/ScreenGrab.Sample/MainWindow.xaml index a246fbd..294f9fb 100644 --- a/tests/ScreenGrab.Sample/MainWindow.xaml +++ b/tests/ScreenGrab.Sample/MainWindow.xaml @@ -18,8 +18,8 @@ -