如何保持焦点对焦的窗口

时间:2017-03-03 02:20:40

标签: powershell

这段代码将一个焦点放在前面的窗口。如果用户单击鼠标,如何将其保留在那里?有没有办法在脚本运行时禁用鼠标点击?

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);
}

2 个答案:

答案 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  
}