mirror of
https://github.com/microsoft/PowerToys.git
synced 2024-12-24 17:18:00 +08:00
Merge remote-tracking branch 'origin/main' into dev/snickler/net8-upgrade
This commit is contained in:
commit
fdb25f5855
4
.github/actions/spell-check/expect.txt
vendored
4
.github/actions/spell-check/expect.txt
vendored
@ -784,6 +784,7 @@ IFACEMETHODIMP
|
|||||||
IFile
|
IFile
|
||||||
IFilter
|
IFilter
|
||||||
IGraphics
|
IGraphics
|
||||||
|
IGT
|
||||||
iid
|
iid
|
||||||
Iindex
|
Iindex
|
||||||
IIO
|
IIO
|
||||||
@ -1496,6 +1497,7 @@ qit
|
|||||||
QITAB
|
QITAB
|
||||||
QITABENT
|
QITABENT
|
||||||
qps
|
qps
|
||||||
|
Quarternary
|
||||||
QUERYENDSESSION
|
QUERYENDSESSION
|
||||||
QUERYOPEN
|
QUERYOPEN
|
||||||
QUEUESYNC
|
QUEUESYNC
|
||||||
@ -1849,6 +1851,7 @@ subquery
|
|||||||
subresource
|
subresource
|
||||||
Superbar
|
Superbar
|
||||||
sut
|
sut
|
||||||
|
svchost
|
||||||
SVE
|
SVE
|
||||||
SVGIn
|
SVGIn
|
||||||
SVGIO
|
SVGIO
|
||||||
@ -2223,7 +2226,6 @@ Wubi
|
|||||||
WVC
|
WVC
|
||||||
Wwan
|
Wwan
|
||||||
Wwanpp
|
Wwanpp
|
||||||
XAttribute
|
|
||||||
XAxis
|
XAxis
|
||||||
xbf
|
xbf
|
||||||
Xbox
|
Xbox
|
||||||
|
@ -12,11 +12,11 @@ jobs:
|
|||||||
NUGET_RESTORE_MSBUILD_ARGS: /p:Platform=${{ parameters.platform }} # Required for nuget to work due to self contained
|
NUGET_RESTORE_MSBUILD_ARGS: /p:Platform=${{ parameters.platform }} # Required for nuget to work due to self contained
|
||||||
NODE_OPTIONS: --max_old_space_size=16384
|
NODE_OPTIONS: --max_old_space_size=16384
|
||||||
pool:
|
pool:
|
||||||
demands: ImageOverride -equals WinDevVS17-latest
|
demands: ImageOverride -equals SHINE-VS17-Latest
|
||||||
${{ if eq(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}:
|
${{ if eq(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}:
|
||||||
name: WinDevPoolOSS-L
|
name: SHINE-OSS-L
|
||||||
${{ if ne(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}:
|
${{ if ne(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}:
|
||||||
name: WinDevPool-L
|
name: SHINE-INT-L
|
||||||
timeoutInMinutes: 120
|
timeoutInMinutes: 120
|
||||||
strategy:
|
strategy:
|
||||||
maxParallel: 10
|
maxParallel: 10
|
||||||
|
@ -10,7 +10,7 @@ jobs:
|
|||||||
BuildConfiguration: ${{ parameters.configuration }}
|
BuildConfiguration: ${{ parameters.configuration }}
|
||||||
BuildPlatform: ${{ parameters.platform }}
|
BuildPlatform: ${{ parameters.platform }}
|
||||||
pool:
|
pool:
|
||||||
name: WinDevPool-L
|
name: SHINE-INT-L
|
||||||
timeoutInMinutes: 120
|
timeoutInMinutes: 120
|
||||||
strategy:
|
strategy:
|
||||||
maxParallel: 10
|
maxParallel: 10
|
||||||
|
@ -3,8 +3,8 @@ trigger: none
|
|||||||
pr: none
|
pr: none
|
||||||
|
|
||||||
pool:
|
pool:
|
||||||
name: WinDevPool-L
|
name: SHINE-INT-L
|
||||||
demands: ImageOverride -equals WinDevVS17-latest
|
demands: ImageOverride -equals SHINE-VS17-Latest
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
- name: buildConfigurations
|
- name: buildConfigurations
|
||||||
|
@ -14,6 +14,7 @@ $versionExceptions = @(
|
|||||||
"Microsoft.Windows.ApplicationModel.WindowsAppRuntime.Projection.dll",
|
"Microsoft.Windows.ApplicationModel.WindowsAppRuntime.Projection.dll",
|
||||||
"Microsoft.Windows.AppLifecycle.Projection.dll",
|
"Microsoft.Windows.AppLifecycle.Projection.dll",
|
||||||
"Microsoft.Windows.System.Power.Projection.dll",
|
"Microsoft.Windows.System.Power.Projection.dll",
|
||||||
|
"Microsoft.Windows.Widgets.Providers.Projection.dll",
|
||||||
"Microsoft.WindowsAppRuntime.Bootstrap.Net.dll",
|
"Microsoft.WindowsAppRuntime.Bootstrap.Net.dll",
|
||||||
"Microsoft.Xaml.Interactions.dll",
|
"Microsoft.Xaml.Interactions.dll",
|
||||||
"Microsoft.Xaml.Interactivity.dll",
|
"Microsoft.Xaml.Interactivity.dll",
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
<PackageVersion Include="Microsoft.Windows.CsWinRT" Version="2.0.3" />
|
<PackageVersion Include="Microsoft.Windows.CsWinRT" Version="2.0.3" />
|
||||||
<PackageVersion Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.755" />
|
<PackageVersion Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.755" />
|
||||||
<PackageVersion Include="Microsoft.Windows.SDK.Contracts" Version="10.0.19041.1" />
|
<PackageVersion Include="Microsoft.Windows.SDK.Contracts" Version="10.0.19041.1" />
|
||||||
<PackageVersion Include="Microsoft.WindowsAppSDK" Version="1.3.230502000" />
|
<PackageVersion Include="Microsoft.WindowsAppSDK" Version="1.4.230822000" />
|
||||||
<PackageVersion Include="Microsoft.Xaml.Behaviors.WinUI.Managed" Version="2.0.9" />
|
<PackageVersion Include="Microsoft.Xaml.Behaviors.WinUI.Managed" Version="2.0.9" />
|
||||||
<PackageVersion Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.39" />
|
<PackageVersion Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.39" />
|
||||||
<PackageVersion Include="ModernWpfUI" Version="0.9.4" />
|
<PackageVersion Include="ModernWpfUI" Version="0.9.4" />
|
||||||
|
@ -308,7 +308,7 @@ SOFTWARE.
|
|||||||
- Microsoft.Windows.CsWinRT 2.0.3
|
- Microsoft.Windows.CsWinRT 2.0.3
|
||||||
- Microsoft.Windows.SDK.BuildTools 10.0.22621.755
|
- Microsoft.Windows.SDK.BuildTools 10.0.22621.755
|
||||||
- Microsoft.Windows.SDK.Contracts 10.0.19041.1
|
- Microsoft.Windows.SDK.Contracts 10.0.19041.1
|
||||||
- Microsoft.WindowsAppSDK 1.3.230502000
|
- Microsoft.WindowsAppSDK 1.4.230822000
|
||||||
- Microsoft.Xaml.Behaviors.WinUI.Managed 2.0.9
|
- Microsoft.Xaml.Behaviors.WinUI.Managed 2.0.9
|
||||||
- Microsoft.Xaml.Behaviors.Wpf 1.1.39
|
- Microsoft.Xaml.Behaviors.Wpf 1.1.39
|
||||||
- ModernWpfUI 0.9.4
|
- ModernWpfUI 0.9.4
|
||||||
|
14
SECURITY.md
14
SECURITY.md
@ -1,18 +1,18 @@
|
|||||||
<!-- BEGIN MICROSOFT SECURITY.MD V0.0.2 BLOCK -->
|
<!-- BEGIN MICROSOFT SECURITY.MD V0.0.9 BLOCK -->
|
||||||
|
|
||||||
## Security
|
## Security
|
||||||
|
|
||||||
Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [many more](https://opensource.microsoft.com/).
|
Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet) and [Xamarin](https://github.com/xamarin).
|
||||||
|
|
||||||
If you believe you have found a security vulnerability in any Microsoft-owned repository that meets Microsoft's [definition](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)) of a security vulnerability, please report it to us as described below.
|
If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/security.md/definition), please report it to us as described below.
|
||||||
|
|
||||||
## Reporting Security Issues
|
## Reporting Security Issues
|
||||||
|
|
||||||
**Please do not report security vulnerabilities through public GitHub issues.**
|
**Please do not report security vulnerabilities through public GitHub issues.**
|
||||||
|
|
||||||
Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report).
|
Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/security.md/msrc/create-report).
|
||||||
|
|
||||||
If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/en-us/msrc/pgp-key-msrc).
|
If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/security.md/msrc/pgp).
|
||||||
|
|
||||||
You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc).
|
You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc).
|
||||||
|
|
||||||
@ -28,7 +28,7 @@ Please include the requested information listed below (as much as you can provid
|
|||||||
|
|
||||||
This information will help us triage your report more quickly.
|
This information will help us triage your report more quickly.
|
||||||
|
|
||||||
If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs.
|
If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/security.md/msrc/bounty) page for more details about our active programs.
|
||||||
|
|
||||||
## Preferred Languages
|
## Preferred Languages
|
||||||
|
|
||||||
@ -36,6 +36,6 @@ We prefer all communications to be in English.
|
|||||||
|
|
||||||
## Policy
|
## Policy
|
||||||
|
|
||||||
Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd).
|
Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/security.md/cvd).
|
||||||
|
|
||||||
<!-- END MICROSOFT SECURITY.MD BLOCK -->
|
<!-- END MICROSOFT SECURITY.MD BLOCK -->
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<Import Project="..\wix.props" Condition="Exists('..\wix.props')" />
|
<Import Project="..\wix.props" Condition="Exists('..\wix.props')" />
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<ProjectGuid>{32f3882b-f2d6-4586-b5ed-11e39e522bd3}</ProjectGuid>
|
<ProjectGuid>{32f3882b-f2d6-4586-b5ed-11e39e522bd3}</ProjectGuid>
|
||||||
@ -163,13 +163,13 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,5 +1,7 @@
|
|||||||
[*.cs]
|
[*.cs]
|
||||||
|
|
||||||
|
file_header_template = Copyright (c) Microsoft Corporation\r\nThe Microsoft Corporation licenses this file to you under the MIT license.\r\nSee the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
# SA1201: Elements should appear in the correct order
|
# SA1201: Elements should appear in the correct order
|
||||||
dotnet_diagnostic.SA1201.severity = none
|
dotnet_diagnostic.SA1201.severity = none
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<Target Name="GenerateResourceFiles" BeforeTargets="PrepareForBuild">
|
<Target Name="GenerateResourceFiles" BeforeTargets="PrepareForBuild">
|
||||||
<Exec Command="powershell -NonInteractive -executionpolicy Unrestricted $(SolutionDir)tools\build\convert-resx-to-rc.ps1 $(MSBuildThisFileDirectory) resource.base.h resource.h actionRunner.base.rc actionRunner.rc" />
|
<Exec Command="powershell -NonInteractive -executionpolicy Unrestricted $(SolutionDir)tools\build\convert-resx-to-rc.ps1 $(MSBuildThisFileDirectory) resource.base.h resource.h actionRunner.base.rc actionRunner.rc" />
|
||||||
</Target>
|
</Target>
|
||||||
@ -61,15 +61,15 @@
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<Import Project="..\..\deps\spdlog.props" />
|
<Import Project="..\..\deps\spdlog.props" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
<Import Project="..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
|
<Import Project="..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
<Error Condition="!Exists('..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />
|
<Error Condition="!Exists('..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
<package id="Microsoft.Windows.ImplementationLibrary" version="1.0.220914.1" targetFramework="native" />
|
<package id="Microsoft.Windows.ImplementationLibrary" version="1.0.220914.1" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<Target Name="GenerateResourceFiles" BeforeTargets="PrepareForBuild">
|
<Target Name="GenerateResourceFiles" BeforeTargets="PrepareForBuild">
|
||||||
<Exec Command="powershell -NonInteractive -executionpolicy Unrestricted $(SolutionDir)tools\build\convert-resx-to-rc.ps1 $(MSBuildThisFileDirectory) resource.base.h resource.h PowerToys.Update.base.rc PowerToys.Update.rc" />
|
<Exec Command="powershell -NonInteractive -executionpolicy Unrestricted $(SolutionDir)tools\build\convert-resx-to-rc.ps1 $(MSBuildThisFileDirectory) resource.base.h resource.h PowerToys.Update.base.rc PowerToys.Update.rc" />
|
||||||
</Target>
|
</Target>
|
||||||
@ -67,15 +67,15 @@
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<Import Project="..\..\deps\spdlog.props" />
|
<Import Project="..\..\deps\spdlog.props" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
<Import Project="..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
|
<Import Project="..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
<Error Condition="!Exists('..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />
|
<Error Condition="!Exists('..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
<package id="Microsoft.Windows.ImplementationLibrary" version="1.0.220914.1" targetFramework="native" />
|
<package id="Microsoft.Windows.ImplementationLibrary" version="1.0.220914.1" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<CppWinRTOptimized>true</CppWinRTOptimized>
|
<CppWinRTOptimized>true</CppWinRTOptimized>
|
||||||
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
|
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
|
||||||
@ -113,13 +113,13 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -26,5 +26,17 @@ namespace ManagedCommon
|
|||||||
|
|
||||||
[DllImport("kernel32.dll", SetLastError = true)]
|
[DllImport("kernel32.dll", SetLastError = true)]
|
||||||
internal static extern bool CloseHandle(IntPtr hObject);
|
internal static extern bool CloseHandle(IntPtr hObject);
|
||||||
|
|
||||||
|
[DllImport("user32.dll", SetLastError = true)]
|
||||||
|
internal static extern IntPtr SetForegroundWindow(IntPtr hWnd);
|
||||||
|
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
internal static extern IntPtr GetForegroundWindow();
|
||||||
|
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
internal static extern uint GetWindowThreadProcessId(IntPtr hWnd, IntPtr processId);
|
||||||
|
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
internal static extern bool AttachThreadInput(uint idAttach, uint idAttachTo, bool fAttach);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
30
src/common/ManagedCommon/WindowHelpers.cs
Normal file
30
src/common/ManagedCommon/WindowHelpers.cs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation
|
||||||
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace ManagedCommon
|
||||||
|
{
|
||||||
|
public class WindowHelpers
|
||||||
|
{
|
||||||
|
public static void BringToForeground(IntPtr handle)
|
||||||
|
{
|
||||||
|
var fgHandle = NativeMethods.GetForegroundWindow();
|
||||||
|
|
||||||
|
var threadId1 = NativeMethods.GetWindowThreadProcessId(handle, System.IntPtr.Zero);
|
||||||
|
var threadId2 = NativeMethods.GetWindowThreadProcessId(fgHandle, System.IntPtr.Zero);
|
||||||
|
|
||||||
|
if (threadId1 != threadId2)
|
||||||
|
{
|
||||||
|
NativeMethods.AttachThreadInput(threadId1, threadId2, true);
|
||||||
|
NativeMethods.SetForegroundWindow(handle);
|
||||||
|
NativeMethods.AttachThreadInput(threadId1, threadId2, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NativeMethods.SetForegroundWindow(handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
|
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<VCProjectVersion>16.0</VCProjectVersion>
|
<VCProjectVersion>16.0</VCProjectVersion>
|
||||||
@ -45,13 +45,13 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<VCProjectVersion>16.0</VCProjectVersion>
|
<VCProjectVersion>16.0</VCProjectVersion>
|
||||||
<ProjectGuid>{98537082-0FDB-40DE-ABD8-0DC5A4269BAB}</ProjectGuid>
|
<ProjectGuid>{98537082-0FDB-40DE-ABD8-0DC5A4269BAB}</ProjectGuid>
|
||||||
@ -46,13 +46,13 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<VCProjectVersion>16.0</VCProjectVersion>
|
<VCProjectVersion>16.0</VCProjectVersion>
|
||||||
<ProjectGuid>{1A066C63-64B3-45F8-92FE-664E1CCE8077}</ProjectGuid>
|
<ProjectGuid>{1A066C63-64B3-45F8-92FE-664E1CCE8077}</ProjectGuid>
|
||||||
@ -60,13 +60,13 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
<Configuration>Debug</Configuration>
|
<Configuration>Debug</Configuration>
|
||||||
@ -80,13 +80,13 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<CppWinRTOptimized>true</CppWinRTOptimized>
|
<CppWinRTOptimized>true</CppWinRTOptimized>
|
||||||
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
|
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
|
||||||
@ -96,13 +96,13 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<VCProjectVersion>16.0</VCProjectVersion>
|
<VCProjectVersion>16.0</VCProjectVersion>
|
||||||
<ProjectGuid>{031AC72E-FA28-4AB7-B690-6F7B9C28AA73}</ProjectGuid>
|
<ProjectGuid>{031AC72E-FA28-4AB7-B690-6F7B9C28AA73}</ProjectGuid>
|
||||||
@ -64,7 +64,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\BackgroundActivator\BackgroundActivator.vcxproj">
|
<ProjectReference Include="..\BackgroundActivator\BackgroundActivator.vcxproj">
|
||||||
@ -78,7 +78,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<VCProjectVersion>16.0</VCProjectVersion>
|
<VCProjectVersion>16.0</VCProjectVersion>
|
||||||
<ProjectGuid>{1D5BE09D-78C0-4FD7-AF00-AE7C1AF7C525}</ProjectGuid>
|
<ProjectGuid>{1D5BE09D-78C0-4FD7-AF00-AE7C1AF7C525}</ProjectGuid>
|
||||||
@ -42,15 +42,15 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
<Import Project="..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
|
<Import Project="..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />
|
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
<package id="Microsoft.Windows.ImplementationLibrary" version="1.0.220914.1" targetFramework="native" />
|
<package id="Microsoft.Windows.ImplementationLibrary" version="1.0.220914.1" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
<package id="Microsoft.Windows.ImplementationLibrary" version="1.0.220914.1" targetFramework="native" />
|
<package id="Microsoft.Windows.ImplementationLibrary" version="1.0.220914.1" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<VCProjectVersion>16.0</VCProjectVersion>
|
<VCProjectVersion>16.0</VCProjectVersion>
|
||||||
<ProjectGuid>{17DA04DF-E393-4397-9CF0-84DABE11032E}</ProjectGuid>
|
<ProjectGuid>{17DA04DF-E393-4397-9CF0-84DABE11032E}</ProjectGuid>
|
||||||
@ -60,15 +60,15 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
<Import Project="..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
|
<Import Project="..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />
|
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<CppWinRTOptimized>true</CppWinRTOptimized>
|
<CppWinRTOptimized>true</CppWinRTOptimized>
|
||||||
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
|
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
|
||||||
@ -154,7 +154,7 @@
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<Import Project="..\..\..\..\deps\spdlog.props" />
|
<Import Project="..\..\..\..\deps\spdlog.props" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
|
||||||
<Import Project="..\..\..\..\packages\robmikh.common.0.0.22-beta\build\native\robmikh.common.targets" Condition="Exists('..\..\..\..\packages\robmikh.common.0.0.22-beta\build\native\robmikh.common.targets')" />
|
<Import Project="..\..\..\..\packages\robmikh.common.0.0.22-beta\build\native\robmikh.common.targets" Condition="Exists('..\..\..\..\packages\robmikh.common.0.0.22-beta\build\native\robmikh.common.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
@ -162,8 +162,8 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\robmikh.common.0.0.22-beta\build\native\robmikh.common.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\robmikh.common.0.0.22-beta\build\native\robmikh.common.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\robmikh.common.0.0.22-beta\build\native\robmikh.common.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\robmikh.common.0.0.22-beta\build\native\robmikh.common.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
<package id="Microsoft.Windows.ImplementationLibrary" version="1.0.220914.1" targetFramework="native" />
|
<package id="Microsoft.Windows.ImplementationLibrary" version="1.0.220914.1" targetFramework="native" />
|
||||||
<package id="robmikh.common" version="0.0.22-beta" targetFramework="native" />
|
<package id="robmikh.common" version="0.0.22-beta" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<VCProjectVersion>16.0</VCProjectVersion>
|
<VCProjectVersion>16.0</VCProjectVersion>
|
||||||
<Keyword>Win32Proj</Keyword>
|
<Keyword>Win32Proj</Keyword>
|
||||||
@ -101,7 +101,7 @@
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.211019.2\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.211019.2\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.211019.2\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.211019.2\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
|
||||||
<Import Project="..\..\..\..\packages\robmikh.common.0.0.22-beta\build\native\robmikh.common.targets" Condition="Exists('..\..\..\..\packages\robmikh.common.0.0.22-beta\build\native\robmikh.common.targets')" />
|
<Import Project="..\..\..\..\packages\robmikh.common.0.0.22-beta\build\native\robmikh.common.targets" Condition="Exists('..\..\..\..\packages\robmikh.common.0.0.22-beta\build\native\robmikh.common.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
@ -110,8 +110,8 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\robmikh.common.0.0.22-beta\build\native\robmikh.common.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\robmikh.common.0.0.22-beta\build\native\robmikh.common.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\robmikh.common.0.0.22-beta\build\native\robmikh.common.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\robmikh.common.0.0.22-beta\build\native\robmikh.common.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
<package id="Microsoft.Windows.ImplementationLibrary" version="1.0.220914.1" targetFramework="native" />
|
<package id="Microsoft.Windows.ImplementationLibrary" version="1.0.220914.1" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<Target Name="GenerateResourceFiles" BeforeTargets="PrepareForBuild">
|
<Target Name="GenerateResourceFiles" BeforeTargets="PrepareForBuild">
|
||||||
<Exec Command="powershell -NonInteractive -executionpolicy Unrestricted $(SolutionDir)tools\build\convert-resx-to-rc.ps1 $(MSBuildThisFileDirectory) resource.base.h resource.h FileLocksmithExt.base.rc FileLocksmithExt.rc" />
|
<Exec Command="powershell -NonInteractive -executionpolicy Unrestricted $(SolutionDir)tools\build\convert-resx-to-rc.ps1 $(MSBuildThisFileDirectory) resource.base.h resource.h FileLocksmithExt.base.rc FileLocksmithExt.rc" />
|
||||||
</Target>
|
</Target>
|
||||||
@ -267,13 +267,13 @@
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<Import Project="..\..\..\..\deps\spdlog.props" />
|
<Import Project="..\..\..\..\deps\spdlog.props" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -36,7 +36,7 @@ std::vector<ProcessResult> find_processes_recursive(const std::vector<std::wstri
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::map<DWORD, std::set<std::wstring>> pid_files;
|
std::map<ULONG_PTR, std::set<std::wstring>> pid_files;
|
||||||
|
|
||||||
// Returns a normal path of the file specified by kernel_name, if it matches
|
// Returns a normal path of the file specified by kernel_name, if it matches
|
||||||
// the search criteria. Otherwise, return an empty string.
|
// the search criteria. Otherwise, return an empty string.
|
||||||
|
@ -16,20 +16,23 @@ class Ntdll
|
|||||||
private:
|
private:
|
||||||
HMODULE m_module;
|
HMODULE m_module;
|
||||||
public:
|
public:
|
||||||
struct SYSTEM_HANDLE
|
struct SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX
|
||||||
{
|
{
|
||||||
ULONG ProcessId;
|
|
||||||
BYTE ObjectTypeNumber;
|
|
||||||
BYTE Flags;
|
|
||||||
USHORT Handle;
|
|
||||||
PVOID Object;
|
PVOID Object;
|
||||||
ACCESS_MASK GrantedAccess;
|
ULONG_PTR UniqueProcessId;
|
||||||
|
ULONG_PTR HandleValue;
|
||||||
|
ULONG GrantedAccess;
|
||||||
|
USHORT CreatorBackTraceIndex;
|
||||||
|
USHORT ObjectTypeIndex;
|
||||||
|
ULONG HandleAttributes;
|
||||||
|
ULONG Reserved;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SYSTEM_HANDLE_INFORMATION
|
struct SYSTEM_HANDLE_INFORMATION_EX
|
||||||
{
|
{
|
||||||
ULONG HandleCount;
|
ULONG_PTR NumberOfHandles;
|
||||||
SYSTEM_HANDLE Handles[1];
|
ULONG_PTR Reserved;
|
||||||
|
SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX Handles[1];
|
||||||
};
|
};
|
||||||
|
|
||||||
enum POOL_TYPE
|
enum POOL_TYPE
|
||||||
|
@ -154,21 +154,21 @@ std::wstring NtdllExtensions::path_to_kernel_name(LPCWSTR path)
|
|||||||
|
|
||||||
std::vector<NtdllExtensions::HandleInfo> NtdllExtensions::handles() noexcept
|
std::vector<NtdllExtensions::HandleInfo> NtdllExtensions::handles() noexcept
|
||||||
{
|
{
|
||||||
auto get_info_result = NtQuerySystemInformationMemoryLoop(SystemHandleInformation);
|
auto get_info_result = NtQuerySystemInformationMemoryLoop(SystemExtendedHandleInformation);
|
||||||
if (NT_ERROR(get_info_result.status))
|
if (NT_ERROR(get_info_result.status))
|
||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
auto info_ptr = (SYSTEM_HANDLE_INFORMATION*)get_info_result.memory.data();
|
auto info_ptr = (SYSTEM_HANDLE_INFORMATION_EX*)get_info_result.memory.data();
|
||||||
|
|
||||||
std::map<DWORD, HANDLE> pid_to_handle;
|
std::map<ULONG_PTR, HANDLE> pid_to_handle;
|
||||||
std::vector<HandleInfo> result;
|
std::vector<HandleInfo> result;
|
||||||
|
|
||||||
std::vector<BYTE> object_info_buffer(DefaultResultBufferSize);
|
std::vector<BYTE> object_info_buffer(DefaultResultBufferSize);
|
||||||
|
|
||||||
std::atomic<ULONG> i = 0;
|
std::atomic<ULONG> i = 0;
|
||||||
std::atomic<ULONG> handle_count = info_ptr->HandleCount;
|
std::atomic<ULONG_PTR> handle_count = info_ptr->NumberOfHandles;
|
||||||
std::atomic<HANDLE> process_handle = NULL;
|
std::atomic<HANDLE> process_handle = NULL;
|
||||||
std::atomic<HANDLE> handle_copy = NULL;
|
std::atomic<HANDLE> handle_copy = NULL;
|
||||||
ULONG previous_i;
|
ULONG previous_i;
|
||||||
@ -188,7 +188,7 @@ std::vector<NtdllExtensions::HandleInfo> NtdllExtensions::handles() noexcept
|
|||||||
handle_copy = NULL;
|
handle_copy = NULL;
|
||||||
|
|
||||||
auto handle_info = info_ptr->Handles + i;
|
auto handle_info = info_ptr->Handles + i;
|
||||||
DWORD pid = handle_info->ProcessId;
|
auto pid = handle_info->UniqueProcessId;
|
||||||
|
|
||||||
auto iter = pid_to_handle.find(pid);
|
auto iter = pid_to_handle.find(pid);
|
||||||
if (iter != pid_to_handle.end())
|
if (iter != pid_to_handle.end())
|
||||||
@ -197,7 +197,7 @@ std::vector<NtdllExtensions::HandleInfo> NtdllExtensions::handles() noexcept
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
process_handle = OpenProcess(PROCESS_DUP_HANDLE, FALSE, pid);
|
process_handle = OpenProcess(PROCESS_DUP_HANDLE, FALSE, (DWORD)pid);
|
||||||
if (!process_handle)
|
if (!process_handle)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
@ -215,7 +215,7 @@ std::vector<NtdllExtensions::HandleInfo> NtdllExtensions::handles() noexcept
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
HANDLE local_handle_copy;
|
HANDLE local_handle_copy;
|
||||||
auto dh_result = DuplicateHandle(process_handle, (HANDLE)handle_info->Handle, GetCurrentProcess(), &local_handle_copy, 0, 0, DUPLICATE_SAME_ACCESS);
|
auto dh_result = DuplicateHandle(process_handle, (HANDLE)handle_info->HandleValue, GetCurrentProcess(), &local_handle_copy, 0, 0, DUPLICATE_SAME_ACCESS);
|
||||||
if (dh_result == 0)
|
if (dh_result == 0)
|
||||||
{
|
{
|
||||||
// Ignore this handle.
|
// Ignore this handle.
|
||||||
@ -241,7 +241,7 @@ std::vector<NtdllExtensions::HandleInfo> NtdllExtensions::handles() noexcept
|
|||||||
if (type_name == L"File")
|
if (type_name == L"File")
|
||||||
{
|
{
|
||||||
file_name = file_handle_to_kernel_name(handle_copy, object_info_buffer);
|
file_name = file_handle_to_kernel_name(handle_copy, object_info_buffer);
|
||||||
result.push_back(HandleInfo{ pid, handle_info->Handle, type_name, file_name });
|
result.push_back(HandleInfo{ pid, handle_info->HandleValue, type_name, file_name });
|
||||||
}
|
}
|
||||||
|
|
||||||
CloseHandle(handle_copy);
|
CloseHandle(handle_copy);
|
||||||
|
@ -11,7 +11,7 @@ private:
|
|||||||
constexpr static size_t MaxResultBufferSize = 1024 * 1024 * 1024;
|
constexpr static size_t MaxResultBufferSize = 1024 * 1024 * 1024;
|
||||||
|
|
||||||
constexpr static int ObjectNameInformation = 1;
|
constexpr static int ObjectNameInformation = 1;
|
||||||
constexpr static int SystemHandleInformation = 16;
|
constexpr static int SystemExtendedHandleInformation = 64;
|
||||||
|
|
||||||
struct MemoryLoopResult
|
struct MemoryLoopResult
|
||||||
{
|
{
|
||||||
@ -35,8 +35,8 @@ public:
|
|||||||
|
|
||||||
struct HandleInfo
|
struct HandleInfo
|
||||||
{
|
{
|
||||||
DWORD pid;
|
ULONG_PTR pid;
|
||||||
USHORT handle;
|
ULONG_PTR handle;
|
||||||
std::wstring type_name;
|
std::wstring type_name;
|
||||||
std::wstring kernel_file_name;
|
std::wstring kernel_file_name;
|
||||||
};
|
};
|
||||||
|
@ -20,9 +20,6 @@
|
|||||||
<SolidColorBrush x:Key="SubtleButtonForegroundPressed" Color="{ThemeResource TextFillColorSecondary}" />
|
<SolidColorBrush x:Key="SubtleButtonForegroundPressed" Color="{ThemeResource TextFillColorSecondary}" />
|
||||||
<SolidColorBrush x:Key="SubtleButtonForegroundDisabled" Color="{ThemeResource TextFillColorDisabled}" />
|
<SolidColorBrush x:Key="SubtleButtonForegroundDisabled" Color="{ThemeResource TextFillColorDisabled}" />
|
||||||
|
|
||||||
<SolidColorBrush x:Key="WindowCaptionBackground">Transparent</SolidColorBrush>
|
|
||||||
<SolidColorBrush x:Key="WindowCaptionBackgroundDisabled">Transparent</SolidColorBrush>
|
|
||||||
|
|
||||||
<Style x:Key="SubtleButtonStyle" TargetType="Button">
|
<Style x:Key="SubtleButtonStyle" TargetType="Button">
|
||||||
<Setter Property="Background" Value="{ThemeResource SubtleButtonBackground}" />
|
<Setter Property="Background" Value="{ThemeResource SubtleButtonBackground}" />
|
||||||
<Setter Property="BackgroundSizing" Value="InnerBorderEdge" />
|
<Setter Property="BackgroundSizing" Value="InnerBorderEdge" />
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:views="using:PowerToys.FileLocksmithUI.Views"
|
xmlns:views="using:PowerToys.FileLocksmithUI.Views"
|
||||||
xmlns:winuiex="using:WinUIEx"
|
xmlns:winuiex="using:WinUIEx"
|
||||||
x:Uid="AppTitle"
|
|
||||||
Width="680"
|
Width="680"
|
||||||
MinWidth="480"
|
MinWidth="480"
|
||||||
MinHeight="320"
|
MinHeight="320"
|
||||||
@ -39,7 +38,6 @@
|
|||||||
Height="16"/>
|
Height="16"/>
|
||||||
<TextBlock
|
<TextBlock
|
||||||
x:Name="AppTitleTextBlock"
|
x:Name="AppTitleTextBlock"
|
||||||
x:Uid="AppTitleText"
|
|
||||||
Grid.Column="2"
|
Grid.Column="2"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Style="{StaticResource CaptionTextBlockStyle}" />
|
Style="{StaticResource CaptionTextBlockStyle}" />
|
||||||
|
@ -5,8 +5,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using Microsoft.UI.Windowing;
|
using Microsoft.UI.Windowing;
|
||||||
using Microsoft.UI.Xaml;
|
using Microsoft.UI.Xaml;
|
||||||
using Microsoft.UI.Xaml.Controls;
|
|
||||||
using Microsoft.UI.Xaml.Media;
|
using Microsoft.UI.Xaml.Media;
|
||||||
|
using PowerToys.FileLocksmithUI.Helpers;
|
||||||
using WinUIEx;
|
using WinUIEx;
|
||||||
|
|
||||||
namespace FileLocksmithUI
|
namespace FileLocksmithUI
|
||||||
@ -21,6 +21,11 @@ namespace FileLocksmithUI
|
|||||||
SetTitleBar(AppTitleBar);
|
SetTitleBar(AppTitleBar);
|
||||||
Activated += MainWindow_Activated;
|
Activated += MainWindow_Activated;
|
||||||
AppWindow.SetIcon("Assets/FileLocksmith/Icon.ico");
|
AppWindow.SetIcon("Assets/FileLocksmith/Icon.ico");
|
||||||
|
|
||||||
|
var loader = ResourceLoaderInstance.ResourceLoader;
|
||||||
|
var title = isElevated ? loader.GetString("AppAdminTitle") : loader.GetString("AppTitle");
|
||||||
|
Title = title;
|
||||||
|
AppTitleTextBlock.Text = title;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MainWindow_Activated(object sender, WindowActivatedEventArgs args)
|
private void MainWindow_Activated(object sender, WindowActivatedEventArgs args)
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation
|
||||||
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using Microsoft.Windows.ApplicationModel.Resources;
|
||||||
|
|
||||||
|
namespace PowerToys.FileLocksmithUI.Helpers
|
||||||
|
{
|
||||||
|
internal static class ResourceLoaderInstance
|
||||||
|
{
|
||||||
|
internal static ResourceLoader ResourceLoader { get; private set; }
|
||||||
|
|
||||||
|
static ResourceLoaderInstance()
|
||||||
|
{
|
||||||
|
ResourceLoader = new Microsoft.Windows.ApplicationModel.Resources.ResourceLoader("PowerToys.FileLocksmithUI.pri");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -117,11 +117,9 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<data name="AppTitle.Title" xml:space="preserve">
|
<data name="AppTitle" xml:space="preserve">
|
||||||
<value>File Locksmith</value>
|
|
||||||
</data>
|
|
||||||
<data name="AppTitleText.Text" xml:space="preserve">
|
|
||||||
<value>File Locksmith</value>
|
<value>File Locksmith</value>
|
||||||
|
<comment>Title of the window when running as user.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="EmptyListDescription.Text" xml:space="preserve">
|
<data name="EmptyListDescription.Text" xml:space="preserve">
|
||||||
<value>No results</value>
|
<value>No results</value>
|
||||||
@ -162,4 +160,8 @@
|
|||||||
<data name="User.Header" xml:space="preserve">
|
<data name="User.Header" xml:space="preserve">
|
||||||
<value>User</value>
|
<value>User</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="AppAdminTitle" xml:space="preserve">
|
||||||
|
<value>Administrator: File Locksmith</value>
|
||||||
|
<comment>Title of the window when running as administrator.</comment>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
@ -238,5 +238,17 @@ namespace Hosts.Tests
|
|||||||
var result = fileSystem.GetFile(service.HostsFilePath);
|
var result = fileSystem.GetFile(service.HostsFilePath);
|
||||||
Assert.AreEqual(result.TextContents, contentResult);
|
Assert.AreEqual(result.TextContents, contentResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public async Task Save_NotRunningElevatedException()
|
||||||
|
{
|
||||||
|
var fileSystem = new CustomMockFileSystem();
|
||||||
|
var userSettings = new Mock<IUserSettings>();
|
||||||
|
var elevationHelper = new Mock<IElevationHelper>();
|
||||||
|
elevationHelper.Setup(m => m.IsElevated).Returns(false);
|
||||||
|
|
||||||
|
var service = new HostsService(fileSystem, userSettings.Object, elevationHelper.Object);
|
||||||
|
await Assert.ThrowsExceptionAsync<NotRunningElevatedException>(async () => await service.WriteAsync("# Empty hosts file", Enumerable.Empty<Entry>()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -122,11 +122,11 @@ namespace Hosts.Helpers
|
|||||||
return new HostsData(entries, unparsedBuilder.ToString(), splittedEntries);
|
return new HostsData(entries, unparsedBuilder.ToString(), splittedEntries);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> WriteAsync(string additionalLines, IEnumerable<Entry> entries)
|
public async Task WriteAsync(string additionalLines, IEnumerable<Entry> entries)
|
||||||
{
|
{
|
||||||
if (!_elevationHelper.IsElevated)
|
if (!_elevationHelper.IsElevated)
|
||||||
{
|
{
|
||||||
return false;
|
throw new NotRunningElevatedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
var lines = new List<string>();
|
var lines = new List<string>();
|
||||||
@ -195,18 +195,11 @@ namespace Hosts.Helpers
|
|||||||
|
|
||||||
await _fileSystem.File.WriteAllLinesAsync(HostsFilePath, lines, Encoding);
|
await _fileSystem.File.WriteAllLinesAsync(HostsFilePath, lines, Encoding);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Logger.LogError("Failed to write hosts file", ex);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
_fileSystemWatcher.EnableRaisingEvents = true;
|
_fileSystemWatcher.EnableRaisingEvents = true;
|
||||||
_asyncLock.Release();
|
_asyncLock.Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> PingAsync(string address)
|
public async Task<bool> PingAsync(string address)
|
||||||
|
@ -17,7 +17,7 @@ namespace Hosts.Helpers
|
|||||||
|
|
||||||
Task<HostsData> ReadAsync();
|
Task<HostsData> ReadAsync();
|
||||||
|
|
||||||
Task<bool> WriteAsync(string additionalLines, IEnumerable<Entry> entries);
|
Task WriteAsync(string additionalLines, IEnumerable<Entry> entries);
|
||||||
|
|
||||||
Task<bool> PingAsync(string address);
|
Task<bool> PingAsync(string address);
|
||||||
|
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
// Copyright (c) Microsoft Corporation
|
|
||||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
|
||||||
// See the LICENSE file in the project root for more information.
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
|
|
||||||
namespace Hosts.Helpers
|
|
||||||
{
|
|
||||||
internal sealed class NativeMethods
|
|
||||||
{
|
|
||||||
[DllImport("user32.dll", SetLastError = true)]
|
|
||||||
internal static extern IntPtr SetForegroundWindow(IntPtr hWnd);
|
|
||||||
|
|
||||||
[DllImport("user32.dll")]
|
|
||||||
internal static extern IntPtr GetForegroundWindow();
|
|
||||||
|
|
||||||
[DllImport("user32.dll")]
|
|
||||||
internal static extern uint GetWindowThreadProcessId(IntPtr hWnd, IntPtr processId);
|
|
||||||
|
|
||||||
[DllImport("user32.dll")]
|
|
||||||
internal static extern bool AttachThreadInput(uint idAttach, uint idAttachTo, bool fAttach);
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,12 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation
|
||||||
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Hosts.Helpers
|
||||||
|
{
|
||||||
|
public class NotRunningElevatedException : Exception
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@ -37,8 +37,7 @@
|
|||||||
x:Name="AppTitleTextBlock"
|
x:Name="AppTitleTextBlock"
|
||||||
Grid.Column="2"
|
Grid.Column="2"
|
||||||
Style="{StaticResource CaptionTextBlockStyle}"
|
Style="{StaticResource CaptionTextBlockStyle}"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center" />
|
||||||
Text="Hosts File Editor" />
|
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<views:MainPage Grid.Row="1" />
|
<views:MainPage Grid.Row="1" />
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
// See the LICENSE file in the project root for more information.
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
using System;
|
|
||||||
using Hosts.Helpers;
|
using Hosts.Helpers;
|
||||||
using Microsoft.UI.Xaml;
|
using Microsoft.UI.Xaml;
|
||||||
using Microsoft.UI.Xaml.Media;
|
using Microsoft.UI.Xaml.Media;
|
||||||
@ -19,9 +18,14 @@ namespace Hosts
|
|||||||
ExtendsContentIntoTitleBar = true;
|
ExtendsContentIntoTitleBar = true;
|
||||||
SetTitleBar(titleBar);
|
SetTitleBar(titleBar);
|
||||||
AppWindow.SetIcon("Assets/Hosts/Hosts.ico");
|
AppWindow.SetIcon("Assets/Hosts/Hosts.ico");
|
||||||
Title = ResourceLoaderInstance.ResourceLoader.GetString("WindowTitle");
|
|
||||||
|
|
||||||
BringToForeground();
|
var loader = ResourceLoaderInstance.ResourceLoader;
|
||||||
|
var title = App.GetService<IElevationHelper>().IsElevated ? loader.GetString("WindowAdminTitle") : loader.GetString("WindowTitle");
|
||||||
|
Title = title;
|
||||||
|
AppTitleTextBlock.Text = title;
|
||||||
|
|
||||||
|
var handle = this.GetWindowHandle();
|
||||||
|
ManagedCommon.WindowHelpers.BringToForeground(handle);
|
||||||
|
|
||||||
Activated += MainWindow_Activated;
|
Activated += MainWindow_Activated;
|
||||||
}
|
}
|
||||||
@ -37,25 +41,5 @@ namespace Hosts
|
|||||||
AppTitleTextBlock.Foreground = (SolidColorBrush)App.Current.Resources["WindowCaptionForeground"];
|
AppTitleTextBlock.Foreground = (SolidColorBrush)App.Current.Resources["WindowCaptionForeground"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BringToForeground()
|
|
||||||
{
|
|
||||||
var handle = this.GetWindowHandle();
|
|
||||||
var fgHandle = NativeMethods.GetForegroundWindow();
|
|
||||||
|
|
||||||
var threadId1 = NativeMethods.GetWindowThreadProcessId(handle, System.IntPtr.Zero);
|
|
||||||
var threadId2 = NativeMethods.GetWindowThreadProcessId(fgHandle, System.IntPtr.Zero);
|
|
||||||
|
|
||||||
if (threadId1 != threadId2)
|
|
||||||
{
|
|
||||||
NativeMethods.AttachThreadInput(threadId1, threadId2, true);
|
|
||||||
NativeMethods.SetForegroundWindow(handle);
|
|
||||||
NativeMethods.AttachThreadInput(threadId1, threadId2, false);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
NativeMethods.SetForegroundWindow(handle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,11 +41,11 @@
|
|||||||
Margin="16"
|
Margin="16"
|
||||||
RowSpacing="8">
|
RowSpacing="8">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="Auto" /><!-- buttons -->
|
<RowDefinition Height="Auto" /> <!-- Buttons -->
|
||||||
<RowDefinition Height="*" /><!-- content -->
|
<RowDefinition Height="*" /> <!-- Content -->
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
<Grid><!-- buttons -->
|
<Grid> <!-- Buttons -->
|
||||||
<Button
|
<Button
|
||||||
x:Uid="AddEntryBtn"
|
x:Uid="AddEntryBtn"
|
||||||
Command="{x:Bind NewDialogCommand}">
|
Command="{x:Bind NewDialogCommand}">
|
||||||
@ -183,74 +183,76 @@
|
|||||||
CornerRadius="{StaticResource OverlayCornerRadius}"
|
CornerRadius="{StaticResource OverlayCornerRadius}"
|
||||||
IsItemClickEnabled="True"
|
IsItemClickEnabled="True"
|
||||||
ItemClick="Entries_ItemClick"
|
ItemClick="Entries_ItemClick"
|
||||||
KeyDown="Entries_KeyDown"
|
|
||||||
GotFocus="Entries_GotFocus"
|
GotFocus="Entries_GotFocus"
|
||||||
|
RightTapped="Entries_RightTapped"
|
||||||
ItemsSource="{x:Bind ViewModel.Entries, Mode=TwoWay}"
|
ItemsSource="{x:Bind ViewModel.Entries, Mode=TwoWay}"
|
||||||
SelectedItem="{x:Bind ViewModel.Selected, Mode=TwoWay}">
|
SelectedItem="{x:Bind ViewModel.Selected, Mode=TwoWay}">
|
||||||
|
<ListView.ContextFlyout>
|
||||||
|
<MenuFlyout>
|
||||||
|
<MenuFlyoutItem
|
||||||
|
x:Uid="Edit"
|
||||||
|
Click="Edit_Click"
|
||||||
|
Icon="Edit">
|
||||||
|
<MenuFlyoutItem.KeyboardAccelerators>
|
||||||
|
<KeyboardAccelerator
|
||||||
|
Modifiers="Control"
|
||||||
|
Key="E"
|
||||||
|
ScopeOwner="{x:Bind Entries}" />
|
||||||
|
</MenuFlyoutItem.KeyboardAccelerators>
|
||||||
|
</MenuFlyoutItem>
|
||||||
|
<MenuFlyoutItem
|
||||||
|
x:Uid="Ping"
|
||||||
|
Click="Ping_Click"
|
||||||
|
Icon="TwoBars">
|
||||||
|
<MenuFlyoutItem.KeyboardAccelerators>
|
||||||
|
<KeyboardAccelerator
|
||||||
|
Modifiers="Control"
|
||||||
|
Key="P"
|
||||||
|
ScopeOwner="{x:Bind Entries}" />
|
||||||
|
</MenuFlyoutItem.KeyboardAccelerators>
|
||||||
|
</MenuFlyoutItem>
|
||||||
|
<MenuFlyoutItem
|
||||||
|
x:Uid="MoveUp"
|
||||||
|
Click="ReorderButtonUp_Click"
|
||||||
|
IsEnabled="{Binding DataContext.Filtered, ElementName=Page, Mode=OneWay, Converter={StaticResource BoolNegationConverter}}">
|
||||||
|
<MenuFlyoutItem.Icon>
|
||||||
|
<FontIcon Glyph="" />
|
||||||
|
</MenuFlyoutItem.Icon>
|
||||||
|
</MenuFlyoutItem>
|
||||||
|
<MenuFlyoutItem
|
||||||
|
x:Uid="MoveDown"
|
||||||
|
Click="ReorderButtonDown_Click"
|
||||||
|
IsEnabled="{Binding DataContext.Filtered, ElementName=Page, Mode=OneWay, Converter={StaticResource BoolNegationConverter}}">
|
||||||
|
<MenuFlyoutItem.Icon>
|
||||||
|
<FontIcon Glyph="" />
|
||||||
|
</MenuFlyoutItem.Icon>
|
||||||
|
</MenuFlyoutItem>
|
||||||
|
<MenuFlyoutSeparator />
|
||||||
|
<MenuFlyoutItem
|
||||||
|
x:Uid="Delete"
|
||||||
|
Click="Delete_Click"
|
||||||
|
Icon="Delete">
|
||||||
|
<MenuFlyoutItem.KeyboardAccelerators>
|
||||||
|
<KeyboardAccelerator
|
||||||
|
Key="Delete"
|
||||||
|
ScopeOwner="{x:Bind Entries}" />
|
||||||
|
</MenuFlyoutItem.KeyboardAccelerators>
|
||||||
|
</MenuFlyoutItem>
|
||||||
|
</MenuFlyout>
|
||||||
|
</ListView.ContextFlyout>
|
||||||
<ListView.ItemTemplate>
|
<ListView.ItemTemplate>
|
||||||
<DataTemplate x:DataType="models:Entry">
|
<DataTemplate x:DataType="models:Entry">
|
||||||
<Grid
|
<Grid
|
||||||
AutomationProperties.Name="{x:Bind Address, Mode=OneWay}"
|
AutomationProperties.Name="{x:Bind Address, Mode=OneWay}"
|
||||||
Background="Transparent"
|
Background="Transparent"
|
||||||
IsRightTapEnabled="True"
|
|
||||||
RightTapped="Grid_RightTapped"
|
|
||||||
ColumnSpacing="8">
|
ColumnSpacing="8">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="256"/><!--address-->
|
<ColumnDefinition Width="256"/> <!-- Address -->
|
||||||
<ColumnDefinition Width="*"/><!--comment-->
|
<ColumnDefinition Width="*"/> <!-- Comment -->
|
||||||
<ColumnDefinition Width="Auto"/><!--status-->
|
<ColumnDefinition Width="Auto"/> <!-- Status -->
|
||||||
<ColumnDefinition Width="Auto"/><!--duplicate-->
|
<ColumnDefinition Width="Auto"/> <!-- Duplicate -->
|
||||||
<ColumnDefinition Width="Auto"/><!--toggleswitch-->
|
<ColumnDefinition Width="Auto"/> <!-- ToggleSwitch -->
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<FlyoutBase.AttachedFlyout>
|
|
||||||
<MenuFlyout Opened="MenuFlyout_Opened">
|
|
||||||
<MenuFlyoutItem
|
|
||||||
x:Uid="Edit"
|
|
||||||
Click="Edit_Click"
|
|
||||||
Icon="Edit">
|
|
||||||
<MenuFlyoutItem.KeyboardAccelerators>
|
|
||||||
<KeyboardAccelerator
|
|
||||||
Modifiers="Control"
|
|
||||||
Key="E" />
|
|
||||||
</MenuFlyoutItem.KeyboardAccelerators>
|
|
||||||
</MenuFlyoutItem>
|
|
||||||
<MenuFlyoutItem
|
|
||||||
x:Uid="Ping"
|
|
||||||
Click="Ping_Click"
|
|
||||||
Icon="TwoBars">
|
|
||||||
<MenuFlyoutItem.KeyboardAccelerators>
|
|
||||||
<KeyboardAccelerator
|
|
||||||
Modifiers="Control"
|
|
||||||
Key="P" />
|
|
||||||
</MenuFlyoutItem.KeyboardAccelerators>
|
|
||||||
</MenuFlyoutItem>
|
|
||||||
<MenuFlyoutItem
|
|
||||||
x:Uid="MoveUp"
|
|
||||||
Click="ReorderButtonUp_Click"
|
|
||||||
IsEnabled="{Binding DataContext.Filtered, ElementName=Page, Mode=OneWay, Converter={StaticResource BoolNegationConverter}}">
|
|
||||||
<MenuFlyoutItem.Icon>
|
|
||||||
<FontIcon Glyph="" />
|
|
||||||
</MenuFlyoutItem.Icon>
|
|
||||||
</MenuFlyoutItem>
|
|
||||||
<MenuFlyoutItem
|
|
||||||
x:Uid="MoveDown"
|
|
||||||
Click="ReorderButtonDown_Click"
|
|
||||||
IsEnabled="{Binding DataContext.Filtered, ElementName=Page, Mode=OneWay, Converter={StaticResource BoolNegationConverter}}">
|
|
||||||
<MenuFlyoutItem.Icon>
|
|
||||||
<FontIcon Glyph="" />
|
|
||||||
</MenuFlyoutItem.Icon>
|
|
||||||
</MenuFlyoutItem>
|
|
||||||
<MenuFlyoutSeparator />
|
|
||||||
<MenuFlyoutItem
|
|
||||||
x:Uid="Delete"
|
|
||||||
Click="Delete_Click"
|
|
||||||
Icon="Delete">
|
|
||||||
<MenuFlyoutItem.KeyboardAccelerators>
|
|
||||||
<KeyboardAccelerator Key="Delete" />
|
|
||||||
</MenuFlyoutItem.KeyboardAccelerators>
|
|
||||||
</MenuFlyoutItem>
|
|
||||||
</MenuFlyout>
|
|
||||||
</FlyoutBase.AttachedFlyout>
|
|
||||||
<TextBlock
|
<TextBlock
|
||||||
Grid.Column="0"
|
Grid.Column="0"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
@ -390,6 +392,7 @@
|
|||||||
x:Uid="FileSaveError"
|
x:Uid="FileSaveError"
|
||||||
Margin="0,8,0,0"
|
Margin="0,8,0,0"
|
||||||
Severity="Error"
|
Severity="Error"
|
||||||
|
Message="{x:Bind ViewModel.ErrorMessage, Mode=TwoWay}"
|
||||||
IsOpen="{x:Bind ViewModel.Error, Mode=TwoWay}"
|
IsOpen="{x:Bind ViewModel.Error, Mode=TwoWay}"
|
||||||
Visibility="{x:Bind ViewModel.Error, Mode=TwoWay, Converter={StaticResource BoolToVisibilityConverter}}" />
|
Visibility="{x:Bind ViewModel.Error, Mode=TwoWay, Converter={StaticResource BoolToVisibilityConverter}}" />
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
// See the LICENSE file in the project root for more information.
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using CommunityToolkit.Mvvm.Input;
|
using CommunityToolkit.Mvvm.Input;
|
||||||
@ -12,10 +11,7 @@ using Hosts.Settings;
|
|||||||
using Hosts.ViewModels;
|
using Hosts.ViewModels;
|
||||||
using Microsoft.UI.Xaml;
|
using Microsoft.UI.Xaml;
|
||||||
using Microsoft.UI.Xaml.Controls;
|
using Microsoft.UI.Xaml.Controls;
|
||||||
using Microsoft.UI.Xaml.Controls.Primitives;
|
|
||||||
using Microsoft.UI.Xaml.Input;
|
using Microsoft.UI.Xaml.Input;
|
||||||
using Windows.System;
|
|
||||||
using Windows.UI.Core;
|
|
||||||
|
|
||||||
namespace Hosts.Views
|
namespace Hosts.Views
|
||||||
{
|
{
|
||||||
@ -97,60 +93,30 @@ namespace Hosts.Views
|
|||||||
ViewModel.UpdateAdditionalLines(AdditionalLines.Text);
|
ViewModel.UpdateAdditionalLines(AdditionalLines.Text);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Grid_RightTapped(object sender, RightTappedRoutedEventArgs e)
|
|
||||||
{
|
|
||||||
var owner = sender as FrameworkElement;
|
|
||||||
if (owner != null)
|
|
||||||
{
|
|
||||||
var flyoutBase = FlyoutBase.GetAttachedFlyout(owner);
|
|
||||||
flyoutBase.ShowAt(owner, new FlyoutShowOptions
|
|
||||||
{
|
|
||||||
Position = e.GetPosition(owner),
|
|
||||||
ShowMode = FlyoutShowMode.Transient, // https://github.com/microsoft/PowerToys/issues/21263
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void Delete_Click(object sender, RoutedEventArgs e)
|
private async void Delete_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
var menuFlyoutItem = sender as MenuFlyoutItem;
|
if (Entries.SelectedItem is Entry entry)
|
||||||
|
|
||||||
if (menuFlyoutItem != null)
|
|
||||||
{
|
{
|
||||||
await ShowDeleteDialogAsync(menuFlyoutItem.DataContext as Entry);
|
ViewModel.Selected = entry;
|
||||||
|
DeleteDialog.Title = entry.Address;
|
||||||
|
await DeleteDialog.ShowAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task ShowDeleteDialogAsync(Entry entry)
|
|
||||||
{
|
|
||||||
ViewModel.Selected = entry;
|
|
||||||
DeleteDialog.Title = entry.Address;
|
|
||||||
await DeleteDialog.ShowAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void Ping_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
var menuFlyoutItem = sender as MenuFlyoutItem;
|
|
||||||
|
|
||||||
if (menuFlyoutItem != null)
|
|
||||||
{
|
|
||||||
await PingAsync(menuFlyoutItem.DataContext as Entry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task PingAsync(Entry entry)
|
|
||||||
{
|
|
||||||
ViewModel.Selected = entry;
|
|
||||||
await ViewModel.PingSelectedAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void Edit_Click(object sender, RoutedEventArgs e)
|
private async void Edit_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
var menuFlyoutItem = sender as MenuFlyoutItem;
|
if (Entries.SelectedItem is Entry entry)
|
||||||
|
|
||||||
if (menuFlyoutItem != null)
|
|
||||||
{
|
{
|
||||||
await ShowEditDialogAsync(menuFlyoutItem.DataContext as Entry);
|
await ShowEditDialogAsync(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void Ping_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (Entries.SelectedItem is Entry entry)
|
||||||
|
{
|
||||||
|
ViewModel.Selected = entry;
|
||||||
|
await ViewModel.PingSelectedAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,11 +147,8 @@ namespace Hosts.Views
|
|||||||
|
|
||||||
private void ReorderButtonUp_Click(object sender, RoutedEventArgs e)
|
private void ReorderButtonUp_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
var menuFlyoutItem = sender as MenuFlyoutItem;
|
if (Entries.SelectedItem is Entry entry)
|
||||||
|
|
||||||
if (menuFlyoutItem != null)
|
|
||||||
{
|
{
|
||||||
var entry = menuFlyoutItem.DataContext as Entry;
|
|
||||||
var index = ViewModel.Entries.IndexOf(entry);
|
var index = ViewModel.Entries.IndexOf(entry);
|
||||||
if (index > 0)
|
if (index > 0)
|
||||||
{
|
{
|
||||||
@ -196,11 +159,8 @@ namespace Hosts.Views
|
|||||||
|
|
||||||
private void ReorderButtonDown_Click(object sender, RoutedEventArgs e)
|
private void ReorderButtonDown_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
var menuFlyoutItem = sender as MenuFlyoutItem;
|
if (Entries.SelectedItem is Entry entry)
|
||||||
|
|
||||||
if (menuFlyoutItem != null)
|
|
||||||
{
|
{
|
||||||
var entry = menuFlyoutItem.DataContext as Entry;
|
|
||||||
var index = ViewModel.Entries.IndexOf(entry);
|
var index = ViewModel.Entries.IndexOf(entry);
|
||||||
if (index < ViewModel.Entries.Count - 1)
|
if (index < ViewModel.Entries.Count - 1)
|
||||||
{
|
{
|
||||||
@ -209,35 +169,6 @@ namespace Hosts.Views
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Handle the keyboard shortcuts at list view level since
|
|
||||||
/// KeyboardAccelerators in FlyoutBase.AttachedFlyout works only when the flyout is open
|
|
||||||
/// </summary>
|
|
||||||
private async void Entries_KeyDown(object sender, KeyRoutedEventArgs e)
|
|
||||||
{
|
|
||||||
var listView = sender as ListView;
|
|
||||||
if (listView != null && e.KeyStatus.WasKeyDown == false)
|
|
||||||
{
|
|
||||||
var entry = listView.SelectedItem as Entry;
|
|
||||||
|
|
||||||
if (Microsoft.UI.Input.InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Control).HasFlag(CoreVirtualKeyStates.Down))
|
|
||||||
{
|
|
||||||
if (e.Key == VirtualKey.E)
|
|
||||||
{
|
|
||||||
await ShowEditDialogAsync(entry);
|
|
||||||
}
|
|
||||||
else if (e.Key == VirtualKey.P)
|
|
||||||
{
|
|
||||||
await PingAsync(entry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (e.Key == VirtualKey.Delete)
|
|
||||||
{
|
|
||||||
await ShowDeleteDialogAsync(entry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Focus the first item when the list view gets the focus with keyboard
|
/// Focus the first item when the list view gets the focus with keyboard
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -250,14 +181,10 @@ namespace Hosts.Views
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MenuFlyout_Opened(object sender, object e)
|
private void Entries_RightTapped(object sender, RightTappedRoutedEventArgs e)
|
||||||
{
|
{
|
||||||
// Focus the first item: required for workaround https://github.com/microsoft/PowerToys/issues/21263
|
var entry = (e.OriginalSource as FrameworkElement).DataContext as Entry;
|
||||||
var menuFlyout = sender as MenuFlyout;
|
ViewModel.Selected = entry;
|
||||||
if (menuFlyout != null && menuFlyout.Items.Count > 0)
|
|
||||||
{
|
|
||||||
menuFlyout.Items.First().Focus(FocusState.Programmatic);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -216,8 +216,16 @@
|
|||||||
<value>Hosts file was modified externally.</value>
|
<value>Hosts file was modified externally.</value>
|
||||||
<comment>"Hosts" refers to the system hosts file, do not loc</comment>
|
<comment>"Hosts" refers to the system hosts file, do not loc</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="FileSaveError.Message" xml:space="preserve">
|
<data name="FileSaveError_FileInUse" xml:space="preserve">
|
||||||
<value>Failed to save hosts file.</value>
|
<value>The hosts file cannot be saved because it is being used by another process.</value>
|
||||||
|
<comment>"Hosts" refers to the system hosts file, do not loc</comment>
|
||||||
|
</data>
|
||||||
|
<data name="FileSaveError_Generic" xml:space="preserve">
|
||||||
|
<value>Unable to save the hosts file.</value>
|
||||||
|
<comment>"Hosts" refers to the system hosts file, do not loc</comment>
|
||||||
|
</data>
|
||||||
|
<data name="FileSaveError_NotElevated" xml:space="preserve">
|
||||||
|
<value>The hosts file cannot be saved because the program isn't running as administrator.</value>
|
||||||
<comment>"Hosts" refers to the system hosts file, do not loc</comment>
|
<comment>"Hosts" refers to the system hosts file, do not loc</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="FilterBtn.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
<data name="FilterBtn.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||||
@ -299,8 +307,12 @@
|
|||||||
<data name="WarningDialog_Title" xml:space="preserve">
|
<data name="WarningDialog_Title" xml:space="preserve">
|
||||||
<value>Warning</value>
|
<value>Warning</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="WindowAdminTitle" xml:space="preserve">
|
||||||
|
<value>Administrator: Hosts File Editor</value>
|
||||||
|
<comment>Title of the window when running as administrator. "Hosts File Editor" is the name of the utility. "Hosts" refers to the system hosts file, do not loc</comment>
|
||||||
|
</data>
|
||||||
<data name="WindowTitle" xml:space="preserve">
|
<data name="WindowTitle" xml:space="preserve">
|
||||||
<value>Hosts File Editor</value>
|
<value>Hosts File Editor</value>
|
||||||
<comment>"Hosts File Editor" is the name of the utility. "Hosts" refers to the system hosts file, do not loc</comment>
|
<comment>Title of the window when running as user. "Hosts File Editor" is the name of the utility. "Hosts" refers to the system hosts file, do not loc</comment>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
@ -5,6 +5,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
@ -44,6 +45,9 @@ namespace Hosts.ViewModels
|
|||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private bool _error;
|
private bool _error;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
private string _errorMessage;
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private bool _fileChanged;
|
private bool _fileChanged;
|
||||||
|
|
||||||
@ -126,12 +130,7 @@ namespace Hosts.ViewModels
|
|||||||
public void UpdateAdditionalLines(string lines)
|
public void UpdateAdditionalLines(string lines)
|
||||||
{
|
{
|
||||||
AdditionalLines = lines;
|
AdditionalLines = lines;
|
||||||
|
_ = Task.Run(SaveAsync);
|
||||||
Task.Run(async () =>
|
|
||||||
{
|
|
||||||
var error = !await _hostsService.WriteAsync(AdditionalLines, _entries);
|
|
||||||
await _dispatcherQueue.EnqueueAsync(() => Error = error);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Move(int oldIndex, int newIndex)
|
public void Move(int oldIndex, int newIndex)
|
||||||
@ -287,20 +286,12 @@ namespace Hosts.ViewModels
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Task.Run(async () =>
|
_ = Task.Run(SaveAsync);
|
||||||
{
|
|
||||||
var error = !await _hostsService.WriteAsync(AdditionalLines, _entries);
|
|
||||||
await _dispatcherQueue.EnqueueAsync(() => Error = error);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Entries_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
|
private void Entries_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
|
||||||
{
|
{
|
||||||
Task.Run(async () =>
|
_ = Task.Run(SaveAsync);
|
||||||
{
|
|
||||||
var error = !await _hostsService.WriteAsync(AdditionalLines, _entries);
|
|
||||||
await _dispatcherQueue.EnqueueAsync(() => Error = error);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FindDuplicates(CancellationToken cancellationToken)
|
private void FindDuplicates(CancellationToken cancellationToken)
|
||||||
@ -379,6 +370,41 @@ namespace Hosts.ViewModels
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task SaveAsync()
|
||||||
|
{
|
||||||
|
bool error = true;
|
||||||
|
string errorMessage = string.Empty;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await _hostsService.WriteAsync(AdditionalLines, _entries);
|
||||||
|
error = false;
|
||||||
|
}
|
||||||
|
catch (NotRunningElevatedException)
|
||||||
|
{
|
||||||
|
var resourceLoader = ResourceLoaderInstance.ResourceLoader;
|
||||||
|
errorMessage = resourceLoader.GetString("FileSaveError_NotElevated");
|
||||||
|
}
|
||||||
|
catch (IOException ex) when ((ex.HResult & 0x0000FFFF) == 32)
|
||||||
|
{
|
||||||
|
// There are some edge cases where a big hosts file is being locked by svchost.exe https://github.com/microsoft/PowerToys/issues/28066
|
||||||
|
var resourceLoader = ResourceLoaderInstance.ResourceLoader;
|
||||||
|
errorMessage = resourceLoader.GetString("FileSaveError_FileInUse");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.LogError("Failed to save hosts file", ex);
|
||||||
|
var resourceLoader = ResourceLoaderInstance.ResourceLoader;
|
||||||
|
errorMessage = resourceLoader.GetString("FileSaveError_Generic");
|
||||||
|
}
|
||||||
|
|
||||||
|
await _dispatcherQueue.EnqueueAsync(() =>
|
||||||
|
{
|
||||||
|
Error = error;
|
||||||
|
ErrorMessage = errorMessage;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
protected virtual void Dispose(bool disposing)
|
protected virtual void Dispose(bool disposing)
|
||||||
{
|
{
|
||||||
if (!_disposed)
|
if (!_disposed)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<Target Name="GenerateResourceFiles" BeforeTargets="PrepareForBuild">
|
<Target Name="GenerateResourceFiles" BeforeTargets="PrepareForBuild">
|
||||||
<Exec Command="powershell -NonInteractive -executionpolicy Unrestricted $(SolutionDir)tools\build\convert-resx-to-rc.ps1 $(MSBuildThisFileDirectory) resource.base.h resource.h HostsModuleInterface.base.rc HostsModuleInterface.rc" />
|
<Exec Command="powershell -NonInteractive -executionpolicy Unrestricted $(SolutionDir)tools\build\convert-resx-to-rc.ps1 $(MSBuildThisFileDirectory) resource.base.h resource.h HostsModuleInterface.base.rc HostsModuleInterface.rc" />
|
||||||
</Target>
|
</Target>
|
||||||
@ -87,13 +87,13 @@
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<Import Project="..\..\..\..\deps\spdlog.props" />
|
<Import Project="..\..\..\..\deps\spdlog.props" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -132,7 +132,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_hShowAdminEvent = CreateDefaultEvent(CommonSharedConstants::SHOW_HOSTS_ADMIN_EVENT);
|
m_hShowAdminEvent = CreateDefaultEvent(CommonSharedConstants::SHOW_HOSTS_ADMIN_EVENT);
|
||||||
if (!m_hShowEvent)
|
if (!m_hShowAdminEvent)
|
||||||
{
|
{
|
||||||
Logger::error(L"Failed to create show hosts admin event");
|
Logger::error(L"Failed to create show hosts admin event");
|
||||||
auto message = get_last_error_message(GetLastError());
|
auto message = get_last_error_message(GetLastError());
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.1.3.230502000\build\native\Microsoft.WindowsAppSDK.props" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.1.3.230502000\build\native\Microsoft.WindowsAppSDK.props')" />
|
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.1.4.230822000\build\native\Microsoft.WindowsAppSDK.props" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.1.4.230822000\build\native\Microsoft.WindowsAppSDK.props')" />
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.22621.755\build\Microsoft.Windows.SDK.BuildTools.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.22621.755\build\Microsoft.Windows.SDK.BuildTools.props')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.22621.755\build\Microsoft.Windows.SDK.BuildTools.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.22621.755\build\Microsoft.Windows.SDK.BuildTools.props')" />
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<CppWinRTOptimized>true</CppWinRTOptimized>
|
<CppWinRTOptimized>true</CppWinRTOptimized>
|
||||||
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
|
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
|
||||||
@ -145,20 +145,20 @@
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.22621.755\build\Microsoft.Windows.SDK.BuildTools.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.22621.755\build\Microsoft.Windows.SDK.BuildTools.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.22621.755\build\Microsoft.Windows.SDK.BuildTools.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.22621.755\build\Microsoft.Windows.SDK.BuildTools.targets')" />
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.1.3.230502000\build\native\Microsoft.WindowsAppSDK.targets" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.1.3.230502000\build\native\Microsoft.WindowsAppSDK.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.1.4.230822000\build\native\Microsoft.WindowsAppSDK.targets" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.1.4.230822000\build\native\Microsoft.WindowsAppSDK.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.22621.755\build\Microsoft.Windows.SDK.BuildTools.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.22621.755\build\Microsoft.Windows.SDK.BuildTools.props'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.22621.755\build\Microsoft.Windows.SDK.BuildTools.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.22621.755\build\Microsoft.Windows.SDK.BuildTools.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.22621.755\build\Microsoft.Windows.SDK.BuildTools.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.22621.755\build\Microsoft.Windows.SDK.BuildTools.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.22621.755\build\Microsoft.Windows.SDK.BuildTools.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.22621.755\build\Microsoft.Windows.SDK.BuildTools.targets'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.1.3.230502000\build\native\Microsoft.WindowsAppSDK.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.WindowsAppSDK.1.3.230502000\build\native\Microsoft.WindowsAppSDK.props'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.1.4.230822000\build\native\Microsoft.WindowsAppSDK.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.WindowsAppSDK.1.4.230822000\build\native\Microsoft.WindowsAppSDK.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.1.3.230502000\build\native\Microsoft.WindowsAppSDK.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.WindowsAppSDK.1.3.230502000\build\native\Microsoft.WindowsAppSDK.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.1.4.230822000\build\native\Microsoft.WindowsAppSDK.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.WindowsAppSDK.1.4.230822000\build\native\Microsoft.WindowsAppSDK.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
<package id="Microsoft.Windows.ImplementationLibrary" version="1.0.220914.1" targetFramework="native" />
|
<package id="Microsoft.Windows.ImplementationLibrary" version="1.0.220914.1" targetFramework="native" />
|
||||||
<package id="Microsoft.Windows.SDK.BuildTools" version="10.0.22621.755" targetFramework="native" />
|
<package id="Microsoft.Windows.SDK.BuildTools" version="10.0.22621.755" targetFramework="native" />
|
||||||
<package id="Microsoft.WindowsAppSDK" version="1.3.230502000" targetFramework="native" />
|
<package id="Microsoft.WindowsAppSDK" version="1.4.230822000" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<VCProjectVersion>16.0</VCProjectVersion>
|
<VCProjectVersion>16.0</VCProjectVersion>
|
||||||
<ProjectGuid>{92C39820-9F84-4529-BC7D-22AAE514D63B}</ProjectGuid>
|
<ProjectGuid>{92C39820-9F84-4529-BC7D-22AAE514D63B}</ProjectGuid>
|
||||||
@ -82,13 +82,13 @@
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<Import Project="..\..\..\..\deps\spdlog.props" />
|
<Import Project="..\..\..\..\deps\spdlog.props" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<VCProjectVersion>15.0</VCProjectVersion>
|
<VCProjectVersion>15.0</VCProjectVersion>
|
||||||
<ProjectGuid>{e94fd11c-0591-456f-899f-efc0ca548336}</ProjectGuid>
|
<ProjectGuid>{e94fd11c-0591-456f-899f-efc0ca548336}</ProjectGuid>
|
||||||
@ -121,13 +121,13 @@
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<Import Project="..\..\..\..\deps\spdlog.props" />
|
<Import Project="..\..\..\..\deps\spdlog.props" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<VCProjectVersion>15.0</VCProjectVersion>
|
<VCProjectVersion>15.0</VCProjectVersion>
|
||||||
<ProjectGuid>{782a61be-9d85-4081-b35c-1ccc9dcc1e88}</ProjectGuid>
|
<ProjectGuid>{782a61be-9d85-4081-b35c-1ccc9dcc1e88}</ProjectGuid>
|
||||||
@ -119,13 +119,13 @@
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<Import Project="..\..\..\..\deps\spdlog.props" />
|
<Import Project="..\..\..\..\deps\spdlog.props" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<VCProjectVersion>15.0</VCProjectVersion>
|
<VCProjectVersion>15.0</VCProjectVersion>
|
||||||
<ProjectGuid>{8a08d663-4995-40e3-b42c-3f910625f284}</ProjectGuid>
|
<ProjectGuid>{8a08d663-4995-40e3-b42c-3f910625f284}</ProjectGuid>
|
||||||
@ -117,13 +117,13 @@
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<Import Project="..\..\..\..\deps\spdlog.props" />
|
<Import Project="..\..\..\..\deps\spdlog.props" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<VCProjectVersion>15.0</VCProjectVersion>
|
<VCProjectVersion>15.0</VCProjectVersion>
|
||||||
<ProjectGuid>{eae14c0e-7a6b-45da-9080-a7d8c077ba6e}</ProjectGuid>
|
<ProjectGuid>{eae14c0e-7a6b-45da-9080-a7d8c077ba6e}</ProjectGuid>
|
||||||
@ -119,13 +119,13 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<VCProjectVersion>15.0</VCProjectVersion>
|
<VCProjectVersion>15.0</VCProjectVersion>
|
||||||
<ProjectGuid>{2833C9C6-AB32-4048-A5C7-A70898337B57}</ProjectGuid>
|
<ProjectGuid>{2833C9C6-AB32-4048-A5C7-A70898337B57}</ProjectGuid>
|
||||||
|
@ -3,8 +3,18 @@
|
|||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:local="clr-namespace:PowerOCR"
|
xmlns:local="clr-namespace:PowerOCR"
|
||||||
ShutdownMode="OnExplicitShutdown"
|
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
|
||||||
Exit="Application_Exit"
|
Exit="Application_Exit"
|
||||||
|
ShutdownMode="OnExplicitShutdown"
|
||||||
Startup="Application_Startup">
|
Startup="Application_Startup">
|
||||||
<Application.Resources />
|
<Application.Resources>
|
||||||
|
<ResourceDictionary>
|
||||||
|
<ResourceDictionary.MergedDictionaries>
|
||||||
|
<ui:ThemesDictionary Theme="Dark" />
|
||||||
|
<ui:ControlsDictionary />
|
||||||
|
<ResourceDictionary Source="/Styles/Colors.xaml" />
|
||||||
|
<ResourceDictionary Source="/Styles/ButtonStyles.xaml" />
|
||||||
|
</ResourceDictionary.MergedDictionaries>
|
||||||
|
</ResourceDictionary>
|
||||||
|
</Application.Resources>
|
||||||
</Application>
|
</Application>
|
||||||
|
@ -6,7 +6,6 @@ using System;
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using ManagedCommon;
|
using ManagedCommon;
|
||||||
using PowerOCR.Helpers;
|
|
||||||
using PowerOCR.Keyboard;
|
using PowerOCR.Keyboard;
|
||||||
using PowerOCR.Settings;
|
using PowerOCR.Settings;
|
||||||
|
|
||||||
@ -67,10 +66,10 @@ public partial class App : Application, IDisposable
|
|||||||
{
|
{
|
||||||
Logger.LogInfo("PowerToys Runner exited. Exiting TextExtractor");
|
Logger.LogInfo("PowerToys Runner exited. Exiting TextExtractor");
|
||||||
NativeThreadCTS.Cancel();
|
NativeThreadCTS.Cancel();
|
||||||
Application.Current.Dispatcher.Invoke(() => Shutdown());
|
Current.Dispatcher.Invoke(() => Shutdown());
|
||||||
});
|
});
|
||||||
var userSettings = new UserSettings(new Helpers.ThrottledActionInvoker());
|
var userSettings = new UserSettings(new Helpers.ThrottledActionInvoker());
|
||||||
eventMonitor = new EventMonitor(Application.Current.Dispatcher, NativeThreadCTS.Token);
|
eventMonitor = new EventMonitor(Current.Dispatcher, NativeThreadCTS.Token);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -89,11 +88,7 @@ public partial class App : Application, IDisposable
|
|||||||
|
|
||||||
protected override void OnExit(ExitEventArgs e)
|
protected override void OnExit(ExitEventArgs e)
|
||||||
{
|
{
|
||||||
if (_instanceMutex != null)
|
_instanceMutex?.ReleaseMutex();
|
||||||
{
|
|
||||||
_instanceMutex.ReleaseMutex();
|
|
||||||
}
|
|
||||||
|
|
||||||
base.OnExit(e);
|
base.OnExit(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,19 +38,17 @@ internal sealed class ImageMethods
|
|||||||
int height = Math.Max(image.Height + 16, minH + 16);
|
int height = Math.Max(image.Height + 16, minH + 16);
|
||||||
|
|
||||||
// Create a compatible bitmap
|
// Create a compatible bitmap
|
||||||
Bitmap dest = new(width, height, image.PixelFormat);
|
Bitmap destination = new(width, height, image.PixelFormat);
|
||||||
using Graphics gd = Graphics.FromImage(dest);
|
using Graphics gd = Graphics.FromImage(destination);
|
||||||
|
|
||||||
gd.Clear(image.GetPixel(0, 0));
|
gd.Clear(image.GetPixel(0, 0));
|
||||||
gd.DrawImageUnscaled(image, 8, 8);
|
gd.DrawImageUnscaled(image, 8, 8);
|
||||||
|
|
||||||
return dest;
|
return destination;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static ImageSource GetWindowBoundsImage(Window passedWindow)
|
internal static ImageSource GetWindowBoundsImage(Window passedWindow)
|
||||||
{
|
{
|
||||||
bool isGrabFrame = false;
|
|
||||||
|
|
||||||
DpiScale dpi = VisualTreeHelper.GetDpi(passedWindow);
|
DpiScale dpi = VisualTreeHelper.GetDpi(passedWindow);
|
||||||
int windowWidth = (int)(passedWindow.ActualWidth * dpi.DpiScaleX);
|
int windowWidth = (int)(passedWindow.ActualWidth * dpi.DpiScaleX);
|
||||||
int windowHeight = (int)(passedWindow.ActualHeight * dpi.DpiScaleY);
|
int windowHeight = (int)(passedWindow.ActualHeight * dpi.DpiScaleY);
|
||||||
@ -59,14 +57,6 @@ internal sealed class ImageMethods
|
|||||||
int thisCorrectedLeft = (int)absPosPoint.X;
|
int thisCorrectedLeft = (int)absPosPoint.X;
|
||||||
int thisCorrectedTop = (int)absPosPoint.Y;
|
int thisCorrectedTop = (int)absPosPoint.Y;
|
||||||
|
|
||||||
if (isGrabFrame == true)
|
|
||||||
{
|
|
||||||
thisCorrectedLeft += (int)(2 * dpi.DpiScaleX);
|
|
||||||
thisCorrectedTop += (int)(26 * dpi.DpiScaleY);
|
|
||||||
windowWidth -= (int)(4 * dpi.DpiScaleX);
|
|
||||||
windowHeight -= (int)(70 * dpi.DpiScaleY);
|
|
||||||
}
|
|
||||||
|
|
||||||
using Bitmap bmp = new(windowWidth, windowHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
|
using Bitmap bmp = new(windowWidth, windowHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
|
||||||
using Graphics g = Graphics.FromImage(bmp);
|
using Graphics g = Graphics.FromImage(bmp);
|
||||||
|
|
||||||
@ -74,19 +64,67 @@ internal sealed class ImageMethods
|
|||||||
return BitmapToImageSource(bmp);
|
return BitmapToImageSource(bmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static async Task<string> GetRegionsText(Window? passedWindow, Rectangle selectedRegion, Language? preferredLanguage)
|
internal static Bitmap GetWindowBoundsBitmap(Window passedWindow)
|
||||||
{
|
{
|
||||||
Bitmap bmp = new(selectedRegion.Width, selectedRegion.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
|
DpiScale dpi = VisualTreeHelper.GetDpi(passedWindow);
|
||||||
|
int windowWidth = (int)(passedWindow.ActualWidth * dpi.DpiScaleX);
|
||||||
|
int windowHeight = (int)(passedWindow.ActualHeight * dpi.DpiScaleY);
|
||||||
|
|
||||||
|
System.Windows.Point absPosPoint = passedWindow.GetAbsolutePosition();
|
||||||
|
int thisCorrectedLeft = (int)absPosPoint.X;
|
||||||
|
int thisCorrectedTop = (int)absPosPoint.Y;
|
||||||
|
|
||||||
|
Bitmap bmp = new(
|
||||||
|
windowWidth,
|
||||||
|
windowHeight,
|
||||||
|
System.Drawing.Imaging.PixelFormat.Format32bppArgb);
|
||||||
using Graphics g = Graphics.FromImage(bmp);
|
using Graphics g = Graphics.FromImage(bmp);
|
||||||
|
|
||||||
System.Windows.Point absPosPoint = passedWindow == null ? default(System.Windows.Point) : passedWindow.GetAbsolutePosition();
|
g.CopyFromScreen(
|
||||||
|
thisCorrectedLeft,
|
||||||
|
thisCorrectedTop,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
bmp.Size,
|
||||||
|
CopyPixelOperation.SourceCopy);
|
||||||
|
|
||||||
|
return bmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static Bitmap GetRegionAsBitmap(Window passedWindow, Rectangle selectedRegion)
|
||||||
|
{
|
||||||
|
Bitmap bmp = new(
|
||||||
|
selectedRegion.Width,
|
||||||
|
selectedRegion.Height,
|
||||||
|
System.Drawing.Imaging.PixelFormat.Format32bppArgb);
|
||||||
|
|
||||||
|
using Graphics g = Graphics.FromImage(bmp);
|
||||||
|
|
||||||
|
System.Windows.Point absPosPoint = passedWindow.GetAbsolutePosition();
|
||||||
|
|
||||||
int thisCorrectedLeft = (int)absPosPoint.X + selectedRegion.Left;
|
int thisCorrectedLeft = (int)absPosPoint.X + selectedRegion.Left;
|
||||||
int thisCorrectedTop = (int)absPosPoint.Y + selectedRegion.Top;
|
int thisCorrectedTop = (int)absPosPoint.Y + selectedRegion.Top;
|
||||||
|
|
||||||
g.CopyFromScreen(thisCorrectedLeft, thisCorrectedTop, 0, 0, bmp.Size, CopyPixelOperation.SourceCopy);
|
g.CopyFromScreen(
|
||||||
|
thisCorrectedLeft,
|
||||||
|
thisCorrectedTop,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
bmp.Size,
|
||||||
|
CopyPixelOperation.SourceCopy);
|
||||||
|
|
||||||
bmp = PadImage(bmp);
|
bmp = PadImage(bmp);
|
||||||
|
return bmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static async Task<string> GetRegionsText(Window? passedWindow, Rectangle selectedRegion, Language? preferredLanguage)
|
||||||
|
{
|
||||||
|
if (passedWindow is null)
|
||||||
|
{
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bitmap bmp = GetRegionAsBitmap(passedWindow, selectedRegion);
|
||||||
string? resultText = await ExtractText(bmp, preferredLanguage);
|
string? resultText = await ExtractText(bmp, preferredLanguage);
|
||||||
|
|
||||||
return resultText != null ? resultText.Trim() : string.Empty;
|
return resultText != null ? resultText.Trim() : string.Empty;
|
||||||
@ -104,7 +142,7 @@ internal sealed class ImageMethods
|
|||||||
|
|
||||||
g.CopyFromScreen(thisCorrectedLeft, thisCorrectedTop, 0, 0, bmp.Size, CopyPixelOperation.SourceCopy);
|
g.CopyFromScreen(thisCorrectedLeft, thisCorrectedTop, 0, 0, bmp.Size, CopyPixelOperation.SourceCopy);
|
||||||
|
|
||||||
System.Windows.Point adjustedPoint = new System.Windows.Point(clickedPoint.X, clickedPoint.Y);
|
System.Windows.Point adjustedPoint = new(clickedPoint.X, clickedPoint.Y);
|
||||||
|
|
||||||
string resultText = await ExtractText(bmp, preferredLanguage, adjustedPoint);
|
string resultText = await ExtractText(bmp, preferredLanguage, adjustedPoint);
|
||||||
return resultText.Trim();
|
return resultText.Trim();
|
||||||
@ -145,6 +183,8 @@ internal sealed class ImageMethods
|
|||||||
OcrEngine ocrEngine = OcrEngine.TryCreateFromLanguage(selectedLanguage);
|
OcrEngine ocrEngine = OcrEngine.TryCreateFromLanguage(selectedLanguage);
|
||||||
OcrResult ocrResult = await ocrEngine.RecognizeAsync(softwareBmp);
|
OcrResult ocrResult = await ocrEngine.RecognizeAsync(softwareBmp);
|
||||||
|
|
||||||
|
await memoryStream.DisposeAsync();
|
||||||
|
await wrappingStream.DisposeAsync();
|
||||||
GC.Collect();
|
GC.Collect();
|
||||||
|
|
||||||
if (singlePoint == null)
|
if (singlePoint == null)
|
||||||
@ -156,7 +196,7 @@ internal sealed class ImageMethods
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Windows.Foundation.Point fPoint = new Windows.Foundation.Point(singlePoint.Value.X, singlePoint.Value.Y);
|
Windows.Foundation.Point fPoint = new(singlePoint.Value.X, singlePoint.Value.Y);
|
||||||
foreach (OcrLine ocrLine in ocrResult.Lines)
|
foreach (OcrLine ocrLine in ocrResult.Lines)
|
||||||
{
|
{
|
||||||
foreach (OcrWord ocrWord in ocrLine.Words)
|
foreach (OcrWord ocrWord in ocrLine.Words)
|
||||||
@ -188,10 +228,8 @@ internal sealed class ImageMethods
|
|||||||
|
|
||||||
return text.ToString();
|
return text.ToString();
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
return text.ToString();
|
||||||
return text.ToString();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Bitmap ScaleBitmapUniform(Bitmap passedBitmap, double scale)
|
public static Bitmap ScaleBitmapUniform(Bitmap passedBitmap, double scale)
|
||||||
@ -200,18 +238,21 @@ internal sealed class ImageMethods
|
|||||||
using WrappingStream wrappingStream = new(memoryStream);
|
using WrappingStream wrappingStream = new(memoryStream);
|
||||||
passedBitmap.Save(wrappingStream, ImageFormat.Bmp);
|
passedBitmap.Save(wrappingStream, ImageFormat.Bmp);
|
||||||
wrappingStream.Position = 0;
|
wrappingStream.Position = 0;
|
||||||
BitmapImage bitmapimage = new();
|
BitmapImage bitmapImage = new();
|
||||||
bitmapimage.BeginInit();
|
bitmapImage.BeginInit();
|
||||||
bitmapimage.StreamSource = wrappingStream;
|
bitmapImage.StreamSource = wrappingStream;
|
||||||
bitmapimage.CacheOption = BitmapCacheOption.OnLoad;
|
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
|
||||||
bitmapimage.EndInit();
|
bitmapImage.EndInit();
|
||||||
bitmapimage.Freeze();
|
bitmapImage.Freeze();
|
||||||
TransformedBitmap transformedBmp = new();
|
TransformedBitmap transformedBmp = new();
|
||||||
transformedBmp.BeginInit();
|
transformedBmp.BeginInit();
|
||||||
transformedBmp.Source = bitmapimage;
|
transformedBmp.Source = bitmapImage;
|
||||||
transformedBmp.Transform = new ScaleTransform(scale, scale);
|
transformedBmp.Transform = new ScaleTransform(scale, scale);
|
||||||
transformedBmp.EndInit();
|
transformedBmp.EndInit();
|
||||||
transformedBmp.Freeze();
|
transformedBmp.Freeze();
|
||||||
|
|
||||||
|
memoryStream.Dispose();
|
||||||
|
wrappingStream.Dispose();
|
||||||
GC.Collect();
|
GC.Collect();
|
||||||
return BitmapSourceToBitmap(transformedBmp);
|
return BitmapSourceToBitmap(transformedBmp);
|
||||||
}
|
}
|
||||||
@ -243,14 +284,17 @@ internal sealed class ImageMethods
|
|||||||
|
|
||||||
bitmap.Save(wrappingStream, ImageFormat.Bmp);
|
bitmap.Save(wrappingStream, ImageFormat.Bmp);
|
||||||
wrappingStream.Position = 0;
|
wrappingStream.Position = 0;
|
||||||
BitmapImage bitmapimage = new();
|
BitmapImage bitmapImage = new();
|
||||||
bitmapimage.BeginInit();
|
bitmapImage.BeginInit();
|
||||||
bitmapimage.StreamSource = wrappingStream;
|
bitmapImage.StreamSource = wrappingStream;
|
||||||
bitmapimage.CacheOption = BitmapCacheOption.OnLoad;
|
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
|
||||||
bitmapimage.EndInit();
|
bitmapImage.EndInit();
|
||||||
bitmapimage.Freeze();
|
bitmapImage.Freeze();
|
||||||
|
|
||||||
|
memoryStream.Dispose();
|
||||||
|
wrappingStream.Dispose();
|
||||||
GC.Collect();
|
GC.Collect();
|
||||||
return bitmapimage;
|
return bitmapImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Language? GetOCRLanguage()
|
public static Language? GetOCRLanguage()
|
||||||
|
@ -2,8 +2,19 @@
|
|||||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
// See the LICENSE file in the project root for more information.
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Imaging;
|
||||||
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using PowerOCR.Models;
|
||||||
|
using Windows.Globalization;
|
||||||
|
using Windows.Graphics.Imaging;
|
||||||
using Windows.Media.Ocr;
|
using Windows.Media.Ocr;
|
||||||
|
|
||||||
namespace PowerOCR.Helpers
|
namespace PowerOCR.Helpers
|
||||||
@ -50,5 +61,47 @@ namespace PowerOCR.Helpers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async Task<string> GetRegionsTextAsTableAsync(Window passedWindow, Rectangle regionScaled, Language? language)
|
||||||
|
{
|
||||||
|
if (language is null)
|
||||||
|
{
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bitmap bmp = ImageMethods.GetRegionAsBitmap(passedWindow, regionScaled);
|
||||||
|
|
||||||
|
bool scaleBMP = true;
|
||||||
|
|
||||||
|
if (bmp.Width * 1.5 > OcrEngine.MaxImageDimension)
|
||||||
|
{
|
||||||
|
scaleBMP = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
using Bitmap scaledBitmap = scaleBMP ? ImageMethods.ScaleBitmapUniform(bmp, 1.5) : ImageMethods.ScaleBitmapUniform(bmp, 1.0);
|
||||||
|
DpiScale dpiScale = VisualTreeHelper.GetDpi(passedWindow);
|
||||||
|
|
||||||
|
OcrResult ocrResult = await GetOcrResultFromImageAsync(scaledBitmap, language);
|
||||||
|
List<WordBorder> wordBorders = ResultTable.ParseOcrResultIntoWordBorders(ocrResult, dpiScale);
|
||||||
|
return ResultTable.GetWordsAsTable(wordBorders, dpiScale, LanguageHelper.IsLanguageSpaceJoining(language));
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static async Task<OcrResult> GetOcrResultFromImageAsync(Bitmap bmp, Language language)
|
||||||
|
{
|
||||||
|
await using MemoryStream memoryStream = new();
|
||||||
|
using WrappingStream wrappingStream = new(memoryStream);
|
||||||
|
|
||||||
|
bmp.Save(wrappingStream, ImageFormat.Bmp);
|
||||||
|
wrappingStream.Position = 0;
|
||||||
|
|
||||||
|
BitmapDecoder bmpDecoder = await BitmapDecoder.CreateAsync(wrappingStream.AsRandomAccessStream());
|
||||||
|
SoftwareBitmap softwareBmp = await bmpDecoder.GetSoftwareBitmapAsync();
|
||||||
|
|
||||||
|
await memoryStream.DisposeAsync();
|
||||||
|
await wrappingStream.DisposeAsync();
|
||||||
|
|
||||||
|
OcrEngine ocrEngine = OcrEngine.TryCreateFromLanguage(language);
|
||||||
|
return await ocrEngine.RecognizeAsync(softwareBmp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
44
src/modules/PowerOCR/PowerOCR/Helpers/StringHelpers.cs
Normal file
44
src/modules/PowerOCR/PowerOCR/Helpers/StringHelpers.cs
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation
|
||||||
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
namespace PowerOCR.Helpers;
|
||||||
|
|
||||||
|
internal static class StringHelpers
|
||||||
|
{
|
||||||
|
public static string MakeStringSingleLine(this string textToEdit)
|
||||||
|
{
|
||||||
|
if (!textToEdit.Contains('\n')
|
||||||
|
&& !textToEdit.Contains('\r'))
|
||||||
|
{
|
||||||
|
return textToEdit;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder workingString = new(textToEdit);
|
||||||
|
|
||||||
|
workingString.Replace("\r\n", " ");
|
||||||
|
workingString.Replace(Environment.NewLine, " ");
|
||||||
|
workingString.Replace('\n', ' ');
|
||||||
|
workingString.Replace('\r', ' ');
|
||||||
|
|
||||||
|
Regex regex = new("[ ]{2,}");
|
||||||
|
string temp = regex.Replace(workingString.ToString(), " ");
|
||||||
|
workingString.Clear();
|
||||||
|
workingString.Append(temp);
|
||||||
|
if (workingString[0] == ' ')
|
||||||
|
{
|
||||||
|
workingString.Remove(0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (workingString[workingString.Length - 1] == ' ')
|
||||||
|
{
|
||||||
|
workingString.Remove(workingString.Length - 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return workingString.ToString();
|
||||||
|
}
|
||||||
|
}
|
@ -2,11 +2,12 @@
|
|||||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
// See the LICENSE file in the project root for more information.
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using System.Windows.Input;
|
||||||
using ManagedCommon;
|
using ManagedCommon;
|
||||||
using Microsoft.PowerToys.Telemetry;
|
using Microsoft.PowerToys.Telemetry;
|
||||||
using PowerOCR.Helpers;
|
|
||||||
|
|
||||||
namespace PowerOCR.Utilities;
|
namespace PowerOCR.Utilities;
|
||||||
|
|
||||||
@ -20,33 +21,11 @@ public static class WindowUtilities
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Logger.LogInfo($"Adding Overlays for each screen");
|
||||||
foreach (Screen screen in Screen.AllScreens)
|
foreach (Screen screen in Screen.AllScreens)
|
||||||
{
|
{
|
||||||
OCROverlay overlay = new OCROverlay()
|
Logger.LogInfo($"screen {screen}");
|
||||||
{
|
OCROverlay overlay = new(screen.Bounds);
|
||||||
WindowStartupLocation = WindowStartupLocation.Manual,
|
|
||||||
Width = 200,
|
|
||||||
Height = 200,
|
|
||||||
WindowState = WindowState.Normal,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (screen.WorkingArea.Left >= 0)
|
|
||||||
{
|
|
||||||
overlay.Left = screen.WorkingArea.Left;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
overlay.Left = screen.WorkingArea.Left + (screen.WorkingArea.Width / 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (screen.WorkingArea.Top >= 0)
|
|
||||||
{
|
|
||||||
overlay.Top = screen.WorkingArea.Top;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
overlay.Top = screen.WorkingArea.Top + (screen.WorkingArea.Height / 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
overlay.Show();
|
overlay.Show();
|
||||||
ActivateWindow(overlay);
|
ActivateWindow(overlay);
|
||||||
@ -61,7 +40,7 @@ public static class WindowUtilities
|
|||||||
|
|
||||||
foreach (Window window in allWindows)
|
foreach (Window window in allWindows)
|
||||||
{
|
{
|
||||||
if (window is OCROverlay overlay)
|
if (window is OCROverlay)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -82,6 +61,8 @@ public static class WindowUtilities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GC.Collect();
|
||||||
|
|
||||||
// TODO: Decide when to close the process
|
// TODO: Decide when to close the process
|
||||||
// System.Windows.Application.Current.Shutdown();
|
// System.Windows.Application.Current.Shutdown();
|
||||||
}
|
}
|
||||||
@ -105,4 +86,23 @@ public static class WindowUtilities
|
|||||||
OSInterop.SetForegroundWindow(handle);
|
OSInterop.SetForegroundWindow(handle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal static void OcrOverlayKeyDown(Key key, bool? isActive = null)
|
||||||
|
{
|
||||||
|
WindowCollection allWindows = System.Windows.Application.Current.Windows;
|
||||||
|
|
||||||
|
if (key == Key.Escape)
|
||||||
|
{
|
||||||
|
PowerToysTelemetry.Log.WriteEvent(new PowerOCR.Telemetry.PowerOCRCancelledEvent());
|
||||||
|
CloseAllOCROverlays();
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (Window window in allWindows)
|
||||||
|
{
|
||||||
|
if (window is OCROverlay overlay)
|
||||||
|
{
|
||||||
|
overlay.KeyPressed(key, isActive);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
16
src/modules/PowerOCR/PowerOCR/Models/ResultColumn.cs
Normal file
16
src/modules/PowerOCR/PowerOCR/Models/ResultColumn.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation
|
||||||
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
namespace PowerOCR.Models;
|
||||||
|
|
||||||
|
public struct ResultColumn
|
||||||
|
{
|
||||||
|
public double Width { get; set; }
|
||||||
|
|
||||||
|
public double Left { get; set; }
|
||||||
|
|
||||||
|
public double Right { get; set; }
|
||||||
|
|
||||||
|
public int ID { get; set; }
|
||||||
|
}
|
16
src/modules/PowerOCR/PowerOCR/Models/ResultRow.cs
Normal file
16
src/modules/PowerOCR/PowerOCR/Models/ResultRow.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation
|
||||||
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
namespace PowerOCR.Models;
|
||||||
|
|
||||||
|
public struct ResultRow
|
||||||
|
{
|
||||||
|
public double Height { get; set; }
|
||||||
|
|
||||||
|
public double Top { get; set; }
|
||||||
|
|
||||||
|
public double Bottom { get; set; }
|
||||||
|
|
||||||
|
public int ID { get; set; }
|
||||||
|
}
|
642
src/modules/PowerOCR/PowerOCR/Models/ResultTable.cs
Normal file
642
src/modules/PowerOCR/PowerOCR/Models/ResultTable.cs
Normal file
@ -0,0 +1,642 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation
|
||||||
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using PowerOCR.Helpers;
|
||||||
|
using Windows.Media.Ocr;
|
||||||
|
using Rect = System.Windows.Rect;
|
||||||
|
|
||||||
|
namespace PowerOCR.Models;
|
||||||
|
|
||||||
|
public class ResultTable
|
||||||
|
{
|
||||||
|
public List<ResultColumn> Columns { get; set; } = new();
|
||||||
|
|
||||||
|
public List<ResultRow> Rows { get; set; } = new();
|
||||||
|
|
||||||
|
public Rect BoundingRect { get; set; }
|
||||||
|
|
||||||
|
public List<int> ColumnLines { get; set; } = new();
|
||||||
|
|
||||||
|
public List<int> RowLines { get; set; } = new();
|
||||||
|
|
||||||
|
public Canvas? TableLines { get; set; }
|
||||||
|
|
||||||
|
public ResultTable(ref List<WordBorder> wordBorders, DpiScale dpiScale)
|
||||||
|
{
|
||||||
|
int borderBuffer = 3;
|
||||||
|
var leftsMin = wordBorders.Select(x => x.Left).Min();
|
||||||
|
var topsMin = wordBorders.Select(x => x.Top).Min();
|
||||||
|
var rightsMax = wordBorders.Select(x => x.Right).Max();
|
||||||
|
var bottomsMax = wordBorders.Select(x => x.Bottom).Max();
|
||||||
|
|
||||||
|
Rectangle bordersBorder = new()
|
||||||
|
{
|
||||||
|
X = (int)leftsMin - borderBuffer,
|
||||||
|
Y = (int)topsMin - borderBuffer,
|
||||||
|
Width = (int)(rightsMax + borderBuffer),
|
||||||
|
Height = (int)(bottomsMax + borderBuffer),
|
||||||
|
};
|
||||||
|
|
||||||
|
bordersBorder.Width = (int)(bordersBorder.Width * dpiScale.DpiScaleX);
|
||||||
|
bordersBorder.Height = (int)(bordersBorder.Height * dpiScale.DpiScaleY);
|
||||||
|
|
||||||
|
AnalyzeAsTable(wordBorders, bordersBorder);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ParseRowAndColumnLines()
|
||||||
|
{
|
||||||
|
// Draw Bounding Rect
|
||||||
|
int topBound = 0;
|
||||||
|
int bottomBound = topBound;
|
||||||
|
int leftBound = 0;
|
||||||
|
int rightBound = leftBound;
|
||||||
|
|
||||||
|
if (Rows.Count >= 1)
|
||||||
|
{
|
||||||
|
topBound = (int)Rows[0].Top;
|
||||||
|
bottomBound = (int)Rows[Rows.Count - 1].Bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Columns.Count >= 1)
|
||||||
|
{
|
||||||
|
leftBound = (int)Columns[0].Left;
|
||||||
|
rightBound = (int)Columns[Columns.Count - 1].Right;
|
||||||
|
}
|
||||||
|
|
||||||
|
BoundingRect = new()
|
||||||
|
{
|
||||||
|
Width = (rightBound - leftBound) + 10,
|
||||||
|
Height = (bottomBound - topBound) + 10,
|
||||||
|
X = leftBound - 5,
|
||||||
|
Y = topBound - 5,
|
||||||
|
};
|
||||||
|
|
||||||
|
// parse columns
|
||||||
|
ColumnLines = new();
|
||||||
|
|
||||||
|
for (int i = 0; i < Columns.Count - 1; i++)
|
||||||
|
{
|
||||||
|
int columnMid = (int)(Columns[i].Right + Columns[i + 1].Left) / 2;
|
||||||
|
ColumnLines.Add(columnMid);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parse rows
|
||||||
|
RowLines = new();
|
||||||
|
|
||||||
|
for (int i = 0; i < Rows.Count - 1; i++)
|
||||||
|
{
|
||||||
|
int rowMid = (int)(Rows[i].Bottom + Rows[i + 1].Top) / 2;
|
||||||
|
RowLines.Add(rowMid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<WordBorder> ParseOcrResultIntoWordBorders(OcrResult ocrResult, DpiScale dpi)
|
||||||
|
{
|
||||||
|
List<WordBorder> wordBorders = new();
|
||||||
|
int lineNumber = 0;
|
||||||
|
|
||||||
|
foreach (OcrLine ocrLine in ocrResult.Lines)
|
||||||
|
{
|
||||||
|
double top = ocrLine.Words.Select(x => x.BoundingRect.Top).Min();
|
||||||
|
double bottom = ocrLine.Words.Select(x => x.BoundingRect.Bottom).Max();
|
||||||
|
double left = ocrLine.Words.Select(x => x.BoundingRect.Left).Min();
|
||||||
|
double right = ocrLine.Words.Select(x => x.BoundingRect.Right).Max();
|
||||||
|
|
||||||
|
Rect lineRect = new()
|
||||||
|
{
|
||||||
|
X = left,
|
||||||
|
Y = top,
|
||||||
|
Width = Math.Abs(right - left),
|
||||||
|
Height = Math.Abs(bottom - top),
|
||||||
|
};
|
||||||
|
|
||||||
|
StringBuilder lineText = new();
|
||||||
|
ocrLine.GetTextFromOcrLine(true, lineText);
|
||||||
|
|
||||||
|
WordBorder wordBorderBox = new()
|
||||||
|
{
|
||||||
|
Width = lineRect.Width / dpi.DpiScaleX,
|
||||||
|
Height = lineRect.Height / dpi.DpiScaleY,
|
||||||
|
Top = lineRect.Y,
|
||||||
|
Left = lineRect.X,
|
||||||
|
Word = lineText.ToString().Trim(),
|
||||||
|
LineNumber = lineNumber,
|
||||||
|
};
|
||||||
|
wordBorders.Add(wordBorderBox);
|
||||||
|
|
||||||
|
lineNumber++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return wordBorders;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AnalyzeAsTable(ICollection<WordBorder> wordBorders, Rectangle rectCanvasSize)
|
||||||
|
{
|
||||||
|
int hitGridSpacing = 3;
|
||||||
|
|
||||||
|
int numberOfVerticalLines = rectCanvasSize.Width / hitGridSpacing;
|
||||||
|
int numberOfHorizontalLines = rectCanvasSize.Height / hitGridSpacing;
|
||||||
|
|
||||||
|
Canvas tableIntersectionCanvas = new();
|
||||||
|
|
||||||
|
List<int> rowAreas = CalculateRowAreas(rectCanvasSize, hitGridSpacing, numberOfHorizontalLines, tableIntersectionCanvas, wordBorders);
|
||||||
|
List<ResultRow> resultRows = CalculateResultRows(hitGridSpacing, rowAreas);
|
||||||
|
|
||||||
|
List<int> columnAreas = CalculateColumnAreas(rectCanvasSize, hitGridSpacing, numberOfVerticalLines, tableIntersectionCanvas, wordBorders);
|
||||||
|
List<ResultColumn> resultColumns = CalculateResultColumns(hitGridSpacing, columnAreas);
|
||||||
|
|
||||||
|
Rect tableBoundingRect = new()
|
||||||
|
{
|
||||||
|
X = columnAreas.FirstOrDefault(),
|
||||||
|
Y = rowAreas.FirstOrDefault(),
|
||||||
|
Width = columnAreas.LastOrDefault() - columnAreas.FirstOrDefault(),
|
||||||
|
Height = rowAreas.LastOrDefault() - rowAreas.FirstOrDefault(),
|
||||||
|
};
|
||||||
|
|
||||||
|
CombineOutliers(wordBorders, resultRows, tableIntersectionCanvas, resultColumns, tableBoundingRect);
|
||||||
|
|
||||||
|
Rows.Clear();
|
||||||
|
Rows.AddRange(resultRows);
|
||||||
|
Columns.Clear();
|
||||||
|
Columns.AddRange(resultColumns);
|
||||||
|
|
||||||
|
ParseRowAndColumnLines();
|
||||||
|
DrawTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<ResultRow> CalculateResultRows(int hitGridSpacing, List<int> rowAreas)
|
||||||
|
{
|
||||||
|
List<ResultRow> resultRows = new();
|
||||||
|
int rowTop = 0;
|
||||||
|
int rowCount = 0;
|
||||||
|
for (int i = 0; i < rowAreas.Count; i++)
|
||||||
|
{
|
||||||
|
int thisLine = rowAreas[i];
|
||||||
|
|
||||||
|
// check if should set this as top
|
||||||
|
if (i == 0)
|
||||||
|
{
|
||||||
|
rowTop = thisLine;
|
||||||
|
}
|
||||||
|
else if (i - 1 > 0)
|
||||||
|
{
|
||||||
|
int prevRow = rowAreas[i - 1];
|
||||||
|
if (thisLine - prevRow != hitGridSpacing)
|
||||||
|
{
|
||||||
|
rowTop = thisLine;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check to see if at bottom of row
|
||||||
|
if (i == rowAreas.Count - 1)
|
||||||
|
{
|
||||||
|
resultRows.Add(new ResultRow { Top = rowTop, Bottom = thisLine, ID = rowCount });
|
||||||
|
rowCount++;
|
||||||
|
}
|
||||||
|
else if (i + 1 < rowAreas.Count)
|
||||||
|
{
|
||||||
|
int nextRow = rowAreas[i + 1];
|
||||||
|
if (nextRow - thisLine != hitGridSpacing)
|
||||||
|
{
|
||||||
|
resultRows.Add(new ResultRow { Top = rowTop, Bottom = thisLine, ID = rowCount });
|
||||||
|
rowCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultRows;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<int> CalculateRowAreas(Rectangle rectCanvasSize, int hitGridSpacing, int numberOfHorizontalLines, Canvas tableIntersectionCanvas, ICollection<WordBorder> wordBorders)
|
||||||
|
{
|
||||||
|
List<int> rowAreas = new();
|
||||||
|
|
||||||
|
for (int i = 0; i < numberOfHorizontalLines; i++)
|
||||||
|
{
|
||||||
|
Border horizontalLine = new()
|
||||||
|
{
|
||||||
|
Height = 1,
|
||||||
|
Width = rectCanvasSize.Width,
|
||||||
|
Opacity = 0,
|
||||||
|
Background = new SolidColorBrush(Colors.Gray),
|
||||||
|
};
|
||||||
|
Rect horizontalLineRect = new(0, i * hitGridSpacing, horizontalLine.Width, horizontalLine.Height);
|
||||||
|
_ = tableIntersectionCanvas.Children.Add(horizontalLine);
|
||||||
|
Canvas.SetTop(horizontalLine, i * 3);
|
||||||
|
|
||||||
|
CheckIntersectionsWithWordBorders(hitGridSpacing, wordBorders, rowAreas, i, horizontalLineRect);
|
||||||
|
}
|
||||||
|
|
||||||
|
return rowAreas;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void CheckIntersectionsWithWordBorders(int hitGridSpacing, ICollection<WordBorder> wordBorders, ICollection<int> rowAreas, int i, Rect horizontalLineRect)
|
||||||
|
{
|
||||||
|
foreach (WordBorder wb in wordBorders)
|
||||||
|
{
|
||||||
|
if (wb.IntersectsWith(horizontalLineRect))
|
||||||
|
{
|
||||||
|
rowAreas.Add(i * hitGridSpacing);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void CombineOutliers(ICollection<WordBorder> wordBorders, List<ResultRow> resultRows, Canvas tableIntersectionCanvas, List<ResultColumn> resultColumns, Rect tableBoundingRect)
|
||||||
|
{
|
||||||
|
// try 4 times to refine the rows and columns for outliers
|
||||||
|
// on the fifth time set the word boundary properties
|
||||||
|
for (int r = 0; r < 5; r++)
|
||||||
|
{
|
||||||
|
int outlierThreshold = 2;
|
||||||
|
List<int> outlierRowIDs = FindOutlierRowIds(wordBorders, resultRows, tableIntersectionCanvas, tableBoundingRect, r, outlierThreshold);
|
||||||
|
|
||||||
|
if (outlierRowIDs.Count > 0)
|
||||||
|
{
|
||||||
|
MergeTheseRowIDs(resultRows, outlierRowIDs);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<int> outlierColumnIDs = FindOutlierColumnIds(wordBorders, tableIntersectionCanvas, resultColumns, tableBoundingRect, outlierThreshold);
|
||||||
|
|
||||||
|
if (outlierColumnIDs.Count > 0 && r != 4)
|
||||||
|
{
|
||||||
|
MergeTheseColumnIDs(resultColumns, outlierColumnIDs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<int> FindOutlierRowIds(
|
||||||
|
ICollection<WordBorder> wordBorders,
|
||||||
|
ICollection<ResultRow> resultRows,
|
||||||
|
Canvas tableIntersectionCanvas,
|
||||||
|
Rect tableBoundingRect,
|
||||||
|
int r,
|
||||||
|
int outlierThreshold)
|
||||||
|
{
|
||||||
|
List<int> outlierRowIDs = new();
|
||||||
|
|
||||||
|
foreach (ResultRow row in resultRows)
|
||||||
|
{
|
||||||
|
int numberOfIntersectingWords = 0;
|
||||||
|
Border rowBorder = new()
|
||||||
|
{
|
||||||
|
Height = row.Bottom - row.Top,
|
||||||
|
Width = tableBoundingRect.Width,
|
||||||
|
Background = new SolidColorBrush(Colors.Red),
|
||||||
|
Tag = row.ID,
|
||||||
|
};
|
||||||
|
tableIntersectionCanvas.Children.Add(rowBorder);
|
||||||
|
Canvas.SetLeft(rowBorder, tableBoundingRect.X);
|
||||||
|
Canvas.SetTop(rowBorder, row.Top);
|
||||||
|
|
||||||
|
Rect rowRect = new(tableBoundingRect.X, row.Top, rowBorder.Width, rowBorder.Height);
|
||||||
|
|
||||||
|
foreach (WordBorder wb in wordBorders)
|
||||||
|
{
|
||||||
|
if (wb.IntersectsWith(rowRect))
|
||||||
|
{
|
||||||
|
numberOfIntersectingWords++;
|
||||||
|
wb.ResultRowID = row.ID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (numberOfIntersectingWords <= outlierThreshold && r != 4)
|
||||||
|
{
|
||||||
|
outlierRowIDs.Add(row.ID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return outlierRowIDs;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<int> FindOutlierColumnIds(
|
||||||
|
ICollection<WordBorder> wordBorders,
|
||||||
|
Canvas tableIntersectionCanvas,
|
||||||
|
List<ResultColumn> resultColumns,
|
||||||
|
Rect tableBoundingRect,
|
||||||
|
int outlierThreshold)
|
||||||
|
{
|
||||||
|
List<int> outlierColumnIDs = new();
|
||||||
|
|
||||||
|
foreach (ResultColumn column in resultColumns)
|
||||||
|
{
|
||||||
|
int numberOfIntersectingWords = 0;
|
||||||
|
Border columnBorder = new()
|
||||||
|
{
|
||||||
|
Height = tableBoundingRect.Height,
|
||||||
|
Width = column.Right - column.Left,
|
||||||
|
Background = new SolidColorBrush(Colors.Blue),
|
||||||
|
Opacity = 0.2,
|
||||||
|
Tag = column.ID,
|
||||||
|
};
|
||||||
|
tableIntersectionCanvas.Children.Add(columnBorder);
|
||||||
|
Canvas.SetLeft(columnBorder, column.Left);
|
||||||
|
Canvas.SetTop(columnBorder, tableBoundingRect.Y);
|
||||||
|
|
||||||
|
Rect columnRect = new(column.Left, tableBoundingRect.Y, columnBorder.Width, columnBorder.Height);
|
||||||
|
foreach (WordBorder wb in wordBorders)
|
||||||
|
{
|
||||||
|
if (wb.IntersectsWith(columnRect))
|
||||||
|
{
|
||||||
|
numberOfIntersectingWords++;
|
||||||
|
wb.ResultColumnID = column.ID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (numberOfIntersectingWords <= outlierThreshold)
|
||||||
|
{
|
||||||
|
outlierColumnIDs.Add(column.ID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return outlierColumnIDs;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<ResultColumn> CalculateResultColumns(int hitGridSpacing, List<int> columnAreas)
|
||||||
|
{
|
||||||
|
List<ResultColumn> resultColumns = new();
|
||||||
|
int columnLeft = 0;
|
||||||
|
int columnCount = 0;
|
||||||
|
for (int i = 0; i < columnAreas.Count; i++)
|
||||||
|
{
|
||||||
|
int thisLine = columnAreas[i];
|
||||||
|
|
||||||
|
// check if should set this as top
|
||||||
|
if (i == 0)
|
||||||
|
{
|
||||||
|
columnLeft = thisLine;
|
||||||
|
}
|
||||||
|
else if (i - 1 > 0)
|
||||||
|
{
|
||||||
|
int prevColumn = columnAreas[i - 1];
|
||||||
|
if (thisLine - prevColumn != hitGridSpacing)
|
||||||
|
{
|
||||||
|
columnLeft = thisLine;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check to see if at last Column
|
||||||
|
if (i == columnAreas.Count - 1)
|
||||||
|
{
|
||||||
|
resultColumns.Add(new ResultColumn { Left = columnLeft, Right = thisLine, ID = columnCount });
|
||||||
|
columnCount++;
|
||||||
|
}
|
||||||
|
else if (i + 1 < columnAreas.Count)
|
||||||
|
{
|
||||||
|
int nextColumn = columnAreas[i + 1];
|
||||||
|
if (nextColumn - thisLine != hitGridSpacing)
|
||||||
|
{
|
||||||
|
resultColumns.Add(new ResultColumn { Left = columnLeft, Right = thisLine, ID = columnCount });
|
||||||
|
columnCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultColumns;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<int> CalculateColumnAreas(Rectangle rectCanvasSize, int hitGridSpacing, int numberOfVerticalLines, Canvas tableIntersectionCanvas, ICollection<WordBorder> wordBorders)
|
||||||
|
{
|
||||||
|
List<int> columnAreas = new();
|
||||||
|
for (int i = 0; i < numberOfVerticalLines; i++)
|
||||||
|
{
|
||||||
|
Border vertLine = new()
|
||||||
|
{
|
||||||
|
Height = rectCanvasSize.Height,
|
||||||
|
Width = 1,
|
||||||
|
Opacity = 0,
|
||||||
|
Background = new SolidColorBrush(Colors.Gray),
|
||||||
|
};
|
||||||
|
_ = tableIntersectionCanvas.Children.Add(vertLine);
|
||||||
|
Canvas.SetLeft(vertLine, i * hitGridSpacing);
|
||||||
|
|
||||||
|
Rect vertLineRect = new(i * hitGridSpacing, 0, vertLine.Width, vertLine.Height);
|
||||||
|
|
||||||
|
foreach (WordBorder wb in wordBorders)
|
||||||
|
{
|
||||||
|
if (wb.IntersectsWith(vertLineRect))
|
||||||
|
{
|
||||||
|
columnAreas.Add(i * hitGridSpacing);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return columnAreas;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void MergeTheseColumnIDs(List<ResultColumn> resultColumns, List<int> outlierColumnIDs)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < outlierColumnIDs.Count; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < resultColumns.Count; j++)
|
||||||
|
{
|
||||||
|
ResultColumn column = resultColumns[j];
|
||||||
|
if (column.ID == outlierColumnIDs[i])
|
||||||
|
{
|
||||||
|
if (j == 0)
|
||||||
|
{
|
||||||
|
// merge with next column if possible
|
||||||
|
if (j + 1 < resultColumns.Count)
|
||||||
|
{
|
||||||
|
ResultColumn nextColumn = resultColumns[j + 1];
|
||||||
|
nextColumn.Left = column.Left;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (j == resultColumns.Count - 1)
|
||||||
|
{
|
||||||
|
// merge with previous column
|
||||||
|
if (j - 1 >= 0)
|
||||||
|
{
|
||||||
|
ResultColumn prevColumn = resultColumns[j - 1];
|
||||||
|
prevColumn.Right = column.Right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// merge with closet column
|
||||||
|
ResultColumn prevColumn = resultColumns[j - 1];
|
||||||
|
ResultColumn nextColumn = resultColumns[j + 1];
|
||||||
|
int distanceToPrev = (int)(column.Left - prevColumn.Right);
|
||||||
|
int distanceToNext = (int)(nextColumn.Left - column.Right);
|
||||||
|
|
||||||
|
if (distanceToNext < distanceToPrev)
|
||||||
|
{
|
||||||
|
// merge with next column
|
||||||
|
nextColumn.Left = column.Left;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// merge with prev column
|
||||||
|
prevColumn.Right = column.Right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resultColumns.RemoveAt(j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void GetTextFromTabledWordBorders(StringBuilder stringBuilder, List<WordBorder> wordBorders, bool isSpaceJoining)
|
||||||
|
{
|
||||||
|
List<WordBorder>? selectedBorders = wordBorders.Where(w => w.IsSelected).ToList();
|
||||||
|
|
||||||
|
if (selectedBorders.Count == 0)
|
||||||
|
{
|
||||||
|
selectedBorders.AddRange(wordBorders);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<string> lineList = new();
|
||||||
|
int? lastLineNum = 0;
|
||||||
|
int lastColumnNum = 0;
|
||||||
|
|
||||||
|
if (selectedBorders.FirstOrDefault() != null)
|
||||||
|
{
|
||||||
|
lastLineNum = selectedBorders.FirstOrDefault()!.LineNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
selectedBorders = selectedBorders.OrderBy(x => x.ResultColumnID).ToList();
|
||||||
|
selectedBorders = selectedBorders.OrderBy(x => x.ResultRowID).ToList();
|
||||||
|
|
||||||
|
int numberOfDistinctRows = selectedBorders.Select(x => x.ResultRowID).Distinct().Count();
|
||||||
|
|
||||||
|
foreach (WordBorder border in selectedBorders)
|
||||||
|
{
|
||||||
|
if (lineList.Count == 0)
|
||||||
|
{
|
||||||
|
lastLineNum = border.ResultRowID;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (border.ResultRowID != lastLineNum)
|
||||||
|
{
|
||||||
|
if (isSpaceJoining)
|
||||||
|
{
|
||||||
|
stringBuilder.Append(string.Join(' ', lineList));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
stringBuilder.Append(string.Join(string.Empty, lineList));
|
||||||
|
}
|
||||||
|
|
||||||
|
stringBuilder.Replace(" \t ", "\t");
|
||||||
|
stringBuilder.Replace("\t ", "\t");
|
||||||
|
stringBuilder.Replace(" \t", "\t");
|
||||||
|
stringBuilder.Append(Environment.NewLine);
|
||||||
|
lineList.Clear();
|
||||||
|
lastLineNum = border.ResultRowID;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (border.ResultColumnID != lastColumnNum && numberOfDistinctRows > 1)
|
||||||
|
{
|
||||||
|
string borderWord = border.Word;
|
||||||
|
int numberOfOffColumns = border.ResultColumnID - lastColumnNum;
|
||||||
|
if (numberOfOffColumns < 0)
|
||||||
|
{
|
||||||
|
lastColumnNum = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
numberOfOffColumns = border.ResultColumnID - lastColumnNum;
|
||||||
|
|
||||||
|
if (numberOfOffColumns > 0)
|
||||||
|
{
|
||||||
|
lineList.Add(new string('\t', numberOfOffColumns));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lastColumnNum = border.ResultColumnID;
|
||||||
|
|
||||||
|
lineList.Add(border.Word);
|
||||||
|
}
|
||||||
|
|
||||||
|
stringBuilder.Append(string.Join(string.Empty, lineList));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void MergeTheseRowIDs(List<ResultRow> resultRows, List<int> outlierRowIDs)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DrawTable()
|
||||||
|
{
|
||||||
|
// Draw the lines and bounds of the table
|
||||||
|
SolidColorBrush tableColor = new(System.Windows.Media.Color.FromArgb(255, 40, 118, 126));
|
||||||
|
|
||||||
|
TableLines = new Canvas()
|
||||||
|
{
|
||||||
|
Tag = "TableLines",
|
||||||
|
};
|
||||||
|
|
||||||
|
Border tableOutline = new()
|
||||||
|
{
|
||||||
|
Width = this.BoundingRect.Width,
|
||||||
|
Height = this.BoundingRect.Height,
|
||||||
|
BorderThickness = new Thickness(3),
|
||||||
|
BorderBrush = tableColor,
|
||||||
|
};
|
||||||
|
TableLines.Children.Add(tableOutline);
|
||||||
|
Canvas.SetTop(tableOutline, this.BoundingRect.Y);
|
||||||
|
Canvas.SetLeft(tableOutline, this.BoundingRect.X);
|
||||||
|
|
||||||
|
foreach (int columnLine in this.ColumnLines)
|
||||||
|
{
|
||||||
|
Border vertLine = new()
|
||||||
|
{
|
||||||
|
Width = 2,
|
||||||
|
Height = this.BoundingRect.Height,
|
||||||
|
Background = tableColor,
|
||||||
|
};
|
||||||
|
TableLines.Children.Add(vertLine);
|
||||||
|
Canvas.SetTop(vertLine, this.BoundingRect.Y);
|
||||||
|
Canvas.SetLeft(vertLine, columnLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (int rowLine in this.RowLines)
|
||||||
|
{
|
||||||
|
Border horizontalLine = new()
|
||||||
|
{
|
||||||
|
Height = 2,
|
||||||
|
Width = this.BoundingRect.Width,
|
||||||
|
Background = tableColor,
|
||||||
|
};
|
||||||
|
TableLines.Children.Add(horizontalLine);
|
||||||
|
Canvas.SetTop(horizontalLine, rowLine);
|
||||||
|
Canvas.SetLeft(horizontalLine, this.BoundingRect.X);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string GetWordsAsTable(List<WordBorder> wordBorders, DpiScale dpiScale, bool isSpaceJoining)
|
||||||
|
{
|
||||||
|
List<WordBorder> smallerBorders = new();
|
||||||
|
foreach (WordBorder originalWB in wordBorders)
|
||||||
|
{
|
||||||
|
WordBorder newWB = new()
|
||||||
|
{
|
||||||
|
Word = originalWB.Word,
|
||||||
|
Left = originalWB.Left,
|
||||||
|
Top = originalWB.Top,
|
||||||
|
Width = originalWB.Width > 10 ? originalWB.Width - 6 : originalWB.Width,
|
||||||
|
Height = originalWB.Height > 10 ? originalWB.Height - 6 : originalWB.Height,
|
||||||
|
ResultRowID = originalWB.ResultRowID,
|
||||||
|
ResultColumnID = originalWB.ResultColumnID,
|
||||||
|
};
|
||||||
|
smallerBorders.Add(newWB);
|
||||||
|
}
|
||||||
|
|
||||||
|
ResultTable resultTable = new(ref smallerBorders, dpiScale);
|
||||||
|
StringBuilder stringBuilder = new();
|
||||||
|
GetTextFromTabledWordBorders(
|
||||||
|
stringBuilder,
|
||||||
|
smallerBorders,
|
||||||
|
isSpaceJoining);
|
||||||
|
return stringBuilder.ToString();
|
||||||
|
}
|
||||||
|
}
|
42
src/modules/PowerOCR/PowerOCR/Models/WordBorder.cs
Normal file
42
src/modules/PowerOCR/PowerOCR/Models/WordBorder.cs
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
// Copyright (c) Microsoft Corporation
|
||||||
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System.Windows;
|
||||||
|
|
||||||
|
namespace PowerOCR.Models;
|
||||||
|
|
||||||
|
public class WordBorder
|
||||||
|
{
|
||||||
|
public bool IsSelected { get; set; }
|
||||||
|
|
||||||
|
public string Word { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public double Top { get; set; }
|
||||||
|
|
||||||
|
public double Left { get; set; }
|
||||||
|
|
||||||
|
public double Width { get; set; }
|
||||||
|
|
||||||
|
public double Height { get; set; }
|
||||||
|
|
||||||
|
public int LineNumber { get; set; }
|
||||||
|
|
||||||
|
public double Right => Left + Width;
|
||||||
|
|
||||||
|
public double Bottom => Top + Height;
|
||||||
|
|
||||||
|
public int ResultRowID { get; set; }
|
||||||
|
|
||||||
|
public int ResultColumnID { get; set; }
|
||||||
|
|
||||||
|
public Rect AsRect()
|
||||||
|
{
|
||||||
|
return new Rect(Left, Top, Width, Height);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IntersectsWith(Rect rect)
|
||||||
|
{
|
||||||
|
return rect.IntersectsWith(AsRect());
|
||||||
|
}
|
||||||
|
}
|
@ -5,19 +5,40 @@
|
|||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:local="clr-namespace:PowerOCR"
|
xmlns:local="clr-namespace:PowerOCR"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
|
||||||
Title="TextExtractor"
|
Title="TextExtractor"
|
||||||
Width="800"
|
Width="200"
|
||||||
Height="450"
|
Height="200"
|
||||||
ShowActivated="False"
|
|
||||||
ShowInTaskbar="False"
|
|
||||||
AllowsTransparency="True"
|
AllowsTransparency="True"
|
||||||
Background="Transparent"
|
Background="Transparent"
|
||||||
Loaded="Window_Loaded"
|
Loaded="Window_Loaded"
|
||||||
Unloaded="Window_Unloaded"
|
|
||||||
ResizeMode="NoResize"
|
ResizeMode="NoResize"
|
||||||
|
ShowActivated="False"
|
||||||
|
ShowInTaskbar="False"
|
||||||
Topmost="True"
|
Topmost="True"
|
||||||
|
Unloaded="Window_Unloaded"
|
||||||
|
WindowStartupLocation="Manual"
|
||||||
|
WindowState="Normal"
|
||||||
WindowStyle="None"
|
WindowStyle="None"
|
||||||
mc:Ignorable="d">
|
mc:Ignorable="d">
|
||||||
|
|
||||||
|
<Window.Resources>
|
||||||
|
<Style x:Key="SymbolTextStyle" TargetType="TextBlock">
|
||||||
|
<Setter Property="HorizontalAlignment" Value="Center" />
|
||||||
|
<Setter Property="VerticalAlignment" Value="Center" />
|
||||||
|
<Setter Property="FontFamily" Value="Segoe MDL2 Assets" />
|
||||||
|
<Setter Property="FontSize" Value="16" />
|
||||||
|
<Setter Property="Margin" Value="4" />
|
||||||
|
</Style>
|
||||||
|
<Style TargetType="ToggleButton">
|
||||||
|
<Setter Property="Margin" Value="2,0" />
|
||||||
|
<Setter Property="VerticalAlignment" Value="Center" />
|
||||||
|
<Setter Property="HorizontalAlignment" Value="Center" />
|
||||||
|
<Setter Property="Width" Value="30" />
|
||||||
|
<Setter Property="Height" Value="30" />
|
||||||
|
</Style>
|
||||||
|
</Window.Resources>
|
||||||
|
|
||||||
<Grid>
|
<Grid>
|
||||||
<Viewbox>
|
<Viewbox>
|
||||||
<Image x:Name="BackgroundImage" Stretch="UniformToFill" />
|
<Image x:Name="BackgroundImage" Stretch="UniformToFill" />
|
||||||
@ -45,8 +66,115 @@
|
|||||||
Color="Black" />
|
Color="Black" />
|
||||||
</Canvas.Background>
|
</Canvas.Background>
|
||||||
<Canvas.ContextMenu>
|
<Canvas.ContextMenu>
|
||||||
<ContextMenu x:Name="CanvasContextMenu" />
|
<ContextMenu x:Name="CanvasContextMenu">
|
||||||
|
<MenuItem
|
||||||
|
Name="SingleLineMenuItem"
|
||||||
|
Click="SingleLineMenuItem_Click"
|
||||||
|
Header="Make Result Text Single Line"
|
||||||
|
IsCheckable="True" />
|
||||||
|
<MenuItem
|
||||||
|
Name="TableMenuItem"
|
||||||
|
Click="TableToggleButton_Click"
|
||||||
|
Header="OCR text as a table"
|
||||||
|
IsCheckable="True" />
|
||||||
|
<Separator />
|
||||||
|
<MenuItem
|
||||||
|
Name="SettingsMenuItem"
|
||||||
|
Click="SettingsMenuItem_Click"
|
||||||
|
Header="Settings" />
|
||||||
|
<Separator />
|
||||||
|
<MenuItem
|
||||||
|
Name="CancelMenuItem"
|
||||||
|
Click="CancelMenuItem_Click"
|
||||||
|
Header="Cancel" />
|
||||||
|
</ContextMenu>
|
||||||
</Canvas.ContextMenu>
|
</Canvas.ContextMenu>
|
||||||
</Canvas>
|
</Canvas>
|
||||||
|
<Border
|
||||||
|
x:Name="TopButtonsStackPanel"
|
||||||
|
Margin="12"
|
||||||
|
Padding="4,8,12,8"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Top"
|
||||||
|
d:Background="White"
|
||||||
|
d:Visibility="Visible"
|
||||||
|
Background="{DynamicResource ApplicationBackgroundBrush}"
|
||||||
|
CornerRadius="8"
|
||||||
|
Visibility="Collapsed">
|
||||||
|
<Border.Effect>
|
||||||
|
<DropShadowEffect
|
||||||
|
BlurRadius="32"
|
||||||
|
Direction="-90"
|
||||||
|
Opacity="0.6"
|
||||||
|
RenderingBias="Performance" />
|
||||||
|
</Border.Effect>
|
||||||
|
<StackPanel
|
||||||
|
Margin="2,0"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Top"
|
||||||
|
Orientation="Horizontal">
|
||||||
|
<ComboBox
|
||||||
|
x:Name="LanguagesComboBox"
|
||||||
|
Margin="2,0"
|
||||||
|
Padding="4,2,0,2"
|
||||||
|
Foreground="{DynamicResource TextFillColorPrimaryBrush}"
|
||||||
|
SelectionChanged="LanguagesComboBox_SelectionChanged">
|
||||||
|
<ComboBox.ItemTemplate>
|
||||||
|
<DataTemplate>
|
||||||
|
<TextBlock
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
FontFamily="Segoe UI"
|
||||||
|
Style="{StaticResource SymbolTextStyle}"
|
||||||
|
Text="{Binding NativeName}" />
|
||||||
|
</DataTemplate>
|
||||||
|
</ComboBox.ItemTemplate>
|
||||||
|
</ComboBox>
|
||||||
|
<ToggleButton
|
||||||
|
x:Name="SingleLineToggleButton"
|
||||||
|
Width="34"
|
||||||
|
Height="34"
|
||||||
|
Margin="2,0"
|
||||||
|
d:IsChecked="True"
|
||||||
|
Click="SingleLineMenuItem_Click"
|
||||||
|
IsChecked="{Binding IsChecked, ElementName=SingleLineMenuItem, Mode=TwoWay}"
|
||||||
|
Style="{StaticResource ToggleSymbolButton}"
|
||||||
|
ToolTip="(S) Make result a single line">
|
||||||
|
<TextBlock Style="{StaticResource SymbolTextStyle}" Text="" />
|
||||||
|
</ToggleButton>
|
||||||
|
<ToggleButton
|
||||||
|
x:Name="TableToggleButton"
|
||||||
|
Width="34"
|
||||||
|
Height="34"
|
||||||
|
Margin="2,0"
|
||||||
|
d:IsChecked="True"
|
||||||
|
Click="TableToggleButton_Click"
|
||||||
|
IsChecked="{Binding IsChecked, ElementName=TableMenuItem, Mode=TwoWay}"
|
||||||
|
Style="{StaticResource ToggleSymbolButton}"
|
||||||
|
ToolTip="(T) OCR text as a table">
|
||||||
|
<TextBlock FontFamily="Segoe MDL2 Assets" Text="" />
|
||||||
|
</ToggleButton>
|
||||||
|
<Button
|
||||||
|
x:Name="SettingsButton"
|
||||||
|
Width="34"
|
||||||
|
Height="34"
|
||||||
|
Margin="2,0"
|
||||||
|
Click="SettingsMenuItem_Click"
|
||||||
|
Style="{StaticResource SymbolButton}"
|
||||||
|
ToolTip="Settings">
|
||||||
|
<TextBlock Style="{StaticResource SymbolTextStyle}" Text="" />
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
x:Name="CancelButton"
|
||||||
|
Width="34"
|
||||||
|
Height="34"
|
||||||
|
Margin="2,0,0,0"
|
||||||
|
Click="CancelMenuItem_Click"
|
||||||
|
Style="{StaticResource SymbolButton}"
|
||||||
|
ToolTip="(Esc) Cancel">
|
||||||
|
<TextBlock Style="{StaticResource SymbolTextStyle}" Text="" />
|
||||||
|
</Button>
|
||||||
|
</StackPanel>
|
||||||
|
</Border>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Window>
|
</Window>
|
||||||
|
@ -7,8 +7,10 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Controls.Primitives;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
|
using Common.UI;
|
||||||
using ManagedCommon;
|
using ManagedCommon;
|
||||||
using Microsoft.PowerToys.Telemetry;
|
using Microsoft.PowerToys.Telemetry;
|
||||||
using PowerOCR.Helpers;
|
using PowerOCR.Helpers;
|
||||||
@ -27,37 +29,32 @@ public partial class OCROverlay : Window
|
|||||||
private bool isShiftDown;
|
private bool isShiftDown;
|
||||||
private Point clickedPoint;
|
private Point clickedPoint;
|
||||||
private Point shiftPoint;
|
private Point shiftPoint;
|
||||||
|
private Border selectBorder = new();
|
||||||
|
private Language? selectedLanguage;
|
||||||
|
|
||||||
private bool IsSelecting { get; set; }
|
private bool IsSelecting { get; set; }
|
||||||
|
|
||||||
private Border selectBorder = new();
|
|
||||||
|
|
||||||
private DpiScale? dpiScale;
|
|
||||||
|
|
||||||
private Point GetMousePos() => PointToScreen(Mouse.GetPosition(this));
|
|
||||||
|
|
||||||
private Language? selectedLanguage;
|
|
||||||
private MenuItem cancelMenuItem;
|
|
||||||
|
|
||||||
private System.Windows.Forms.Screen? CurrentScreen
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
set;
|
|
||||||
}
|
|
||||||
|
|
||||||
private double selectLeft;
|
private double selectLeft;
|
||||||
private double selectTop;
|
private double selectTop;
|
||||||
|
|
||||||
private double xShiftDelta;
|
private double xShiftDelta;
|
||||||
private double yShiftDelta;
|
private double yShiftDelta;
|
||||||
|
private bool isComboBoxReady;
|
||||||
private const double ActiveOpacity = 0.4;
|
private const double ActiveOpacity = 0.4;
|
||||||
|
private readonly UserSettings userSettings = new(new ThrottledActionInvoker());
|
||||||
|
|
||||||
public OCROverlay()
|
public OCROverlay(System.Drawing.Rectangle screenRectangle)
|
||||||
{
|
{
|
||||||
|
Left = screenRectangle.Left >= 0 ? screenRectangle.Left : screenRectangle.Left + (screenRectangle.Width / 2);
|
||||||
|
Top = screenRectangle.Top >= 0 ? screenRectangle.Top : screenRectangle.Top + (screenRectangle.Height / 2);
|
||||||
|
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
var userSettings = new UserSettings(new ThrottledActionInvoker());
|
PopulateLanguageMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PopulateLanguageMenu()
|
||||||
|
{
|
||||||
string? selectedLanguageName = userSettings.PreferredLanguage.Value;
|
string? selectedLanguageName = userSettings.PreferredLanguage.Value;
|
||||||
|
|
||||||
// build context menu
|
// build context menu
|
||||||
@ -68,25 +65,26 @@ public partial class OCROverlay : Window
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<Language> possibleOcrLanguages = OcrEngine.AvailableRecognizerLanguages.ToList();
|
List<Language> possibleOcrLanguages = OcrEngine.AvailableRecognizerLanguages.ToList();
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
foreach (Language language in possibleOcrLanguages)
|
foreach (Language language in possibleOcrLanguages)
|
||||||
{
|
{
|
||||||
MenuItem menuItem = new() { Header = language.NativeName, Tag = language, IsCheckable = true };
|
MenuItem menuItem = new() { Header = language.NativeName, Tag = language, IsCheckable = true };
|
||||||
menuItem.IsChecked = language.DisplayName.Equals(selectedLanguageName, StringComparison.Ordinal);
|
menuItem.IsChecked = language.DisplayName.Equals(selectedLanguageName, StringComparison.Ordinal);
|
||||||
|
LanguagesComboBox.Items.Add(language);
|
||||||
if (language.DisplayName.Equals(selectedLanguageName, StringComparison.Ordinal))
|
if (language.DisplayName.Equals(selectedLanguageName, StringComparison.Ordinal))
|
||||||
{
|
{
|
||||||
selectedLanguage = language;
|
selectedLanguage = language;
|
||||||
|
LanguagesComboBox.SelectedIndex = count;
|
||||||
}
|
}
|
||||||
|
|
||||||
menuItem.Click += LanguageMenuItem_Click;
|
menuItem.Click += LanguageMenuItem_Click;
|
||||||
CanvasContextMenu.Items.Add(menuItem);
|
CanvasContextMenu.Items.Add(menuItem);
|
||||||
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
CanvasContextMenu.Items.Add(new Separator());
|
isComboBoxReady = true;
|
||||||
|
|
||||||
// ResourceLoader resourceLoader = ResourceLoader.GetForViewIndependentUse(); // resourceLoader.GetString("TextExtractor_Cancel")
|
|
||||||
cancelMenuItem = new MenuItem() { Header = "cancel" };
|
|
||||||
cancelMenuItem.Click += CancelMenuItem_Click;
|
|
||||||
CanvasContextMenu.Items.Add(cancelMenuItem);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LanguageMenuItem_Click(object sender, RoutedEventArgs e)
|
private void LanguageMenuItem_Click(object sender, RoutedEventArgs e)
|
||||||
@ -101,6 +99,7 @@ public partial class OCROverlay : Window
|
|||||||
}
|
}
|
||||||
|
|
||||||
selectedLanguage = menuItem.Tag as Language;
|
selectedLanguage = menuItem.Tag as Language;
|
||||||
|
LanguagesComboBox.SelectedItem = selectedLanguage;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Window_Loaded(object sender, RoutedEventArgs e)
|
private void Window_Loaded(object sender, RoutedEventArgs e)
|
||||||
@ -112,6 +111,12 @@ public partial class OCROverlay : Window
|
|||||||
|
|
||||||
BackgroundImage.Source = ImageMethods.GetWindowBoundsImage(this);
|
BackgroundImage.Source = ImageMethods.GetWindowBoundsImage(this);
|
||||||
BackgroundBrush.Opacity = ActiveOpacity;
|
BackgroundBrush.Opacity = ActiveOpacity;
|
||||||
|
|
||||||
|
TopButtonsStackPanel.Visibility = Visibility.Visible;
|
||||||
|
|
||||||
|
#if DEBUG
|
||||||
|
Topmost = false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Window_Unloaded(object sender, RoutedEventArgs e)
|
private void Window_Unloaded(object sender, RoutedEventArgs e)
|
||||||
@ -119,9 +124,6 @@ public partial class OCROverlay : Window
|
|||||||
BackgroundImage.Source = null;
|
BackgroundImage.Source = null;
|
||||||
BackgroundImage.UpdateLayout();
|
BackgroundImage.UpdateLayout();
|
||||||
|
|
||||||
CurrentScreen = null;
|
|
||||||
dpiScale = null;
|
|
||||||
|
|
||||||
KeyDown -= MainWindow_KeyDown;
|
KeyDown -= MainWindow_KeyDown;
|
||||||
KeyUp -= MainWindow_KeyUp;
|
KeyUp -= MainWindow_KeyUp;
|
||||||
|
|
||||||
@ -131,8 +133,6 @@ public partial class OCROverlay : Window
|
|||||||
RegionClickCanvas.MouseDown -= RegionClickCanvas_MouseDown;
|
RegionClickCanvas.MouseDown -= RegionClickCanvas_MouseDown;
|
||||||
RegionClickCanvas.MouseUp -= RegionClickCanvas_MouseUp;
|
RegionClickCanvas.MouseUp -= RegionClickCanvas_MouseUp;
|
||||||
RegionClickCanvas.MouseMove -= RegionClickCanvas_MouseMove;
|
RegionClickCanvas.MouseMove -= RegionClickCanvas_MouseMove;
|
||||||
|
|
||||||
cancelMenuItem.Click -= CancelMenuItem_Click;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MainWindow_KeyUp(object sender, KeyEventArgs e)
|
private void MainWindow_KeyUp(object sender, KeyEventArgs e)
|
||||||
@ -151,15 +151,7 @@ public partial class OCROverlay : Window
|
|||||||
|
|
||||||
private void MainWindow_KeyDown(object sender, KeyEventArgs e)
|
private void MainWindow_KeyDown(object sender, KeyEventArgs e)
|
||||||
{
|
{
|
||||||
switch (e.Key)
|
WindowUtilities.OcrOverlayKeyDown(e.Key);
|
||||||
{
|
|
||||||
case Key.Escape:
|
|
||||||
WindowUtilities.CloseAllOCROverlays();
|
|
||||||
PowerToysTelemetry.Log.WriteEvent(new PowerOCR.Telemetry.PowerOCRCancelledEvent());
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RegionClickCanvas_MouseDown(object sender, MouseButtonEventArgs e)
|
private void RegionClickCanvas_MouseDown(object sender, MouseButtonEventArgs e)
|
||||||
@ -169,6 +161,7 @@ public partial class OCROverlay : Window
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TopButtonsStackPanel.Visibility = Visibility.Collapsed;
|
||||||
RegionClickCanvas.CaptureMouse();
|
RegionClickCanvas.CaptureMouse();
|
||||||
|
|
||||||
CursorClipper.ClipCursor(this);
|
CursorClipper.ClipCursor(this);
|
||||||
@ -176,8 +169,6 @@ public partial class OCROverlay : Window
|
|||||||
selectBorder.Height = 1;
|
selectBorder.Height = 1;
|
||||||
selectBorder.Width = 1;
|
selectBorder.Width = 1;
|
||||||
|
|
||||||
dpiScale = VisualTreeHelper.GetDpi(this);
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
RegionClickCanvas.Children.Remove(selectBorder);
|
RegionClickCanvas.Children.Remove(selectBorder);
|
||||||
@ -193,17 +184,6 @@ public partial class OCROverlay : Window
|
|||||||
Canvas.SetLeft(selectBorder, clickedPoint.X);
|
Canvas.SetLeft(selectBorder, clickedPoint.X);
|
||||||
Canvas.SetTop(selectBorder, clickedPoint.Y);
|
Canvas.SetTop(selectBorder, clickedPoint.Y);
|
||||||
|
|
||||||
var screens = System.Windows.Forms.Screen.AllScreens;
|
|
||||||
System.Drawing.Point formsPoint = new((int)clickedPoint.X, (int)clickedPoint.Y);
|
|
||||||
foreach (var scr in screens)
|
|
||||||
{
|
|
||||||
if (scr.Bounds.Contains(formsPoint))
|
|
||||||
{
|
|
||||||
CurrentScreen = scr;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
IsSelecting = true;
|
IsSelecting = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -232,18 +212,6 @@ public partial class OCROverlay : Window
|
|||||||
double leftValue = selectLeft + xShiftDelta;
|
double leftValue = selectLeft + xShiftDelta;
|
||||||
double topValue = selectTop + yShiftDelta;
|
double topValue = selectTop + yShiftDelta;
|
||||||
|
|
||||||
if (CurrentScreen is not null && dpiScale is not null)
|
|
||||||
{
|
|
||||||
double currentScreenLeft = CurrentScreen.Bounds.Left; // Should always be 0
|
|
||||||
double currentScreenRight = CurrentScreen.Bounds.Right / dpiScale.Value.DpiScaleX;
|
|
||||||
double currentScreenTop = CurrentScreen.Bounds.Top; // Should always be 0
|
|
||||||
double currentScreenBottom = CurrentScreen.Bounds.Bottom / dpiScale.Value.DpiScaleY;
|
|
||||||
|
|
||||||
// this is giving issues on different monitors
|
|
||||||
// leftValue = Math.Clamp(leftValue, currentScreenLeft, currentScreenRight - selectBorder.Width);
|
|
||||||
// topValue = Math.Clamp(topValue, currentScreenTop, currentScreenBottom - selectBorder.Height);
|
|
||||||
}
|
|
||||||
|
|
||||||
clippingGeometry.Rect = new Rect(
|
clippingGeometry.Rect = new Rect(
|
||||||
new Point(leftValue, topValue),
|
new Point(leftValue, topValue),
|
||||||
new Size(selectBorder.Width, selectBorder.Height));
|
new Size(selectBorder.Width, selectBorder.Height));
|
||||||
@ -276,14 +244,13 @@ public partial class OCROverlay : Window
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TopButtonsStackPanel.Visibility = Visibility.Visible;
|
||||||
IsSelecting = false;
|
IsSelecting = false;
|
||||||
|
|
||||||
CurrentScreen = null;
|
|
||||||
CursorClipper.UnClipCursor();
|
CursorClipper.UnClipCursor();
|
||||||
RegionClickCanvas.ReleaseMouseCapture();
|
RegionClickCanvas.ReleaseMouseCapture();
|
||||||
Matrix m = PresentationSource.FromVisual(this).CompositionTarget.TransformToDevice;
|
Matrix m = PresentationSource.FromVisual(this).CompositionTarget.TransformToDevice;
|
||||||
|
|
||||||
Point mPt = GetMousePos();
|
|
||||||
Point movingPoint = e.GetPosition(this);
|
Point movingPoint = e.GetPosition(this);
|
||||||
movingPoint.X *= m.M11;
|
movingPoint.X *= m.M11;
|
||||||
movingPoint.Y *= m.M22;
|
movingPoint.Y *= m.M22;
|
||||||
@ -313,27 +280,47 @@ public partial class OCROverlay : Window
|
|||||||
|
|
||||||
if (regionScaled.Width < 3 || regionScaled.Height < 3)
|
if (regionScaled.Width < 3 || regionScaled.Height < 3)
|
||||||
{
|
{
|
||||||
|
BackgroundBrush.Opacity = 0;
|
||||||
|
Logger.LogInfo($"Getting clicked word, {selectedLanguage?.LanguageTag}");
|
||||||
grabbedText = await ImageMethods.GetClickedWord(this, new Point(xDimScaled, yDimScaled), selectedLanguage);
|
grabbedText = await ImageMethods.GetClickedWord(this, new Point(xDimScaled, yDimScaled), selectedLanguage);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
grabbedText = await ImageMethods.GetRegionsText(this, regionScaled, selectedLanguage);
|
if (TableMenuItem.IsChecked)
|
||||||
|
{
|
||||||
|
Logger.LogInfo($"Getting region as table, {selectedLanguage?.LanguageTag}");
|
||||||
|
grabbedText = await OcrExtensions.GetRegionsTextAsTableAsync(this, regionScaled, selectedLanguage);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Logger.LogInfo($"Standard region capture, {selectedLanguage?.LanguageTag}");
|
||||||
|
grabbedText = await ImageMethods.GetRegionsText(this, regionScaled, selectedLanguage);
|
||||||
|
|
||||||
|
if (SingleLineMenuItem.IsChecked)
|
||||||
|
{
|
||||||
|
Logger.LogInfo($"Making grabbed text single line");
|
||||||
|
grabbedText = grabbedText.MakeStringSingleLine();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(grabbedText) == false)
|
if (string.IsNullOrWhiteSpace(grabbedText))
|
||||||
{
|
{
|
||||||
try
|
BackgroundBrush.Opacity = ActiveOpacity;
|
||||||
{
|
return;
|
||||||
Clipboard.SetText(grabbedText);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Logger.LogError($"Clipboard.SetText exception: {ex}");
|
|
||||||
}
|
|
||||||
|
|
||||||
WindowUtilities.CloseAllOCROverlays();
|
|
||||||
PowerToysTelemetry.Log.WriteEvent(new PowerOCR.Telemetry.PowerOCRCaptureEvent());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Clipboard.SetText(grabbedText);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.LogError($"Clipboard.SetText exception: {ex}");
|
||||||
|
}
|
||||||
|
|
||||||
|
WindowUtilities.CloseAllOCROverlays();
|
||||||
|
PowerToysTelemetry.Log.WriteEvent(new PowerOCR.Telemetry.PowerOCRCaptureEvent());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CancelMenuItem_Click(object sender, RoutedEventArgs e)
|
private void CancelMenuItem_Click(object sender, RoutedEventArgs e)
|
||||||
@ -341,4 +328,150 @@ public partial class OCROverlay : Window
|
|||||||
WindowUtilities.CloseAllOCROverlays();
|
WindowUtilities.CloseAllOCROverlays();
|
||||||
PowerToysTelemetry.Log.WriteEvent(new PowerOCR.Telemetry.PowerOCRCancelledEvent());
|
PowerToysTelemetry.Log.WriteEvent(new PowerOCR.Telemetry.PowerOCRCancelledEvent());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void LanguagesComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||||
|
{
|
||||||
|
if (sender is not ComboBox languageComboBox || !isComboBoxReady)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Set the preferred language based upon what was chosen here
|
||||||
|
int selection = languageComboBox.SelectedIndex;
|
||||||
|
selectedLanguage = languageComboBox.SelectedItem as Language;
|
||||||
|
|
||||||
|
Logger.LogError($"Changed language to {selectedLanguage?.LanguageTag}");
|
||||||
|
|
||||||
|
// Set the language in the context menu
|
||||||
|
foreach (var item in CanvasContextMenu.Items)
|
||||||
|
{
|
||||||
|
if (item is MenuItem menuItemLoop)
|
||||||
|
{
|
||||||
|
menuItemLoop.IsChecked = menuItemLoop.Tag as Language == selectedLanguage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (selection)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
WindowUtilities.OcrOverlayKeyDown(Key.D1);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
WindowUtilities.OcrOverlayKeyDown(Key.D2);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
WindowUtilities.OcrOverlayKeyDown(Key.D3);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
WindowUtilities.OcrOverlayKeyDown(Key.D4);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
WindowUtilities.OcrOverlayKeyDown(Key.D5);
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
WindowUtilities.OcrOverlayKeyDown(Key.D6);
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
WindowUtilities.OcrOverlayKeyDown(Key.D7);
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
WindowUtilities.OcrOverlayKeyDown(Key.D8);
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
WindowUtilities.OcrOverlayKeyDown(Key.D9);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SingleLineMenuItem_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
bool isActive = CheckIfCheckingOrUnchecking(sender);
|
||||||
|
WindowUtilities.OcrOverlayKeyDown(Key.S, isActive);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TableToggleButton_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
bool isActive = CheckIfCheckingOrUnchecking(sender);
|
||||||
|
WindowUtilities.OcrOverlayKeyDown(Key.T, isActive);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SettingsMenuItem_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
WindowUtilities.CloseAllOCROverlays();
|
||||||
|
SettingsDeepLink.OpenSettings(SettingsDeepLink.SettingsWindow.PowerOCR, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool CheckIfCheckingOrUnchecking(object? sender)
|
||||||
|
{
|
||||||
|
if (sender is ToggleButton tb && tb.IsChecked is not null)
|
||||||
|
{
|
||||||
|
return tb.IsChecked.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sender is MenuItem mi)
|
||||||
|
{
|
||||||
|
return mi.IsChecked;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void KeyPressed(Key key, bool? isActive)
|
||||||
|
{
|
||||||
|
switch (key)
|
||||||
|
{
|
||||||
|
// This case is handled in the WindowUtilities.OcrOverlayKeyDown
|
||||||
|
// case Key.Escape:
|
||||||
|
// WindowUtilities.CloseAllFullscreenGrabs();
|
||||||
|
// break;
|
||||||
|
case Key.S:
|
||||||
|
if (isActive is null)
|
||||||
|
{
|
||||||
|
SingleLineMenuItem.IsChecked = !SingleLineMenuItem.IsChecked;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SingleLineMenuItem.IsChecked = isActive.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Possibly save this in settings later and remember this preference
|
||||||
|
break;
|
||||||
|
case Key.T:
|
||||||
|
if (isActive is null)
|
||||||
|
{
|
||||||
|
TableToggleButton.IsChecked = !TableToggleButton.IsChecked;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TableToggleButton.IsChecked = isActive.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case Key.D1:
|
||||||
|
case Key.D2:
|
||||||
|
case Key.D3:
|
||||||
|
case Key.D4:
|
||||||
|
case Key.D5:
|
||||||
|
case Key.D6:
|
||||||
|
case Key.D7:
|
||||||
|
case Key.D8:
|
||||||
|
case Key.D9:
|
||||||
|
int numberPressed = (int)key - 34; // D1 casts to 35, D2 to 36, etc.
|
||||||
|
int numberOfLanguages = LanguagesComboBox.Items.Count;
|
||||||
|
|
||||||
|
if (numberPressed <= numberOfLanguages
|
||||||
|
&& numberPressed - 1 >= 0
|
||||||
|
&& numberPressed - 1 != LanguagesComboBox.SelectedIndex
|
||||||
|
&& isComboBoxReady)
|
||||||
|
{
|
||||||
|
LanguagesComboBox.SelectedIndex = numberPressed - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -52,6 +52,7 @@
|
|||||||
<PackageReference Include="Microsoft.Windows.CsWinRT" />
|
<PackageReference Include="Microsoft.Windows.CsWinRT" />
|
||||||
<PackageReference Include="System.ComponentModel.Composition" />
|
<PackageReference Include="System.ComponentModel.Composition" />
|
||||||
<PackageReference Include="System.Drawing.Common" />
|
<PackageReference Include="System.Drawing.Common" />
|
||||||
|
<PackageReference Include="WPF-UI" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -23,7 +23,7 @@ namespace PowerOCR.Settings
|
|||||||
private const int SettingsReadOnChangeDelayInMs = 300;
|
private const int SettingsReadOnChangeDelayInMs = 300;
|
||||||
|
|
||||||
private readonly IFileSystemWatcher _watcher;
|
private readonly IFileSystemWatcher _watcher;
|
||||||
private readonly object _loadingSettingsLock = new object();
|
private readonly object _loadingSettingsLock = new();
|
||||||
|
|
||||||
[ImportingConstructor]
|
[ImportingConstructor]
|
||||||
public UserSettings(Helpers.IThrottledActionInvoker throttledActionInvoker)
|
public UserSettings(Helpers.IThrottledActionInvoker throttledActionInvoker)
|
||||||
@ -113,7 +113,7 @@ namespace PowerOCR.Settings
|
|||||||
// var telemetrySettings = new Telemetry.PowerOcrSettings(properties.VisibleColorFormats)
|
// var telemetrySettings = new Telemetry.PowerOcrSettings(properties.VisibleColorFormats)
|
||||||
// {
|
// {
|
||||||
// ActivationShortcut = properties.ActivationShortcut.ToString(),
|
// ActivationShortcut = properties.ActivationShortcut.ToString(),
|
||||||
// ActivationBehaviour = properties.ActivationAction.ToString(),
|
// ActivationBehavior = properties.ActivationAction.ToString(),
|
||||||
// ColorFormatForClipboard = properties.CopiedColorRepresentation.ToString(),
|
// ColorFormatForClipboard = properties.CopiedColorRepresentation.ToString(),
|
||||||
// ShowColorName = properties.ShowColorName,
|
// ShowColorName = properties.ShowColorName,
|
||||||
// };
|
// };
|
||||||
|
695
src/modules/PowerOCR/PowerOCR/Styles/ButtonStyles.xaml
Normal file
695
src/modules/PowerOCR/PowerOCR/Styles/ButtonStyles.xaml
Normal file
@ -0,0 +1,695 @@
|
|||||||
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||||
|
<SolidColorBrush x:Key="Menu.Static.Background" Color="{DynamicResource SolidBackgroundFillColorSecondaryBrush}" />
|
||||||
|
<SolidColorBrush x:Key="Menu.Static.Border" Color="{DynamicResource SystemAccentColor}" />
|
||||||
|
<SolidColorBrush x:Key="Menu.Static.Foreground" Color="White" />
|
||||||
|
<SolidColorBrush x:Key="Menu.Static.Separator" Color="{DynamicResource SystemAccentColorSecondary}" />
|
||||||
|
<SolidColorBrush x:Key="Menu.Disabled.Foreground" Color="#FF707070" />
|
||||||
|
<SolidColorBrush x:Key="MenuItem.Selected.Background" Color="#3D26A0DA" />
|
||||||
|
<SolidColorBrush x:Key="MenuItem.Selected.Border" Color="{DynamicResource SystemAccentColor}" />
|
||||||
|
<SolidColorBrush x:Key="MenuItem.Highlight.Background" Color="#3D26A0DA" />
|
||||||
|
<SolidColorBrush x:Key="MenuItem.Highlight.Border" Color="{DynamicResource SystemAccentColor}" />
|
||||||
|
<SolidColorBrush x:Key="MenuItem.Highlight.Disabled.Background" Color="#0A000000" />
|
||||||
|
<SolidColorBrush x:Key="MenuItem.Highlight.Disabled.Border" Color="#21000000" />
|
||||||
|
<MenuScrollingVisibilityConverter x:Key="MenuScrollingVisibilityConverter" />
|
||||||
|
<Geometry x:Key="DownArrow">M 0,0 L 3.5,4 L 7,0 Z</Geometry>
|
||||||
|
<Geometry x:Key="UpArrow">M 0,4 L 3.5,0 L 7,4 Z</Geometry>
|
||||||
|
<Geometry x:Key="RightArrow">M 0,0 L 4,3.5 L 0,7 Z</Geometry>
|
||||||
|
<Geometry x:Key="Checkmark">F1 M 10.0,1.2 L 4.7,9.1 L 4.5,9.1 L 0,5.2 L 1.3,3.5 L 4.3,6.1L 8.3,0 L 10.0,1.2 Z</Geometry>
|
||||||
|
<Style x:Key="FocusVisual">
|
||||||
|
<Setter Property="Control.Template">
|
||||||
|
<Setter.Value>
|
||||||
|
<ControlTemplate>
|
||||||
|
<Rectangle
|
||||||
|
Margin="2"
|
||||||
|
SnapsToDevicePixels="true"
|
||||||
|
Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"
|
||||||
|
StrokeDashArray="1 2"
|
||||||
|
StrokeThickness="1" />
|
||||||
|
</ControlTemplate>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
<SolidColorBrush x:Key="Button.Static.Background" Color="Transparent" />
|
||||||
|
<SolidColorBrush x:Key="Button.Static.Border" Color="Transparent" />
|
||||||
|
<SolidColorBrush x:Key="Button.MouseOver.Background" Color="{DynamicResource SystemAccentColorSecondaryBrush}" />
|
||||||
|
<SolidColorBrush x:Key="Button.MouseOver.Border" Color="Transparent" />
|
||||||
|
<SolidColorBrush x:Key="Button.Pressed.Background" Color="#071818" />
|
||||||
|
<SolidColorBrush x:Key="Button.Pressed.Border" Color="#071818" />
|
||||||
|
<SolidColorBrush x:Key="Button.Disabled.Background" Color="Transparent" />
|
||||||
|
<SolidColorBrush x:Key="Button.Disabled.Border" Color="Transparent" />
|
||||||
|
<SolidColorBrush x:Key="Button.Disabled.Foreground" Color="#FF838383" />
|
||||||
|
|
||||||
|
|
||||||
|
<Style x:Key="ToggleSymbolButton" TargetType="{x:Type ToggleButton}">
|
||||||
|
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}" />
|
||||||
|
<Setter Property="Background" Value="{StaticResource Button.Static.Background}" />
|
||||||
|
<Setter Property="BorderBrush" Value="{StaticResource Button.Static.Border}" />
|
||||||
|
<Setter Property="Foreground" Value="{DynamicResource TextFillColorPrimaryBrush}" />
|
||||||
|
<Setter Property="BorderThickness" Value="0" />
|
||||||
|
<Setter Property="HorizontalContentAlignment" Value="Center" />
|
||||||
|
<Setter Property="VerticalContentAlignment" Value="Center" />
|
||||||
|
<Setter Property="Template">
|
||||||
|
<Setter.Value>
|
||||||
|
<ControlTemplate TargetType="{x:Type ToggleButton}">
|
||||||
|
<Border
|
||||||
|
x:Name="border"
|
||||||
|
Background="{TemplateBinding Background}"
|
||||||
|
BorderBrush="{TemplateBinding BorderBrush}"
|
||||||
|
BorderThickness="{TemplateBinding BorderThickness}"
|
||||||
|
CornerRadius="4"
|
||||||
|
SnapsToDevicePixels="true">
|
||||||
|
<ContentPresenter
|
||||||
|
x:Name="contentPresenter"
|
||||||
|
Margin="{TemplateBinding Padding}"
|
||||||
|
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
|
||||||
|
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
|
||||||
|
Focusable="False"
|
||||||
|
RecognizesAccessKey="True"
|
||||||
|
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
|
||||||
|
</Border>
|
||||||
|
<ControlTemplate.Triggers>
|
||||||
|
<Trigger Property="Button.IsDefaulted" Value="true">
|
||||||
|
<Setter TargetName="border" Property="BorderBrush" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsPressed" Value="true">
|
||||||
|
<Setter TargetName="border" Property="Background" Value="{DynamicResource SystemAccentColorBrush}" />
|
||||||
|
<Setter TargetName="border" Property="BorderBrush" Value="{StaticResource Button.Pressed.Border}" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsChecked" Value="True">
|
||||||
|
<Setter TargetName="border" Property="Background" Value="{DynamicResource SystemAccentColorSecondaryBrush}" />
|
||||||
|
<Setter Property="Foreground" Value="White" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsEnabled" Value="false">
|
||||||
|
<Setter TargetName="border" Property="Background" Value="{StaticResource Button.Disabled.Background}" />
|
||||||
|
<Setter TargetName="border" Property="BorderBrush" Value="{StaticResource Button.Disabled.Border}" />
|
||||||
|
<Setter TargetName="contentPresenter" Property="TextElement.Foreground" Value="{StaticResource Button.Disabled.Foreground}" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsMouseOver" Value="true">
|
||||||
|
<Setter Property="Foreground" Value="White" />
|
||||||
|
<Setter TargetName="border" Property="Background" Value="{DynamicResource SystemAccentColorSecondaryBrush}" />
|
||||||
|
</Trigger>
|
||||||
|
</ControlTemplate.Triggers>
|
||||||
|
</ControlTemplate>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
<Style
|
||||||
|
x:Key="MenuScrollButton"
|
||||||
|
BasedOn="{x:Null}"
|
||||||
|
TargetType="{x:Type RepeatButton}">
|
||||||
|
<Setter Property="ClickMode" Value="Hover" />
|
||||||
|
<Setter Property="Template">
|
||||||
|
<Setter.Value>
|
||||||
|
<ControlTemplate TargetType="{x:Type RepeatButton}">
|
||||||
|
<Border
|
||||||
|
x:Name="templateRoot"
|
||||||
|
Background="Transparent"
|
||||||
|
BorderBrush="Transparent"
|
||||||
|
BorderThickness="1"
|
||||||
|
SnapsToDevicePixels="true">
|
||||||
|
<ContentPresenter
|
||||||
|
Margin="6"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center" />
|
||||||
|
</Border>
|
||||||
|
</ControlTemplate>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
<ControlTemplate x:Key="{ComponentResourceKey ResourceId=TopLevelItemTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}" TargetType="{x:Type MenuItem}">
|
||||||
|
<Border
|
||||||
|
x:Name="templateRoot"
|
||||||
|
Background="{TemplateBinding Background}"
|
||||||
|
BorderBrush="{TemplateBinding BorderBrush}"
|
||||||
|
BorderThickness="{TemplateBinding BorderThickness}"
|
||||||
|
SnapsToDevicePixels="true">
|
||||||
|
<Grid VerticalAlignment="Center">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<ContentPresenter
|
||||||
|
x:Name="Icon"
|
||||||
|
Width="16"
|
||||||
|
Height="16"
|
||||||
|
Margin="3"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
ContentSource="Icon"
|
||||||
|
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
|
||||||
|
<Path
|
||||||
|
x:Name="GlyphPanel"
|
||||||
|
Margin="3"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Data="{StaticResource Checkmark}"
|
||||||
|
Fill="{StaticResource Menu.Static.Foreground}"
|
||||||
|
FlowDirection="LeftToRight"
|
||||||
|
Visibility="Collapsed" />
|
||||||
|
<ContentPresenter
|
||||||
|
Grid.Column="1"
|
||||||
|
Margin="{TemplateBinding Padding}"
|
||||||
|
ContentSource="Header"
|
||||||
|
RecognizesAccessKey="True"
|
||||||
|
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
|
||||||
|
</Grid>
|
||||||
|
</Border>
|
||||||
|
<ControlTemplate.Triggers>
|
||||||
|
<Trigger Property="Icon" Value="{x:Null}">
|
||||||
|
<Setter TargetName="Icon" Property="Visibility" Value="Collapsed" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsChecked" Value="true">
|
||||||
|
<Setter TargetName="GlyphPanel" Property="Visibility" Value="Visible" />
|
||||||
|
<Setter TargetName="Icon" Property="Visibility" Value="Collapsed" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsHighlighted" Value="True">
|
||||||
|
<Setter TargetName="templateRoot" Property="Background" Value="{StaticResource MenuItem.Highlight.Background}" />
|
||||||
|
<Setter TargetName="templateRoot" Property="BorderBrush" Value="{StaticResource MenuItem.Highlight.Border}" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsEnabled" Value="False">
|
||||||
|
<Setter TargetName="templateRoot" Property="TextElement.Foreground" Value="{StaticResource Menu.Disabled.Foreground}" />
|
||||||
|
<Setter TargetName="GlyphPanel" Property="Fill" Value="{StaticResource Menu.Disabled.Foreground}" />
|
||||||
|
</Trigger>
|
||||||
|
<MultiTrigger>
|
||||||
|
<MultiTrigger.Conditions>
|
||||||
|
<Condition Property="IsHighlighted" Value="True" />
|
||||||
|
<Condition Property="IsEnabled" Value="False" />
|
||||||
|
</MultiTrigger.Conditions>
|
||||||
|
<Setter TargetName="templateRoot" Property="Background" Value="{StaticResource MenuItem.Highlight.Disabled.Background}" />
|
||||||
|
<Setter TargetName="templateRoot" Property="BorderBrush" Value="{StaticResource MenuItem.Highlight.Disabled.Border}" />
|
||||||
|
</MultiTrigger>
|
||||||
|
</ControlTemplate.Triggers>
|
||||||
|
</ControlTemplate>
|
||||||
|
<ControlTemplate x:Key="{ComponentResourceKey ResourceId=TopLevelHeaderTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}" TargetType="{x:Type MenuItem}">
|
||||||
|
<Border
|
||||||
|
x:Name="templateRoot"
|
||||||
|
Background="{TemplateBinding Background}"
|
||||||
|
BorderBrush="{TemplateBinding BorderBrush}"
|
||||||
|
BorderThickness="{TemplateBinding BorderThickness}"
|
||||||
|
SnapsToDevicePixels="true">
|
||||||
|
<Grid VerticalAlignment="Center">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<ContentPresenter
|
||||||
|
x:Name="Icon"
|
||||||
|
Width="16"
|
||||||
|
Height="16"
|
||||||
|
Margin="3"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
ContentSource="Icon"
|
||||||
|
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
|
||||||
|
<Path
|
||||||
|
x:Name="GlyphPanel"
|
||||||
|
Margin="3"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Data="{StaticResource Checkmark}"
|
||||||
|
Fill="{TemplateBinding Foreground}"
|
||||||
|
FlowDirection="LeftToRight"
|
||||||
|
Visibility="Collapsed" />
|
||||||
|
<ContentPresenter
|
||||||
|
Grid.Column="1"
|
||||||
|
Margin="{TemplateBinding Padding}"
|
||||||
|
ContentSource="Header"
|
||||||
|
RecognizesAccessKey="True"
|
||||||
|
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
|
||||||
|
<Popup
|
||||||
|
x:Name="PART_Popup"
|
||||||
|
AllowsTransparency="true"
|
||||||
|
Focusable="false"
|
||||||
|
IsOpen="{Binding IsSubmenuOpen, RelativeSource={RelativeSource TemplatedParent}}"
|
||||||
|
Placement="Bottom"
|
||||||
|
PlacementTarget="{Binding ElementName=templateRoot}"
|
||||||
|
PopupAnimation="{DynamicResource {x:Static SystemParameters.MenuPopupAnimationKey}}">
|
||||||
|
<Border
|
||||||
|
x:Name="SubMenuBorder"
|
||||||
|
Padding="2"
|
||||||
|
Background="{StaticResource Menu.Static.Background}"
|
||||||
|
BorderBrush="{StaticResource Menu.Static.Border}"
|
||||||
|
BorderThickness="1">
|
||||||
|
<ScrollViewer x:Name="SubMenuScrollViewer" Style="{DynamicResource {ComponentResourceKey ResourceId=MenuScrollViewer, TypeInTargetAssembly={x:Type FrameworkElement}}}">
|
||||||
|
<Grid RenderOptions.ClearTypeHint="Enabled">
|
||||||
|
<Canvas
|
||||||
|
Width="0"
|
||||||
|
Height="0"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
VerticalAlignment="Top">
|
||||||
|
<Rectangle
|
||||||
|
x:Name="OpaqueRect"
|
||||||
|
Width="{Binding ActualWidth, ElementName=SubMenuBorder}"
|
||||||
|
Height="{Binding ActualHeight, ElementName=SubMenuBorder}"
|
||||||
|
Fill="{Binding Background, ElementName=SubMenuBorder}" />
|
||||||
|
</Canvas>
|
||||||
|
<Rectangle
|
||||||
|
Width="1"
|
||||||
|
Margin="29,2,0,2"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
Fill="{StaticResource Menu.Static.Separator}" />
|
||||||
|
<ItemsPresenter
|
||||||
|
x:Name="ItemsPresenter"
|
||||||
|
Grid.IsSharedSizeScope="true"
|
||||||
|
KeyboardNavigation.DirectionalNavigation="Cycle"
|
||||||
|
KeyboardNavigation.TabNavigation="Cycle"
|
||||||
|
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
|
||||||
|
</Grid>
|
||||||
|
</ScrollViewer>
|
||||||
|
</Border>
|
||||||
|
</Popup>
|
||||||
|
</Grid>
|
||||||
|
</Border>
|
||||||
|
<ControlTemplate.Triggers>
|
||||||
|
<Trigger Property="IsSuspendingPopupAnimation" Value="true">
|
||||||
|
<Setter TargetName="PART_Popup" Property="PopupAnimation" Value="None" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="Icon" Value="{x:Null}">
|
||||||
|
<Setter TargetName="Icon" Property="Visibility" Value="Collapsed" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsChecked" Value="true">
|
||||||
|
<Setter TargetName="GlyphPanel" Property="Visibility" Value="Visible" />
|
||||||
|
<Setter TargetName="Icon" Property="Visibility" Value="Collapsed" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsHighlighted" Value="True">
|
||||||
|
<Setter TargetName="templateRoot" Property="Background" Value="{StaticResource MenuItem.Highlight.Background}" />
|
||||||
|
<Setter TargetName="templateRoot" Property="BorderBrush" Value="{StaticResource MenuItem.Highlight.Border}" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsEnabled" Value="False">
|
||||||
|
<Setter TargetName="templateRoot" Property="TextElement.Foreground" Value="{StaticResource Menu.Disabled.Foreground}" />
|
||||||
|
<Setter TargetName="GlyphPanel" Property="Fill" Value="{StaticResource Menu.Disabled.Foreground}" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger SourceName="SubMenuScrollViewer" Property="ScrollViewer.CanContentScroll" Value="false">
|
||||||
|
<Setter TargetName="OpaqueRect" Property="Canvas.Top" Value="{Binding VerticalOffset, ElementName=SubMenuScrollViewer}" />
|
||||||
|
<Setter TargetName="OpaqueRect" Property="Canvas.Left" Value="{Binding HorizontalOffset, ElementName=SubMenuScrollViewer}" />
|
||||||
|
</Trigger>
|
||||||
|
</ControlTemplate.Triggers>
|
||||||
|
</ControlTemplate>
|
||||||
|
<ControlTemplate x:Key="{ComponentResourceKey ResourceId=SubmenuItemTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}" TargetType="{x:Type MenuItem}">
|
||||||
|
<Border
|
||||||
|
x:Name="templateRoot"
|
||||||
|
Height="22"
|
||||||
|
Background="{TemplateBinding Background}"
|
||||||
|
BorderBrush="{TemplateBinding BorderBrush}"
|
||||||
|
BorderThickness="{TemplateBinding BorderThickness}"
|
||||||
|
SnapsToDevicePixels="true">
|
||||||
|
<Grid Margin="-1">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition
|
||||||
|
Width="Auto"
|
||||||
|
MinWidth="22"
|
||||||
|
SharedSizeGroup="MenuItemIconColumnGroup" />
|
||||||
|
<ColumnDefinition Width="13" />
|
||||||
|
<ColumnDefinition Width="*" />
|
||||||
|
<ColumnDefinition Width="30" />
|
||||||
|
<ColumnDefinition Width="Auto" SharedSizeGroup="MenuItemIGTColumnGroup" />
|
||||||
|
<ColumnDefinition Width="20" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<ContentPresenter
|
||||||
|
x:Name="Icon"
|
||||||
|
Width="16"
|
||||||
|
Height="16"
|
||||||
|
Margin="3"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
ContentSource="Icon"
|
||||||
|
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
|
||||||
|
<Border
|
||||||
|
x:Name="GlyphPanel"
|
||||||
|
Width="22"
|
||||||
|
Height="22"
|
||||||
|
Margin="-1,0,0,0"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Background="{StaticResource MenuItem.Selected.Background}"
|
||||||
|
BorderBrush="{StaticResource MenuItem.Selected.Border}"
|
||||||
|
BorderThickness="1"
|
||||||
|
ClipToBounds="False"
|
||||||
|
Visibility="Hidden">
|
||||||
|
<Path
|
||||||
|
x:Name="Glyph"
|
||||||
|
Width="10"
|
||||||
|
Height="11"
|
||||||
|
Data="{StaticResource Checkmark}"
|
||||||
|
Fill="{StaticResource Menu.Static.Foreground}"
|
||||||
|
FlowDirection="LeftToRight" />
|
||||||
|
</Border>
|
||||||
|
<ContentPresenter
|
||||||
|
x:Name="menuHeaderContainer"
|
||||||
|
Grid.Column="2"
|
||||||
|
Margin="{TemplateBinding Padding}"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
ContentSource="Header"
|
||||||
|
RecognizesAccessKey="True"
|
||||||
|
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
|
||||||
|
<TextBlock
|
||||||
|
x:Name="menuGestureText"
|
||||||
|
Grid.Column="4"
|
||||||
|
Margin="{TemplateBinding Padding}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Opacity="0.7"
|
||||||
|
Text="{TemplateBinding InputGestureText}" />
|
||||||
|
</Grid>
|
||||||
|
</Border>
|
||||||
|
<ControlTemplate.Triggers>
|
||||||
|
<Trigger Property="Icon" Value="{x:Null}">
|
||||||
|
<Setter TargetName="Icon" Property="Visibility" Value="Collapsed" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsChecked" Value="True">
|
||||||
|
<Setter TargetName="GlyphPanel" Property="Visibility" Value="Visible" />
|
||||||
|
<Setter TargetName="Icon" Property="Visibility" Value="Collapsed" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsHighlighted" Value="True">
|
||||||
|
<Setter TargetName="templateRoot" Property="Background" Value="{StaticResource MenuItem.Highlight.Background}" />
|
||||||
|
<Setter TargetName="templateRoot" Property="BorderBrush" Value="{StaticResource MenuItem.Highlight.Border}" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsEnabled" Value="False">
|
||||||
|
<Setter TargetName="templateRoot" Property="TextElement.Foreground" Value="{StaticResource Menu.Disabled.Foreground}" />
|
||||||
|
<Setter TargetName="Glyph" Property="Fill" Value="{StaticResource Menu.Disabled.Foreground}" />
|
||||||
|
</Trigger>
|
||||||
|
<MultiTrigger>
|
||||||
|
<MultiTrigger.Conditions>
|
||||||
|
<Condition Property="IsHighlighted" Value="True" />
|
||||||
|
<Condition Property="IsEnabled" Value="False" />
|
||||||
|
</MultiTrigger.Conditions>
|
||||||
|
<Setter TargetName="templateRoot" Property="Background" Value="{StaticResource MenuItem.Highlight.Disabled.Background}" />
|
||||||
|
<Setter TargetName="templateRoot" Property="BorderBrush" Value="{StaticResource MenuItem.Highlight.Disabled.Border}" />
|
||||||
|
</MultiTrigger>
|
||||||
|
</ControlTemplate.Triggers>
|
||||||
|
</ControlTemplate>
|
||||||
|
<ControlTemplate x:Key="{ComponentResourceKey ResourceId=SubmenuHeaderTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}" TargetType="{x:Type MenuItem}">
|
||||||
|
<Border
|
||||||
|
x:Name="templateRoot"
|
||||||
|
Height="22"
|
||||||
|
Background="{TemplateBinding Background}"
|
||||||
|
BorderBrush="{TemplateBinding BorderBrush}"
|
||||||
|
BorderThickness="{TemplateBinding BorderThickness}"
|
||||||
|
SnapsToDevicePixels="true">
|
||||||
|
<Grid Margin="-1">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition
|
||||||
|
Width="Auto"
|
||||||
|
MinWidth="22"
|
||||||
|
SharedSizeGroup="MenuItemIconColumnGroup" />
|
||||||
|
<ColumnDefinition Width="13" />
|
||||||
|
<ColumnDefinition Width="*" />
|
||||||
|
<ColumnDefinition Width="30" />
|
||||||
|
<ColumnDefinition Width="Auto" SharedSizeGroup="MenuItemIGTColumnGroup" />
|
||||||
|
<ColumnDefinition Width="20" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<ContentPresenter
|
||||||
|
x:Name="Icon"
|
||||||
|
Width="16"
|
||||||
|
Height="16"
|
||||||
|
Margin="3"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
ContentSource="Icon"
|
||||||
|
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
|
||||||
|
<Border
|
||||||
|
x:Name="GlyphPanel"
|
||||||
|
Width="22"
|
||||||
|
Height="22"
|
||||||
|
Margin="-1,0,0,0"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Background="{StaticResource MenuItem.Highlight.Background}"
|
||||||
|
BorderBrush="{StaticResource MenuItem.Highlight.Border}"
|
||||||
|
BorderThickness="1"
|
||||||
|
Visibility="Hidden">
|
||||||
|
<Path
|
||||||
|
x:Name="Glyph"
|
||||||
|
Width="9"
|
||||||
|
Height="11"
|
||||||
|
Data="{DynamicResource Checkmark}"
|
||||||
|
Fill="{StaticResource Menu.Static.Foreground}"
|
||||||
|
FlowDirection="LeftToRight" />
|
||||||
|
</Border>
|
||||||
|
<ContentPresenter
|
||||||
|
Grid.Column="2"
|
||||||
|
Margin="{TemplateBinding Padding}"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
ContentSource="Header"
|
||||||
|
RecognizesAccessKey="True"
|
||||||
|
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
|
||||||
|
<TextBlock
|
||||||
|
Grid.Column="4"
|
||||||
|
Margin="{TemplateBinding Padding}"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Opacity="0.7"
|
||||||
|
Text="{TemplateBinding InputGestureText}" />
|
||||||
|
<Path
|
||||||
|
x:Name="RightArrow"
|
||||||
|
Grid.Column="5"
|
||||||
|
Margin="10,0,0,0"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Data="{StaticResource RightArrow}"
|
||||||
|
Fill="{StaticResource Menu.Static.Foreground}" />
|
||||||
|
<Popup
|
||||||
|
x:Name="PART_Popup"
|
||||||
|
AllowsTransparency="true"
|
||||||
|
Focusable="false"
|
||||||
|
HorizontalOffset="-2"
|
||||||
|
IsOpen="{Binding IsSubmenuOpen, RelativeSource={RelativeSource TemplatedParent}}"
|
||||||
|
Placement="Right"
|
||||||
|
PopupAnimation="{DynamicResource {x:Static SystemParameters.MenuPopupAnimationKey}}"
|
||||||
|
VerticalOffset="-3">
|
||||||
|
<Border
|
||||||
|
x:Name="SubMenuBorder"
|
||||||
|
Padding="2"
|
||||||
|
Background="{StaticResource Menu.Static.Background}"
|
||||||
|
BorderBrush="{StaticResource Menu.Static.Border}"
|
||||||
|
BorderThickness="1">
|
||||||
|
<ScrollViewer x:Name="SubMenuScrollViewer" Style="{DynamicResource {ComponentResourceKey ResourceId=MenuScrollViewer, TypeInTargetAssembly={x:Type FrameworkElement}}}">
|
||||||
|
<Grid RenderOptions.ClearTypeHint="Enabled">
|
||||||
|
<Canvas
|
||||||
|
Width="0"
|
||||||
|
Height="0"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
VerticalAlignment="Top">
|
||||||
|
<Rectangle
|
||||||
|
x:Name="OpaqueRect"
|
||||||
|
Width="{Binding ActualWidth, ElementName=SubMenuBorder}"
|
||||||
|
Height="{Binding ActualHeight, ElementName=SubMenuBorder}"
|
||||||
|
Fill="{Binding Background, ElementName=SubMenuBorder}" />
|
||||||
|
</Canvas>
|
||||||
|
<Rectangle
|
||||||
|
Width="1"
|
||||||
|
Margin="29,2,0,2"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
Fill="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}" />
|
||||||
|
<ItemsPresenter
|
||||||
|
x:Name="ItemsPresenter"
|
||||||
|
Grid.IsSharedSizeScope="true"
|
||||||
|
KeyboardNavigation.DirectionalNavigation="Cycle"
|
||||||
|
KeyboardNavigation.TabNavigation="Cycle"
|
||||||
|
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
|
||||||
|
</Grid>
|
||||||
|
</ScrollViewer>
|
||||||
|
</Border>
|
||||||
|
</Popup>
|
||||||
|
</Grid>
|
||||||
|
</Border>
|
||||||
|
<ControlTemplate.Triggers>
|
||||||
|
<Trigger Property="IsSuspendingPopupAnimation" Value="true">
|
||||||
|
<Setter TargetName="PART_Popup" Property="PopupAnimation" Value="None" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="Icon" Value="{x:Null}">
|
||||||
|
<Setter TargetName="Icon" Property="Visibility" Value="Collapsed" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsChecked" Value="True">
|
||||||
|
<Setter TargetName="GlyphPanel" Property="Visibility" Value="Visible" />
|
||||||
|
<Setter TargetName="Icon" Property="Visibility" Value="Collapsed" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsHighlighted" Value="True">
|
||||||
|
<Setter TargetName="templateRoot" Property="Background" Value="Transparent" />
|
||||||
|
<Setter TargetName="templateRoot" Property="BorderBrush" Value="{StaticResource MenuItem.Highlight.Border}" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsEnabled" Value="False">
|
||||||
|
<Setter TargetName="templateRoot" Property="TextElement.Foreground" Value="{StaticResource Menu.Disabled.Foreground}" />
|
||||||
|
<Setter TargetName="Glyph" Property="Fill" Value="{StaticResource Menu.Disabled.Foreground}" />
|
||||||
|
<Setter TargetName="RightArrow" Property="Fill" Value="{StaticResource Menu.Disabled.Foreground}" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger SourceName="SubMenuScrollViewer" Property="ScrollViewer.CanContentScroll" Value="false">
|
||||||
|
<Setter TargetName="OpaqueRect" Property="Canvas.Top" Value="{Binding VerticalOffset, ElementName=SubMenuScrollViewer}" />
|
||||||
|
<Setter TargetName="OpaqueRect" Property="Canvas.Left" Value="{Binding HorizontalOffset, ElementName=SubMenuScrollViewer}" />
|
||||||
|
</Trigger>
|
||||||
|
</ControlTemplate.Triggers>
|
||||||
|
</ControlTemplate>
|
||||||
|
<Style x:Key="DarkMenuItemStyle" TargetType="{x:Type MenuItem}">
|
||||||
|
<Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" />
|
||||||
|
<Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" />
|
||||||
|
<Setter Property="Background" Value="Transparent" />
|
||||||
|
<Setter Property="BorderBrush" Value="Transparent" />
|
||||||
|
<Setter Property="BorderThickness" Value="1" />
|
||||||
|
<Setter Property="ScrollViewer.PanningMode" Value="Both" />
|
||||||
|
<Setter Property="Stylus.IsFlicksEnabled" Value="False" />
|
||||||
|
<Setter Property="Template" Value="{DynamicResource {ComponentResourceKey ResourceId=SubmenuItemTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}}" />
|
||||||
|
<Style.Triggers>
|
||||||
|
<Trigger Property="Role" Value="TopLevelHeader">
|
||||||
|
<Setter Property="Background" Value="Transparent" />
|
||||||
|
<Setter Property="BorderBrush" Value="Transparent" />
|
||||||
|
<Setter Property="Foreground" Value="{StaticResource Menu.Static.Foreground}" />
|
||||||
|
<Setter Property="Template" Value="{DynamicResource {ComponentResourceKey ResourceId=TopLevelHeaderTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}}" />
|
||||||
|
<Setter Property="Padding" Value="6,0" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="Role" Value="TopLevelItem">
|
||||||
|
<Setter Property="Background" Value="{StaticResource Menu.Static.Background}" />
|
||||||
|
<Setter Property="BorderBrush" Value="{StaticResource Menu.Static.Border}" />
|
||||||
|
<Setter Property="Foreground" Value="{StaticResource Menu.Static.Foreground}" />
|
||||||
|
<Setter Property="Template" Value="{DynamicResource {ComponentResourceKey ResourceId=TopLevelItemTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}}" />
|
||||||
|
<Setter Property="Padding" Value="6,0" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="Role" Value="SubmenuHeader">
|
||||||
|
<Setter Property="Template" Value="{DynamicResource {ComponentResourceKey ResourceId=SubmenuHeaderTemplateKey, TypeInTargetAssembly={x:Type MenuItem}}}" />
|
||||||
|
</Trigger>
|
||||||
|
</Style.Triggers>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style x:Key="TitleBarCloseButtonStyle" TargetType="Button">
|
||||||
|
<Setter Property="Foreground" Value="{DynamicResource TextFillColorPrimaryBrush}" />
|
||||||
|
<Setter Property="Padding" Value="0" />
|
||||||
|
<Setter Property="WindowChrome.IsHitTestVisibleInChrome" Value="True" />
|
||||||
|
<Setter Property="IsTabStop" Value="False" />
|
||||||
|
<Setter Property="Template">
|
||||||
|
<Setter.Value>
|
||||||
|
<ControlTemplate TargetType="{x:Type Button}">
|
||||||
|
<Border
|
||||||
|
x:Name="border"
|
||||||
|
BorderThickness="0"
|
||||||
|
SnapsToDevicePixels="true">
|
||||||
|
<ContentPresenter
|
||||||
|
x:Name="contentPresenter"
|
||||||
|
Margin="0"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Focusable="False"
|
||||||
|
RecognizesAccessKey="True" />
|
||||||
|
</Border>
|
||||||
|
<ControlTemplate.Triggers>
|
||||||
|
<Trigger Property="IsMouseOver" Value="true">
|
||||||
|
<Setter TargetName="border" Property="Background" Value="Red" />
|
||||||
|
<Setter Property="Foreground" Value="White" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsPressed" Value="true">
|
||||||
|
<Setter TargetName="border" Property="Background" Value="DarkRed" />
|
||||||
|
<Setter Property="Foreground" Value="White" />
|
||||||
|
</Trigger>
|
||||||
|
</ControlTemplate.Triggers>
|
||||||
|
</ControlTemplate>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
<Style x:Key="TitleBarButtonStyle" TargetType="Button">
|
||||||
|
<Setter Property="Foreground" Value="{DynamicResource TextFillColorPrimaryBrush}" />
|
||||||
|
<Setter Property="Padding" Value="0" />
|
||||||
|
<Setter Property="WindowChrome.IsHitTestVisibleInChrome" Value="True" />
|
||||||
|
<Setter Property="IsTabStop" Value="False" />
|
||||||
|
<Setter Property="Template">
|
||||||
|
<Setter.Value>
|
||||||
|
<ControlTemplate TargetType="{x:Type Button}">
|
||||||
|
<Border
|
||||||
|
x:Name="border"
|
||||||
|
BorderThickness="0"
|
||||||
|
SnapsToDevicePixels="true">
|
||||||
|
<ContentPresenter
|
||||||
|
x:Name="contentPresenter"
|
||||||
|
Margin="0"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Focusable="False"
|
||||||
|
RecognizesAccessKey="True" />
|
||||||
|
</Border>
|
||||||
|
<ControlTemplate.Triggers>
|
||||||
|
<Trigger Property="IsMouseOver" Value="true">
|
||||||
|
<Setter TargetName="border" Property="Background" Value="{StaticResource Menu.Static.Border}" />
|
||||||
|
<Setter Property="Foreground" Value="White" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsPressed" Value="true">
|
||||||
|
<Setter TargetName="border" Property="Background" Value="{StaticResource Menu.Static.Separator}" />
|
||||||
|
<Setter Property="Foreground" Value="White" />
|
||||||
|
</Trigger>
|
||||||
|
</ControlTemplate.Triggers>
|
||||||
|
</ControlTemplate>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
|
||||||
|
<Style x:Key="TealColor" TargetType="Button">
|
||||||
|
<Setter Property="Foreground" Value="White" />
|
||||||
|
<Setter Property="Background" Value="{DynamicResource SystemAccentColorSecondaryBrush}" />
|
||||||
|
<Setter Property="Padding" Value="0" />
|
||||||
|
<Setter Property="WindowChrome.IsHitTestVisibleInChrome" Value="True" />
|
||||||
|
<Setter Property="IsTabStop" Value="False" />
|
||||||
|
<Setter Property="Template">
|
||||||
|
<Setter.Value>
|
||||||
|
<ControlTemplate TargetType="{x:Type Button}">
|
||||||
|
<Border
|
||||||
|
x:Name="border"
|
||||||
|
Background="{TemplateBinding Background}"
|
||||||
|
CornerRadius="4"
|
||||||
|
SnapsToDevicePixels="true">
|
||||||
|
<ContentPresenter
|
||||||
|
x:Name="contentPresenter"
|
||||||
|
Margin="0"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Focusable="False"
|
||||||
|
RecognizesAccessKey="True" />
|
||||||
|
</Border>
|
||||||
|
<ControlTemplate.Triggers>
|
||||||
|
<Trigger Property="IsMouseOver" Value="True">
|
||||||
|
<Setter TargetName="border" Property="Background" Value="{DynamicResource SystemAccentColorSecondaryBrush}" />
|
||||||
|
<Setter Property="Foreground" Value="White" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsPressed" Value="True">
|
||||||
|
<Setter TargetName="border" Property="Background" Value="#071818" />
|
||||||
|
<Setter Property="Foreground" Value="White" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsEnabled" Value="False">
|
||||||
|
<Setter TargetName="border" Property="Opacity" Value="0.4" />
|
||||||
|
</Trigger>
|
||||||
|
</ControlTemplate.Triggers>
|
||||||
|
</ControlTemplate>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
<Style x:Key="SymbolButton" TargetType="Button">
|
||||||
|
<Setter Property="Foreground" Value="{DynamicResource TextFillColorPrimaryBrush}" />
|
||||||
|
<Setter Property="Background" Value="Transparent" />
|
||||||
|
<Setter Property="Padding" Value="6" />
|
||||||
|
<Setter Property="WindowChrome.IsHitTestVisibleInChrome" Value="True" />
|
||||||
|
<Setter Property="IsTabStop" Value="False" />
|
||||||
|
<Setter Property="Template">
|
||||||
|
<Setter.Value>
|
||||||
|
<ControlTemplate TargetType="{x:Type Button}">
|
||||||
|
<Border
|
||||||
|
x:Name="border"
|
||||||
|
CornerRadius="4"
|
||||||
|
SnapsToDevicePixels="true">
|
||||||
|
<ContentPresenter
|
||||||
|
x:Name="contentPresenter"
|
||||||
|
Margin="0"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
VerticalAlignment="Center"
|
||||||
|
Focusable="False"
|
||||||
|
RecognizesAccessKey="True" />
|
||||||
|
</Border>
|
||||||
|
<ControlTemplate.Triggers>
|
||||||
|
<Trigger Property="IsMouseOver" Value="true">
|
||||||
|
<Setter TargetName="border" Property="Background" Value="{DynamicResource SystemAccentColorSecondaryBrush}" />
|
||||||
|
<Setter Property="Foreground" Value="White" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsPressed" Value="true">
|
||||||
|
<Setter TargetName="border" Property="Background" Value="#071818" />
|
||||||
|
<Setter Property="Foreground" Value="{DynamicResource SystemAccentColorSecondaryBrush}" />
|
||||||
|
</Trigger>
|
||||||
|
<Trigger Property="IsEnabled" Value="False">
|
||||||
|
<Setter Property="Opacity" Value="0.3" />
|
||||||
|
</Trigger>
|
||||||
|
</ControlTemplate.Triggers>
|
||||||
|
</ControlTemplate>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>
|
||||||
|
</Style>
|
||||||
|
</ResourceDictionary>
|
6
src/modules/PowerOCR/PowerOCR/Styles/Colors.xaml
Normal file
6
src/modules/PowerOCR/PowerOCR/Styles/Colors.xaml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||||
|
<SolidColorBrush x:Key="DarkBackground" Color="{DynamicResource ApplicationBackgroundColor}" />
|
||||||
|
<SolidColorBrush x:Key="DarkControlBackground" Color="{DynamicResource SolidBackgroundFillColorQuarternaryBrushColor}" />
|
||||||
|
<SolidColorBrush x:Key="DarkTeal" Color="{DynamicResource SystemAccentColorSecondary}" />
|
||||||
|
<SolidColorBrush x:Key="Teal" Color="{DynamicResource SystemAccentColor}" />
|
||||||
|
</ResourceDictionary>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<Target Name="GenerateResourceFiles" BeforeTargets="PrepareForBuild">
|
<Target Name="GenerateResourceFiles" BeforeTargets="PrepareForBuild">
|
||||||
<Exec Command="powershell -NonInteractive -executionpolicy Unrestricted $(SolutionDir)tools\build\convert-resx-to-rc.ps1 $(MSBuildThisFileDirectory) resource.base.h resource.h PowerOCR.base.rc PowerOCR.rc" />
|
<Exec Command="powershell -NonInteractive -executionpolicy Unrestricted $(SolutionDir)tools\build\convert-resx-to-rc.ps1 $(MSBuildThisFileDirectory) resource.base.h resource.h PowerOCR.base.rc PowerOCR.rc" />
|
||||||
</Target>
|
</Target>
|
||||||
@ -73,13 +73,13 @@
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<Import Project="..\..\..\..\deps\spdlog.props" />
|
<Import Project="..\..\..\..\deps\spdlog.props" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<Target Name="GenerateResourceFiles" BeforeTargets="PrepareForBuild">
|
<Target Name="GenerateResourceFiles" BeforeTargets="PrepareForBuild">
|
||||||
<Exec Command="powershell -NonInteractive -executionpolicy Unrestricted $(SolutionDir)tools\build\convert-resx-to-rc.ps1 $(MSBuildThisFileDirectory) resource.base.h resource.h ShortcutGuide.base.rc ShortcutGuide.rc" />
|
<Exec Command="powershell -NonInteractive -executionpolicy Unrestricted $(SolutionDir)tools\build\convert-resx-to-rc.ps1 $(MSBuildThisFileDirectory) resource.base.h resource.h ShortcutGuide.base.rc ShortcutGuide.rc" />
|
||||||
</Target>
|
</Target>
|
||||||
@ -130,13 +130,13 @@
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<Import Project="..\..\..\..\deps\spdlog.props" />
|
<Import Project="..\..\..\..\deps\spdlog.props" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<Target Name="GenerateResourceFiles" BeforeTargets="PrepareForBuild">
|
<Target Name="GenerateResourceFiles" BeforeTargets="PrepareForBuild">
|
||||||
<Exec Command="powershell -NonInteractive -executionpolicy Unrestricted $(SolutionDir)tools\build\convert-resx-to-rc.ps1 $(MSBuildThisFileDirectory) resource.base.h resource.h ShortcutGuideModuleInterface.base.rc ShortcutGuideModuleInterface.rc" />
|
<Exec Command="powershell -NonInteractive -executionpolicy Unrestricted $(SolutionDir)tools\build\convert-resx-to-rc.ps1 $(MSBuildThisFileDirectory) resource.base.h resource.h ShortcutGuideModuleInterface.base.rc ShortcutGuideModuleInterface.rc" />
|
||||||
</Target>
|
</Target>
|
||||||
@ -78,13 +78,13 @@
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<Import Project="..\..\..\..\deps\spdlog.props" />
|
<Import Project="..\..\..\..\deps\spdlog.props" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.220929.3" targetFramework="native" />
|
<package id="Microsoft.Windows.CppWinRT" version="2.0.221104.6" targetFramework="native" />
|
||||||
</packages>
|
</packages>
|
@ -2,7 +2,7 @@
|
|||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<!-- Project configurations -->
|
<!-- Project configurations -->
|
||||||
<!-- Props that should be disabled while building on CI server -->
|
<!-- Props that should be disabled while building on CI server -->
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||||
<ItemDefinitionGroup Condition="'$(CIBuild)'!='true'">
|
<ItemDefinitionGroup Condition="'$(CIBuild)'!='true'">
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
@ -175,15 +175,15 @@
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<Import Project="..\..\..\..\deps\spdlog.props" />
|
<Import Project="..\..\..\..\deps\spdlog.props" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
|
<Import Project="..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.220929.3\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.221104.6\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />
|
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.220914.1\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user