PowerShell和.NET新手入门。可以使用configure PowerShell控制台颜色。但是,我如何设置窗口的不透明度。似乎InternalHostRawUserInterface类的属性接受一个枚举ConsoleColor。可以设置窗口的透明度吗?
InternalHostRawUserInterface
ConsoleColor
0lvr5msh1#
正如Joey在他的评论中提到的,您必须与低级API对话来修改窗口的透明度。使用this example,我们可以将其适应PowerShell,如下所示:
function Set-ConsoleOpacity { param( [ValidateRange(10,100)] [int]$Opacity ) # Check if pinvoke type already exists, if not import the relevant functions try { $Win32Type = [Win32.WindowLayer] } catch { $Win32Type = Add-Type -MemberDefinition @' [DllImport("user32.dll")] public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); [DllImport("user32.dll")] public static extern int GetWindowLong(IntPtr hWnd, int nIndex); [DllImport("user32.dll")] public static extern bool SetLayeredWindowAttributes(IntPtr hwnd, uint crKey, byte bAlpha, uint dwFlags); '@ -Name WindowLayer -Namespace Win32 -PassThru } # Calculate opacity value (0-255) $OpacityValue = [int]($Opacity * 2.56) - 1 # Grab the host windows handle $ThisProcess = Get-Process -Id $PID $WindowHandle = $ThisProcess.MainWindowHandle # "Constants" $GwlExStyle = -20; $WsExLayered = 0x80000; $LwaAlpha = 0x2; if($Win32Type::GetWindowLong($WindowHandle,-20) -band $WsExLayered -ne $WsExLayered){ # If Window isn't already marked "Layered", make it so [void]$Win32Type::SetWindowLong($WindowHandle,$GwlExStyle,$Win32Type::GetWindowLong($WindowHandle,$GwlExStyle) -bxor $WsExLayered) } # Set transparency [void]$Win32Type::SetLayeredWindowAttributes($WindowHandle,0,$OpacityValue,$LwaAlpha) }
然后像这样使用它:
Set-ConsoleOpacity -Opacity 50
然后将窗口的不透明度设置为50%
6rvt4ljy2#
按住Ctrl和Shift,然后移动滚轮。这可能是无用的回答,我不确定这是否是永久设置
2条答案
按热度按时间0lvr5msh1#
正如Joey在他的评论中提到的,您必须与低级API对话来修改窗口的透明度。
使用this example,我们可以将其适应PowerShell,如下所示:
然后像这样使用它:
然后将窗口的不透明度设置为50%
6rvt4ljy2#
按住Ctrl和Shift,然后移动滚轮。这可能是无用的回答,我不确定这是否是永久设置