mirror of
https://github.com/ChrisTitusTech/winutil.git
synced 2024-11-14 14:45:52 -06:00
Fixes, improvements + Auto Window handling (#2648)
* fixes - change fontsize back to 12 - add correct handling of windows - removed double click handling of winutil * readd double click * fixes - argument passing on elevation & to windev script - remove shell output of log * improve compile -run - added $args param for args that get passed to winutil - improved starting new Shell logic * fix: compile's run logic - removed old logic - fixed command to run in new shell - replaced $args with $arg * fix: logs & border - move log start to after admin elevation - fix color of border on fixed tweaks button. * fix: MicrowinInjectDrivers's Margin - use theme value instead of custom value * change microwin checkbox margin - set cutom microwin checkbox margin due to cut off content * fix layouting of nav bar - replace strange collumndefinition to fix bugs, make sense and look better * rename $arg to $Arguments * change maxresolution from 1380 to 1280
This commit is contained in:
parent
9b9d0c58f5
commit
2d751f4e8c
15
Compile.ps1
15
Compile.ps1
@ -1,7 +1,8 @@
|
|||||||
param (
|
param (
|
||||||
[switch]$Debug,
|
[switch]$Debug,
|
||||||
[switch]$Run,
|
[switch]$Run,
|
||||||
[switch]$SkipPreprocessing
|
[switch]$SkipPreprocessing,
|
||||||
|
[string]$Arguments
|
||||||
)
|
)
|
||||||
$OFS = "`r`n"
|
$OFS = "`r`n"
|
||||||
$scriptname = "winutil.ps1"
|
$scriptname = "winutil.ps1"
|
||||||
@ -118,10 +119,12 @@ catch {
|
|||||||
Write-Progress -Activity "Validating" -Completed
|
Write-Progress -Activity "Validating" -Completed
|
||||||
|
|
||||||
if ($run) {
|
if ($run) {
|
||||||
try {
|
$script = "& '$workingdir\$scriptname' $Arguments"
|
||||||
Start-Process -FilePath "pwsh" -ArgumentList "$workingdir\$scriptname"
|
|
||||||
} catch {
|
|
||||||
Start-Process -FilePath "powershell" -ArgumentList "$workingdir\$scriptname"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
$powershellcmd = if (Get-Command pwsh -ErrorAction SilentlyContinue) { "pwsh" } else { "powershell" }
|
||||||
|
$processCmd = if (Get-Command wt.exe -ErrorAction SilentlyContinue) { "wt.exe" } else { $powershellcmd }
|
||||||
|
|
||||||
|
Start-Process $processCmd -ArgumentList "$powershellcmd -NoProfile -Command $script"
|
||||||
|
|
||||||
|
break
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
"CustomDialogWidth": "400",
|
"CustomDialogWidth": "400",
|
||||||
"CustomDialogHeight": "200",
|
"CustomDialogHeight": "200",
|
||||||
|
|
||||||
"FontSize": "14",
|
"FontSize": "12",
|
||||||
"FontFamily": "Arial",
|
"FontFamily": "Arial",
|
||||||
"FontSizeHeading": "16",
|
"FontSizeHeading": "16",
|
||||||
"HeaderFontFamily": "Consolas, Monaco",
|
"HeaderFontFamily": "Consolas, Monaco",
|
||||||
@ -26,6 +26,7 @@
|
|||||||
"CloseIconFontSize": "18",
|
"CloseIconFontSize": "18",
|
||||||
|
|
||||||
"MicroWinLogoSize": "10",
|
"MicroWinLogoSize": "10",
|
||||||
|
"MicrowinCheckBoxMargin": "-10,5,0,0",
|
||||||
|
|
||||||
"ProgressBarForegroundColor": "#FFAC1C",
|
"ProgressBarForegroundColor": "#FFAC1C",
|
||||||
"ProgressBarBackgroundColor": "Transparent",
|
"ProgressBarBackgroundColor": "Transparent",
|
||||||
|
@ -439,6 +439,12 @@ $sync["SearchBar"].Add_TextChanged({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
$sync["Form"].Add_Loaded({
|
||||||
|
param($e)
|
||||||
|
$sync["Form"].MaxWidth = [Double]::PositiveInfinity
|
||||||
|
$sync["Form"].MaxHeight = [Double]::PositiveInfinity
|
||||||
|
})
|
||||||
|
|
||||||
# Initialize the hashtable
|
# Initialize the hashtable
|
||||||
$winutildir = @{}
|
$winutildir = @{}
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
GitHub : https://github.com/ChrisTitusTech
|
GitHub : https://github.com/ChrisTitusTech
|
||||||
Version : #{replaceme}
|
Version : #{replaceme}
|
||||||
#>
|
#>
|
||||||
|
|
||||||
param (
|
param (
|
||||||
[switch]$Debug,
|
[switch]$Debug,
|
||||||
[string]$Config,
|
[string]$Config,
|
||||||
@ -27,12 +28,6 @@ if ($Run) {
|
|||||||
$PARAM_RUN = $true
|
$PARAM_RUN = $true
|
||||||
}
|
}
|
||||||
|
|
||||||
$dateTime = Get-Date -Format "yyyy-MM-dd_HH-mm-ss"
|
|
||||||
|
|
||||||
$logdir = "$env:localappdata\winutil\logs"
|
|
||||||
[System.IO.Directory]::CreateDirectory("$logdir")
|
|
||||||
Start-Transcript -Path "$logdir\winutil_$dateTime.log" -Append
|
|
||||||
|
|
||||||
# Load DLLs
|
# Load DLLs
|
||||||
Add-Type -AssemblyName PresentationFramework
|
Add-Type -AssemblyName PresentationFramework
|
||||||
Add-Type -AssemblyName System.Windows.Forms
|
Add-Type -AssemblyName System.Windows.Forms
|
||||||
@ -46,8 +41,22 @@ $sync.ProcessRunning = $false
|
|||||||
|
|
||||||
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
|
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
|
||||||
Write-Output "Winutil needs to be run as Administrator. Attempting to relaunch."
|
Write-Output "Winutil needs to be run as Administrator. Attempting to relaunch."
|
||||||
|
$argList = @()
|
||||||
|
|
||||||
|
$PSBoundParameters.GetEnumerator() | ForEach-Object {
|
||||||
|
$argList += if ($_.Value -is [switch] -and $_.Value) {
|
||||||
|
"-$($_.Key)"
|
||||||
|
} elseif ($_.Value) {
|
||||||
|
"-$($_.Key) `"$($_.Value)`""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$script = if ($MyInvocation.MyCommand.Path) {
|
||||||
|
"& { & '$($MyInvocation.MyCommand.Path)' $argList }"
|
||||||
|
} else {
|
||||||
|
"iex '& { $(irm https://github.com/ChrisTitusTech/winutil/releases/latest/download/winutil.ps1) } $argList'"
|
||||||
|
}
|
||||||
|
|
||||||
$script = if ($MyInvocation.MyCommand.Path) { "& '" + $MyInvocation.MyCommand.Path + "'" } else { "irm 'https://github.com/ChrisTitusTech/winutil/releases/latest/download/winutil.ps1' | iex"}
|
|
||||||
$powershellcmd = if (Get-Command pwsh -ErrorAction SilentlyContinue) { "pwsh" } else { "powershell" }
|
$powershellcmd = if (Get-Command pwsh -ErrorAction SilentlyContinue) { "pwsh" } else { "powershell" }
|
||||||
$processCmd = if (Get-Command wt.exe -ErrorAction SilentlyContinue) { "wt.exe" } else { $powershellcmd }
|
$processCmd = if (Get-Command wt.exe -ErrorAction SilentlyContinue) { "wt.exe" } else { $powershellcmd }
|
||||||
|
|
||||||
@ -56,6 +65,12 @@ if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]:
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$dateTime = Get-Date -Format "yyyy-MM-dd_HH-mm-ss"
|
||||||
|
|
||||||
|
$logdir = "$env:localappdata\winutil\logs"
|
||||||
|
[System.IO.Directory]::CreateDirectory("$logdir") | Out-Null
|
||||||
|
Start-Transcript -Path "$logdir\winutil_$dateTime.log" -Append -NoClobber | Out-Null
|
||||||
|
|
||||||
# Set PowerShell window title
|
# Set PowerShell window title
|
||||||
$Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Admin)"
|
$Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Admin)"
|
||||||
clear-host
|
clear-host
|
||||||
|
13
windev.ps1
13
windev.ps1
@ -14,8 +14,15 @@
|
|||||||
|
|
||||||
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
|
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
|
||||||
Write-Output "Winutil needs to be run as Administrator. Attempting to relaunch."
|
Write-Output "Winutil needs to be run as Administrator. Attempting to relaunch."
|
||||||
|
# Capture all the arguments passed to the script
|
||||||
|
$argList = $args -join ' '
|
||||||
|
|
||||||
|
$script = if ($MyInvocation.MyCommand.Path) {
|
||||||
|
"& { & '$($MyInvocation.MyCommand.Path)' $argList }"
|
||||||
|
} else {
|
||||||
|
"iex '& { $(irm https://github.com/ChrisTitusTech/winutil/raw/main/windev.ps1) } $argList'"
|
||||||
|
}
|
||||||
|
|
||||||
$script = if ($MyInvocation.MyCommand.Path) { "& '" + $MyInvocation.MyCommand.Path + "'" } else { "irm 'https://github.com/ChrisTitusTech/winutil/raw/main/windev.ps1' | iex"}
|
|
||||||
$powershellcmd = if (Get-Command pwsh -ErrorAction SilentlyContinue) { "pwsh" } else { "powershell" }
|
$powershellcmd = if (Get-Command pwsh -ErrorAction SilentlyContinue) { "pwsh" } else { "powershell" }
|
||||||
$processCmd = if (Get-Command wt.exe -ErrorAction SilentlyContinue) { "wt.exe" } else { $powershellcmd }
|
$processCmd = if (Get-Command wt.exe -ErrorAction SilentlyContinue) { "wt.exe" } else { $powershellcmd }
|
||||||
|
|
||||||
@ -46,9 +53,9 @@ function RedirectToLatestPreRelease {
|
|||||||
Write-Host "Using latest Full Release"
|
Write-Host "Using latest Full Release"
|
||||||
$url = "https://github.com/ChrisTitusTech/winutil/releases/latest/download/winutil.ps1"
|
$url = "https://github.com/ChrisTitusTech/winutil/releases/latest/download/winutil.ps1"
|
||||||
}
|
}
|
||||||
Invoke-RestMethod $url | Invoke-Expression
|
|
||||||
|
iex "& { $(irm $url) } $argList"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Call the redirect function
|
# Call the redirect function
|
||||||
|
|
||||||
RedirectToLatestPreRelease
|
RedirectToLatestPreRelease
|
||||||
|
@ -9,7 +9,11 @@
|
|||||||
WindowStartupLocation="CenterScreen"
|
WindowStartupLocation="CenterScreen"
|
||||||
UseLayoutRounding="True"
|
UseLayoutRounding="True"
|
||||||
WindowStyle="None"
|
WindowStyle="None"
|
||||||
Title="Chris Titus Tech's Windows Utility" Height="800" Width="1280">
|
Width="Auto"
|
||||||
|
Height="Auto"
|
||||||
|
MaxWidth="1280"
|
||||||
|
MaxHeight="800"
|
||||||
|
Title="Chris Titus Tech's Windows Utility">
|
||||||
<WindowChrome.WindowChrome>
|
<WindowChrome.WindowChrome>
|
||||||
<WindowChrome CaptionHeight="0" CornerRadius="10"/>
|
<WindowChrome CaptionHeight="0" CornerRadius="10"/>
|
||||||
</WindowChrome.WindowChrome>
|
</WindowChrome.WindowChrome>
|
||||||
@ -689,10 +693,10 @@
|
|||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
<Grid Background="{MainBackgroundColor}" ShowGridLines="False" Width="Auto" Height="Auto" HorizontalAlignment="Stretch">
|
<Grid Background="{MainBackgroundColor}" ShowGridLines="False" Width="Auto" Height="Auto" HorizontalAlignment="Stretch">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/> <!-- Main content area -->
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="Auto"/> <!-- Space for options button -->
|
||||||
<ColumnDefinition Width="50px"/>
|
<ColumnDefinition Width="Auto"/> <!-- Space for close button -->
|
||||||
<ColumnDefinition Width="50px"/>
|
<ColumnDefinition Width="Auto"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
@ -722,7 +726,8 @@
|
|||||||
VerticalAlignment="Center" HorizontalAlignment="Left"
|
VerticalAlignment="Center" HorizontalAlignment="Left"
|
||||||
FontFamily="Segoe MDL2 Assets"
|
FontFamily="Segoe MDL2 Assets"
|
||||||
FontSize="{IconFontSize}"
|
FontSize="{IconFontSize}"
|
||||||
Margin="180,0,0,0"></TextBlock>
|
Margin="180,0,0,0">
|
||||||
|
</TextBlock>
|
||||||
<!--
|
<!--
|
||||||
TODO:
|
TODO:
|
||||||
Make this ClearButton Positioning react to
|
Make this ClearButton Positioning react to
|
||||||
@ -734,7 +739,8 @@
|
|||||||
VerticalAlignment="Center" HorizontalAlignment="Left"
|
VerticalAlignment="Center" HorizontalAlignment="Left"
|
||||||
Name="SearchBarClearButton"
|
Name="SearchBarClearButton"
|
||||||
Style="{StaticResource SearchBarClearButtonStyle}"
|
Style="{StaticResource SearchBarClearButtonStyle}"
|
||||||
Margin="210,0,0,0" Visibility="Collapsed"/>
|
Margin="210,0,0,0" Visibility="Collapsed">
|
||||||
|
</Button>
|
||||||
|
|
||||||
<ProgressBar
|
<ProgressBar
|
||||||
Grid.Column="1"
|
Grid.Column="1"
|
||||||
@ -773,7 +779,7 @@
|
|||||||
FontSize="{SettingsIconFontSize}"
|
FontSize="{SettingsIconFontSize}"
|
||||||
Width="{IconButtonSize}" Height="{IconButtonSize}"
|
Width="{IconButtonSize}" Height="{IconButtonSize}"
|
||||||
HorizontalAlignment="Right" VerticalAlignment="Top"
|
HorizontalAlignment="Right" VerticalAlignment="Top"
|
||||||
Margin="0,5,5,0"
|
Margin="5,5,5,0"
|
||||||
FontFamily="Segoe MDL2 Assets"
|
FontFamily="Segoe MDL2 Assets"
|
||||||
Content=""/>
|
Content=""/>
|
||||||
<Popup Grid.Column="2" Name="SettingsPopup"
|
<Popup Grid.Column="2" Name="SettingsPopup"
|
||||||
@ -878,18 +884,10 @@
|
|||||||
</Grid>
|
</Grid>
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
<Border Grid.Row="1" Background="{MainBackgroundColor}" BorderBrush="{BorderColor}" BorderThickness="1" CornerRadius="5" HorizontalAlignment="Stretch" Padding="10">
|
<Border Grid.Row="1" Background="{MainBackgroundColor}" BorderBrush="{BorderColor}" BorderThickness="1" CornerRadius="5" HorizontalAlignment="Stretch" Padding="10">
|
||||||
<Grid>
|
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" Grid.Column="0">
|
||||||
<Grid.ColumnDefinitions>
|
<Button Name="WPFTweaksbutton" Content="Run Tweaks" Margin="5"/>
|
||||||
<ColumnDefinition Width="1*" />
|
<Button Name="WPFUndoall" Content="Undo Selected Tweaks" Margin="5"/>
|
||||||
<ColumnDefinition Width="1*" />
|
</StackPanel>
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
|
|
||||||
<!-- Buttons on the left half -->
|
|
||||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" Grid.Column="0">
|
|
||||||
<Button Name="WPFTweaksbutton" Content="Run Tweaks" Margin="5"/>
|
|
||||||
<Button Name="WPFUndoall" Content="Undo Selected Tweaks" Margin="5"/>
|
|
||||||
</StackPanel>
|
|
||||||
</Grid>
|
|
||||||
</Border>
|
</Border>
|
||||||
</Grid>
|
</Grid>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
@ -945,12 +943,12 @@
|
|||||||
HorizontalAlignment="Stretch">
|
HorizontalAlignment="Stretch">
|
||||||
<StackPanel Name="MicrowinMain" Background="{MainBackgroundColor}" SnapsToDevicePixels="True" Grid.Column="0" Grid.Row="0">
|
<StackPanel Name="MicrowinMain" Background="{MainBackgroundColor}" SnapsToDevicePixels="True" Grid.Column="0" Grid.Row="0">
|
||||||
<StackPanel Background="Transparent" SnapsToDevicePixels="True" Margin="1">
|
<StackPanel Background="Transparent" SnapsToDevicePixels="True" Margin="1">
|
||||||
<CheckBox x:Name="WPFMicrowinDownloadFromGitHub" Content="Download oscdimg.exe from CTT Github repo" IsChecked="False" Margin="{CheckBoxMargin}" />
|
<CheckBox x:Name="WPFMicrowinDownloadFromGitHub" Content="Download oscdimg.exe from CTT Github repo" IsChecked="False" Margin="{MicrowinCheckBoxMargin}" />
|
||||||
<TextBlock Margin="5" Padding="1" TextWrapping="Wrap" Foreground="{ComboBoxForegroundColor}">
|
<TextBlock Margin="5" Padding="1" TextWrapping="Wrap" Foreground="{ComboBoxForegroundColor}">
|
||||||
Choose a Windows ISO file that you've downloaded <LineBreak/>
|
Choose a Windows ISO file that you've downloaded <LineBreak/>
|
||||||
Check the status in the console
|
Check the status in the console
|
||||||
</TextBlock>
|
</TextBlock>
|
||||||
<CheckBox x:Name="WPFMicrowinISOScratchDir" Content="Use ISO directory for ScratchDir " IsChecked="False" Margin="{CheckBoxMargin}"
|
<CheckBox x:Name="WPFMicrowinISOScratchDir" Content="Use ISO directory for ScratchDir " IsChecked="False" Margin="{MicrowinCheckBoxMargin}"
|
||||||
ToolTip="Use ISO directory for ScratchDir " />
|
ToolTip="Use ISO directory for ScratchDir " />
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
@ -997,7 +995,7 @@
|
|||||||
<TextBlock Margin="6" Padding="1" TextWrapping="Wrap">Choose Windows SKU</TextBlock>
|
<TextBlock Margin="6" Padding="1" TextWrapping="Wrap">Choose Windows SKU</TextBlock>
|
||||||
<ComboBox x:Name = "MicrowinWindowsFlavors" Margin="1" />
|
<ComboBox x:Name = "MicrowinWindowsFlavors" Margin="1" />
|
||||||
<Rectangle Fill="{MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
<Rectangle Fill="{MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
||||||
<CheckBox Name="MicrowinInjectDrivers" Content="Inject drivers (I KNOW WHAT I'M DOING)" Margin="-10,5,0,0" IsChecked="False" ToolTip="Path to unpacked drivers all sys and inf files for devices that need drivers"/>
|
<CheckBox Name="MicrowinInjectDrivers" Content="Inject drivers (I KNOW WHAT I'M DOING)" Margin="{MicrowinCheckBoxMargin}" IsChecked="False" ToolTip="Path to unpacked drivers all sys and inf files for devices that need drivers"/>
|
||||||
<TextBox Name="MicrowinDriverLocation" Background="Transparent" BorderThickness="1" BorderBrush="{MainForegroundColor}"
|
<TextBox Name="MicrowinDriverLocation" Background="Transparent" BorderThickness="1" BorderBrush="{MainForegroundColor}"
|
||||||
Margin="6"
|
Margin="6"
|
||||||
Text=""
|
Text=""
|
||||||
@ -1006,9 +1004,9 @@
|
|||||||
Foreground="{LabelboxForegroundColor}"
|
Foreground="{LabelboxForegroundColor}"
|
||||||
ToolTip="Path to unpacked drivers all sys and inf files for devices that need drivers"
|
ToolTip="Path to unpacked drivers all sys and inf files for devices that need drivers"
|
||||||
/>
|
/>
|
||||||
<CheckBox Name="MicrowinImportDrivers" Content="Import drivers from current system" Margin="{CheckBoxMargin}" IsChecked="False" ToolTip="Export all third-party drivers from your system and inject them to the MicroWin image"/>
|
<CheckBox Name="MicrowinImportDrivers" Content="Import drivers from current system" Margin="{MicrowinCheckBoxMargin}" IsChecked="False" ToolTip="Export all third-party drivers from your system and inject them to the MicroWin image"/>
|
||||||
<Rectangle Fill="{MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
<Rectangle Fill="{MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
||||||
<CheckBox Name="WPFMicrowinCopyToUsb" Content="Copy to Ventoy" Margin="{CheckBoxMargin}" IsChecked="False" ToolTip="Copy to USB disk with a label Ventoy"/>
|
<CheckBox Name="WPFMicrowinCopyToUsb" Content="Copy to Ventoy" Margin="{MicrowinCheckBoxMargin}" IsChecked="False" ToolTip="Copy to USB disk with a label Ventoy"/>
|
||||||
<Rectangle Fill="{MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
<Rectangle Fill="{MainForegroundColor}" Height="2" HorizontalAlignment="Stretch" Margin="0,10,0,10"/>
|
||||||
<TextBlock Margin="6" Padding="1" TextWrapping="Wrap"><Bold>Custom user settings (leave empty for default user)</Bold></TextBlock>
|
<TextBlock Margin="6" Padding="1" TextWrapping="Wrap"><Bold>Custom user settings (leave empty for default user)</Bold></TextBlock>
|
||||||
<TextBlock Margin="6" Padding="1" TextWrapping="Wrap">User name (20 characters max.):</TextBlock>
|
<TextBlock Margin="6" Padding="1" TextWrapping="Wrap">User name (20 characters max.):</TextBlock>
|
||||||
|
Loading…
Reference in New Issue
Block a user