gpt4 book ai didi

powershell - 如何使用 PowerShell 将焦点设置到输入框?

转载 作者:行者123 更新时间:2023-12-01 23:07:54 28 4
gpt4 key购买 nike

我正在使用以下 PowerShell 2.0 代码从 vb 输入框获取输入:

[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
$name = [Microsoft.VisualBasic.Interaction]::InputBox("What is your name?", "Name", "bob")

有时,当我运行它时,输入框会出现在事件窗口的后面。有没有办法让输入框置顶?或者获取其句柄并仅使用 setforegroundwindow 的简单方法?

谢谢!!

最佳答案

考虑到 InputBox 调用是模态的,所以我不确定如何轻松地做到这一点,因此您不能轻易地尝试找到窗口句柄并在该窗口上设置前景(除非您尝试使用后台作业).与其使用这个 VisualBasic 文本输入框,不如使用 WPF/XAML 来“滚动你自己的”实现。这非常简单,但确实需要 WPF,必要时由 PowerShell 2.0 安装。

$Xaml = @'
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="Window"
Title="Name" Height="137" Width="444" MinHeight="137" MinWidth="100"
FocusManager.FocusedElement="{Binding ElementName=TextBox}"
ResizeMode="CanResizeWithGrip" >
<DockPanel Margin="8">
<StackPanel DockPanel.Dock="Bottom"
Orientation="Horizontal" HorizontalAlignment="Right">
<Button x:Name="OKButton" Width="60" IsDefault="True"
Margin="12,12,0,0" TabIndex="1" >_OK</Button>
<Button Width="60" IsCancel="True" Margin="12,12,0,0"
TabIndex="2" >_Close</Button>
</StackPanel>
<StackPanel >
<Label x:Name="Label" Margin="-5,0,0,0" TabIndex="3">Label:</Label>
<TextBox x:Name="TextBox" TabIndex="0" />
</StackPanel>
</DockPanel>
</Window>
'@

if ([System.Threading.Thread]::CurrentThread.ApartmentState -ne 'STA')
{
throw "Script can only be run if PowerShell is started with -STA switch."
}

Add-Type -Assembly PresentationCore,PresentationFrameWork

$xmlReader = [System.Xml.XmlReader]::Create([System.IO.StringReader] $Xaml)
$form = [System.Windows.Markup.XamlReader]::Load($xmlReader)
$xmlReader.Close()

$window = $form.FindName("Window")
$window.Title = "My App Name"

$label = $form.FindName("Label")
$label.Content = "What is your name?"

$textbox = $form.FindName("TextBox")

$okButton = $form.FindName("OKButton")
$okButton.add_Click({$window.DialogResult = $true})

if ($form.ShowDialog())
{
$textbox.Text
}

这可以很容易地包装到 Read-GuiText 函数中。

关于powershell - 如何使用 PowerShell 将焦点设置到输入框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3910535/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com