这段代码将一个焦点放在前面的窗口。如果用户单击鼠标,如何将其保留在那里?有没有办法在脚本运行时禁用鼠标点击?
param([string] $proc="C:\Program Files (x86)\Citrix\ICA Client\concentr.exe", [string]$adm)
cls
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class WinAp {
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
}
"@
$p = Get-Process |where {$_.mainWindowTItle }|where {$_.Name -like "$proc"}
if (($p -eq $null) -and ($adm -ne ""))
{
Start-Process "$proc" -Verb runAs
}
elseif (($p -eq $null) -and ($adm -eq ""))
{
Start-Process "$proc" #-Verb runAs
}
else
{
$h = $p.MainWindowHandle
[void] [WinAp]::SetForegroundWindow($h)
[void] [WinAp]::ShowWindow($h,3);
}
答案 0 :(得分:0)
在PS Community Extensions中有一个简单的cmdlet可以执行此操作。 您可以像这样使用它:
Set-ForegroundWindow (Get-Process PowerShell).MainWindowHandle
在你的情况下,
Set-ForegroundWindow $p.MainWindowHandle
我相信应该做你的工作。
希望它有所帮助。
答案 1 :(得分:0)
此块禁用鼠标和键盘20秒,仍然允许我的其余脚本继续。
Start-Job -ScriptBlock {
$code = @"
[DllImport("user32.dll")]
public static extern bool BlockInput(bool fBlockIt);
"@
$userInput = Add-Type -MemberDefinition $code -Name UserInput -Namespace UserInput -PassThru
function Disable-UserInput($seconds) {
$userInput::BlockInput($true)
Start-Sleep $seconds
$userInput::BlockInput($false)
}
Disable-UserInput -seconds 20 | Out-Null
}