Powershell 如何使图形用户界面的形式和工具考虑屏幕像素?

Powershell 如何使图形用户界面的形式和工具考虑屏幕像素?,powershell,Powershell,我想做的形式和所有的工具都可以自动依赖屏幕像素。我试过这个,它只能在某些分辨率下工作,当我以高分辨率执行时,表单和所有工具都非常小。 有人能给我一个主意吗? 我也尝试Windows状态=最大化,但是否有可能使工具仍然可以考虑屏幕像素? Add-Type -AssemblyName PresentationFramework Add-Type -AssemblyName System.Windows.Forms [System.Windows.Forms.Application]::EnableV

我想做的形式和所有的工具都可以自动依赖屏幕像素。我试过这个,它只能在某些分辨率下工作,当我以高分辨率执行时,表单和所有工具都非常小。 有人能给我一个主意吗? 我也尝试Windows状态=最大化,但是否有可能使工具仍然可以考虑屏幕像素?

Add-Type -AssemblyName PresentationFramework
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()
function ConvertTo-ScaledPixel
{
    [OutputType([int])]
    param
    (
        [Parameter(ParameterSetName = 'Height',
                   Mandatory = $true,
                   Position = 0)]
        [Parameter(ParameterSetName = 'Width',
                   Mandatory = $true,
                   Position = 0)]
    [ValidateNotNull()]
    [System.Windows.Forms.Form]$Form,
    [Parameter(ParameterSetName = 'Width',
               Mandatory = $true,
               Position = 1)]
    [int]$Width,
    [Parameter(ParameterSetName = 'Height',
               Mandatory = $true,
               Position = 1)]
    [int]$Height
)
    switch ($PsCmdlet.ParameterSetName)
    {
        'Height' {

            if ($Form.AutoScaleMode -eq 'Font')
            {           
                return ($Form.CurrentAutoScaleDimensions.Height / 13) * $Height;
            }
            elseif ($Form.AutoScaleMode -eq 'Dpi')
            {
                return ($Form.CurrentAutoScaleDimensions.Height / 96) * $Height;
            }
            else
            {
                return $Height
            }
            break
        }
        'Width' {
            if ($Form.AutoScaleMode -eq 'Font')
            {
                return ($Form.CurrentAutoScaleDimensions.Width / 6) * $Width;
            }
            elseif ($Form.AutoScaleMode -eq 'Dpi')
            {
                return ($Form.CurrentAutoScaleDimensions.Width / 96) * $Width;
            }
            else
            {
                return $Width
            }
            break
        }
    }
}

$Form = New-Object System.Windows.Forms.Form    
$form.AutoSize = $true
$Form.MaximizeBox = $false
$Form.text = ""
$Form.FormBorderStyle = 'FixedDialog'
$Form.StartPosition = "CenterScreen"
$Form.BackColor                  = "#ffffff"
$Height = ConvertTo-ScaledPixel -Form $form -Height $form.Height
$width = ConvertTo-ScaledPixel -Form $form -Height $form.Width
#$Form.WindowState                = 'Maximized'
$Form.Size = New-Object System.Drawing.Size($width,$Height)
$Font = New-Object System.Drawing.Font("Segoe UI",13,[System.Drawing.FontStyle]::Regular,[System.Drawing.GraphicsUnit]::Pixel)
$Form.Font = $Font
$Form.SizeGripStyle = 'Hide'

$Label1                          = New-Object system.Windows.Forms.Label
$Label1.text                     = "Please select:"
$Label1.Location = New-Object System.Drawing.Size(700,40) 
$label1.AutoSize                 = $true
$Form.Controls.Add($Label1)

$Combo                        = New-Object system.Windows.Forms.ComboBox
$Combo.AutoSize               = $true
$Combo.DropDownStyle          = "DropDownList"
$Combo.Size = New-Object System.Drawing.Size(190,80)
$Combo.Location = New-Object System.Drawing.Size(690,70) 
$Form.Controls.Add($Combo)
$Combo.Items.AddRange(@(Get-ChildItem -Directory ".\").Name)

$SelectedFile= {
#     Write-Host $Combo.SelectedItem
    $files = [collections.arraylist](Get-ChildItem $Combo.SelectedItem -File *.que)
    $checkedListBox.DataSource = $files
    $checkedListBox.DisplayMember = 'Name'
    $ButtonDelete.Visible = $true
    $ButtonDone.Visible = $true
}
$Combo.add_SelectedIndexChanged($SelectedFile)
$Combo.DisplayMember = 'Name'

$checkedListBox = New-Object System.Windows.Forms.CheckedListbox
$checkedListBox.CheckOnClick = $true
$checkedListBox.Enabled = $true
$checkedListBox.BackColor = "#ffffff"
$checkedListBox.Location = New-Object System.Drawing.Size(20,40) 
$checkedListBox.Size = New-Object System.Drawing.Size(585,400) 
$Form.Controls.Add($checkedListBox)

$ButtonDelete = New-Object System.Windows.Forms.Button 
$ButtonDelete.Location = New-Object System.Drawing.Size(220,440) 
$ButtonDelete.Size = New-Object System.Drawing.Size(80,30)
$ButtonDelete.Text = "Delete" 
$ButtonDelete.BackColor = "#0095d9"
$ButtonDelete.ForeColor = "#ffffff"
$ButtonDelete.FlatStyle = 1
$ButtonDelete.Visible = $false
$ButtonDelete.Add_Click({
$UserResponse = [System.Windows.Forms.MessageBox]::Show("Are you sure to delete?","Message" , 4)
    if ($UserResponse -eq "YES" ) 
    {
        $getfile = ($CheckedListBox.CheckedItems).Name
        $getfile | Out-File .\DeleteFile.txt -Force
        $Form.Close()
    } 
    else 
    { 
        #No activity
    }     
    })
$Form.Controls.Add($ButtonDelete) 


$ButtonDone = New-Object System.Windows.Forms.Button 
$ButtonDone.Location = New-Object System.Drawing.Size(320,440) 
$ButtonDone.Size = New-Object System.Drawing.Size(80,30)
$ButtonDone.Text = "Done"  
$ButtonDone.BackColor               = "#0095d9"
$ButtonDone.ForeColor               = "#ffffff"
$ButtonDone.FlatStyle = 1
$ButtonDone.Add_Click({$Form.Close()})
$ButtonDone.Visible = $false
$Form.Controls.Add($ButtonDone) 

$ButtonRefresh                         = New-Object system.Windows.Forms.Button
$ButtonRefresh.BackColor               = "#0095d9"
$ButtonRefresh.ForeColor               = "#ffffff"
$ButtonRefresh.text                    = "Refresh"
$ButtonRefresh.Location = New-Object System.Drawing.Size(750,440)
$ButtonRefresh.Size = New-Object System.Drawing.Size(80,30)
$ButtonRefresh.Add_Click({
    # Remove all items from the ComboBox
    $Combo.Items.Clear()
    # Repopulate the ComboBox, just like when it was created
    $Combo.Items.AddRange(@(Get-ChildItem -Directory ".\").Name)

})
$ButtonRefresh.FlatStyle = 1
$Form.Controls.Add($ButtonRefresh)

$Groupbox1                       = New-Object system.Windows.Forms.Groupbox
$Groupbox1.text                  = "Information:"
$Groupbox1.Size = New-Object System.Drawing.Size(620,480)
$Groupbox1.Location = New-Object System.Drawing.Size(5,5)
$Groupbox1.Padding  = New-Object -TypeName System.Windows.Forms.Padding -ArgumentList (5,5,5,5)
$Form.Controls.Add($Groupbox1)

$Groupbox2                       = New-Object system.Windows.Forms.Groupbox
$Groupbox2.text                  = "List:"
$Groupbox2.Size = New-Object System.Drawing.Size(260,480)
$Groupbox2.Location = New-Object System.Drawing.Size(650,5)
$Groupbox2.Padding  = New-Object -TypeName System.Windows.Forms.Padding -ArgumentList (5,5,5,5)
$Form.Controls.Add($Groupbox2)

$Form.Add_Shown({$Form.Activate()})
[void] $Form.ShowDialog()

查看此处的文档:正如您所说,您似乎使用了
$Form.WindowState='Maximized'
是的,我尝试了
$Form.WindowState='Maximized
。但问题是,如何控制其他工具的大小?像$groupbox还是$button?如果定义这些大小和位置的大小,它将网格化,这意味着我不需要使用
函数converttoscaledPixel
anyomore@马修