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 @@
-
-
+
+
diff --git a/tests/ScreenGrab.Sample/MainWindow.xaml.cs b/tests/ScreenGrab.Sample/MainWindow.xaml.cs
index a2270d3..fd2985e 100644
--- a/tests/ScreenGrab.Sample/MainWindow.xaml.cs
+++ b/tests/ScreenGrab.Sample/MainWindow.xaml.cs
@@ -17,11 +17,8 @@ private void Capture()
{
Clean();
- var grab = new Grab
- {
- OnImageCaptured = bitmap => Img.Source = bitmap.ToImageSource()
- };
- grab.Capture();
+ ScreenGrabber.OnCaptured = bitmap => Img.Source = bitmap.ToImageSource();
+ ScreenGrabber.Capture();
}
private void Capture(object? sender, HotkeyEventArgs e)